初来乍到,写一篇小文交流一下日常应用心得,如有錯漏疏忽之处,敬请指正!
去年可以说是 SSD 的普及年,目前 128GB 的 SSD 价格已经降到 600 到 800 的价位,进入了不少喜欢尝鲜的用户的接受范围之内,想当年我买的第一个 SSD 镁光 M4,最便宜的 64GB 版本的时候就得七八百,而现在 64GB 的产品基本淘汰。新年过后,我也趁 X 东促销给新买的笔记本入了一个三星 840。
关于 Linux 下如何对 SSD 做优化配置,网上众说纷纭,很多人都拿不定主意,或者某些配置很麻烦但收效甚微,对初心者来说,确实一头雾水。
我也不妨献丑说一下我平时的做法,希望能帮到大家:
1、安装系统前,确定 BIOS 中 SATA 工作在 AHCI 模式下,而非 IDE 模式,进 BIOS 的方法一般开机时都有提示。以 AMI 的 BIOS 为例,在 chipset -> sourth bridge -> sb SATA configuration 里可以找到配置项,至于其他的 BIOS 我就不一一举例,通常在 BIOS 界面都有提示,再不济逐个找也花不了多少时间。
2、4K 对齐
网上很多人说 Linux 分区不需要 4K 对齐,其实这是一个误区!百度 Linux 吧曾经有一篇横测对比的文章,除了 btrfs 文件系统之外,对其余文件系统的影响还是很大的,当然,我不是说 btrfs 文件系统就比其他文件系统强,我本人用的是 ext4,孰优孰劣可以谷歌一下各种文件系统的性能对比。在这方面 Linux 各大发行版基本上已经帮你考虑了这个问题,就算是 arch 和 gentoo 安装时用到的 fdisk,在创建分区时也默认首扇区对齐,所以基本上不需要太担心这个问题。如果实在不放心可以使用 sudo /sbin/fdisk -l /dev/sda(假设 ssd 是 sda)命令,看看各分区首扇区是否能被 8 整除,如果可以就是对齐了!(至于为什么能被 8 整除就算对齐呢?有兴趣的朋友可以谷歌一下“4K 对齐”的含义)
3、修改 /etc/fstab。
在网上基本上每一篇教程都会推荐加 discard 和 noatime 参数,但很少人知道加上后具体有什么用。
discard 参数就是每删除一次文件就执行一次 trim 指令,至于什么是 trim,估计购买过 ssd 的同学都不陌生,因为 SSD 读写方式和机械硬盘不同,不能直接复写尚未回收区域,简单来说就是告诉 SSD 哪些数据块已经不再使用,让 SSD 回收空间,避免使用复杂手段复写未回收区域,提高性能。但这个过程不可能不耗费资源,每删除一次文件就执行一次 trim 肯定会损失性能,所以我认为只要定时 trim 足矣(配合 crontab 定时执行 trim),没必要加上 discard 参数。
noatime 就是在读文件时不修改文件的 atime 属性,也就是不需要记录时间等信息,节约资源,可以加上 noatime 参数!
4、fstrim
fstrim 命令即向 ssd 发送 trim 指令,如:sudo /sbin/fstrim -v /,一般只需要加 -v] mountpoint 参数就可以。当然,不可能每执行一次就要手动输入,使用 contab 可以自动定时执行。我的方法是将 fstrim 命令写入 bash 脚本,主要是方便多个 SSD 或者多个挂载点的使用,如果想知道命令是否正常执行可以在命令后加上“ >> filename”写入某个文件。如图。
ps:contab 的使用方法也很简单,具体来说就是可以控制在指定时间执行某条命令。 请注意,fstrm 需要 root 权限才能执行,设置 contab 时要使用 root 身份,以确定定时执行命令的权限为 root。
输入 contab -e 命令后会打开 vim 窗口,直接按照 “ * * * * * 想要执行的命令” 的格式配置即可,前面的五个星号代表“分 时 日 月 星期的某天”,假如我要每天上午 7 时执行一次命令,我可以设置为“ * 7 * * * 想要执行的命令”。(contrim 还有很多用法,如果想了解可以谷歌相关资料)
图 3:执行 fstrim 指令