提升SSD/HDD性能的最佳/etc/fstab设置

在查看来自不同作者的测试博客文章后,我知道在2011年时,EXT4已经是最快的文件系统。然而,还有其他设置可以使SSD更快,这些设置我在此链接中找到:http://www.howtogeek.com/62761/how-to-tweak-your-ssd-in-ubuntu-for-better-performance/

sudo gedit /etc/fstab

  • /分区中添加noatime,nodiratime
  • 如果内核版本大于2.6.33,还需添加discard选项
  • tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0

另外参考https://wiki.ubuntu.com/MagicFab/SSDchecklist

sudo gedit /etc/fstab

  • /分区中添加noatime,就这样。

  • 如果你没有启用磁盘日志功能,那么可以使用data=writeback挂载选项。否则,请添加data=ordered,这是完全启用磁盘日志和不启用磁盘日志之间的一个很好的折中方案。

  • tmpfs /tmp tmpfs nodev,nosuid,noexec,mode=1777 0 0

为什么只有noatime?如何确定安装时磁盘是否启用了日志功能?哪种方式更快?无日志还是有日志?无日志的data=writeback和有日志的data=ordered有什么区别?

为什么两篇文章中的tmpfs /tmp不同?它们有什么区别,哪个更好,为什么?

所有这些都是关于SSD的,但我能在HDD中使用相同的设置吗? 我想找到一个关于HDD和SSD的答案,因为我已经为它们编写了一次性脚本,用于在我的https://wiki.ubuntu.com/Kangarooo/AfterCleanInstallation上进行设置。
4个回答

howtogeek这个网站是你提到的两个网站中更负责任的一个。atime调整只是元数据优化,用于在文件接收特定时间戳更新时进行流水线处理。它适用于任何媒体,也取决于你的应用程序对元数据一致性的敏感程度。大多数桌面用户不会错过它。
至于禁用日志记录...那简直太疯狂了。使用这些先进的文件系统的整个目的就是在保证数据完整性的同时提供更好的性能。要明白,如果你做出这样的交换,你就是用个人数据来换取了一点点速度的提升。我个人不建议这样做。大多数人一开始就没有做好备份以弥补这种风险。
分区对齐确实很重要,但不调整也不会致命。这真的取决于磁盘的访问频率。假设它是不对齐的,如果你有大量的I/O操作(服务器)经常发生,你会看到改善。对于普通桌面使用,谁知道呢,可能不会有明显的改善。
我会忽略你提到的Ubuntu维基,除了分区对齐是有价值的这个概念。这里有一个更负责任的链接:

http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/index.html?ca=dgr-lnxw074KB-Disksdth-LX

那个Ubuntu wiki中的一些建议就是错的,比如使用“nodev”重新配置tmpfs。它已经是一个RAMFS了!

将Firefox缓存移动到/tmp可能会提高当前会话的速度。尽管这可能存在安全隐患(不再在您的主目录中安全),并且每次启动时都会重新构建,因为tmpfs不是持久的。

总结:

在ext4选项中添加“discard”是明智的,writeback是默认模式,保持日志设置不变,atime调整是可以的,切换到deadline或nop调度器也可能有用,分区对齐是可选的。其余的都是胡说八道。


atime调整很好,但最终毫无意义。relatime是一个很好的折中方案,只有在文件自上次访问以来被修改过时才会导致atime写入。这已经大大减少了atime写入的频率,同时又不完全丧失atime功能。 - Caesium
1我同意relatime是最好的折衷方案,但我在分析中只限于所提供的事实。很多这些微调其实并不重要,除非你有服务器工作负载。我说的是性能问题,而不是磨损平衡。这个用户可以做的最重要的事情就是启用discard支持。我现在已经拥有一块SSD 1.5年了,从来没有进行过任何调整,运行得很好,自己管理着丢弃操作。 - ppetraki
1为什么nodev会被认为是愚蠢的呢?它并不是让系统意识到文件系统是一个设备,而是阻止设备文件被当作设备对待。你可以通过使用sudo mknod -m666 test c 1 3来测试不同的情况(这将创建一个名为test的文件,作为可写的空设备,即/dev/null)。在挂载了nodev的文件系统上,无论你以root身份运行与否,都无法执行echo > testcat test命令。 - Lekensteyn
我知道man手册上说的是什么。那么,你能解释一下这对性能有任何影响吗?尤其是在SSD的情况下? - ppetraki

discard”选项不再建议用于基于SSD的文件系统,因为它会减慢速度,原因是Linux内核对该命令有一个非优化的实现。(如果我没记错,TRIM请求一次只使用一个ATA扇区范围,这使得速度变慢。)

相反,创建一个每日定时任务,运行fstrim -v /(或者你的SSD分区所在的位置)。就是Ubuntu 14.04 LTS将要发布的解决方案。



除了ppetraki的回答以外,如果您担心闪存磨损问题,您应该为/tmp文件夹挂载一个RAM文件系统。
tmpfs /tmp tmpfs defaults,size=15%,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=10%,mode=1777 0 0

但是,除非你确定不会崩溃,并且已经安装了所有创建新的/var/log目录(如apache)并且不希望它们在启动时消失的服务器软件包,否则请不要将你的/var/log文件移动到RAM中。
tmpfs /var/log tmpfs defaults,mode=0755 0 0 
tmpfs /var/log/apt tmpfs defaults 0 0
none /var/cache unionfs dirs=/tmp:/var/cache=ro 0 0

这是JR0cket的回答和其他关于这个主题的博客文章的结合。

不要在/tmp上启用'noexec',否则您将面临与某些需要从/tmp执行的3D驱动程序有关的问题。现代硬件的NVIDIA驱动程序具有此要求,如果启用了'noexec',您将无法运行任何应用程序(例如xscreensaver glmatrix),它们会导致段错误。

所以我可以添加一行没有noexec的吗?像这样?tmpfs /tmp tmpfs nodev,nosuid,mode=1777 0 0 - Kangarooo