概述
SSD替代机械硬盘作为Linux 系统的主存储设备时,根据SSD的特点,需要对Linux的一些默认行为进行调整,主要通过减少写操作来提高性能、延长寿命,充分发挥出SSD的优势,同时避免其损坏。
SSD特点分析
由于SSD构成与机械硬盘不同,尽管使用相同的接口,其使用方式及特性还是有很大的差异。如果不考虑这些差异,仍与机械硬盘一样使用,则不但不能发挥SSD的优势,相反,磁盘性能和寿命都会降低,严重时会很快失效。
根据SSD的结构和原理,相对机械硬盘的优点和缺点主要有以下几点:
优点:
1、不存在机械寻道时间,随机读写性能高
2、可通过并行读写极大提高读写性能
3、抗震动
缺点:
1、写数据和删除数据慢,只能按页删除
2、擦写寿命较短
3、容量低、价格高
从操作系统角度来说,主要的变化和注意事项是:
1、随机读写性能高,不再需要进行磁头寻道动作优化及盘片加减速、磁头收起等额外处理,否则可能还会降低性能。
2、闪存写之前要先擦除,写操作是按页(4K字节),擦除是按块(128页x4KB=512KB),即使只改变一个页里的一个字节,也需要擦除整个块,写入4K字节。不作优化,随机写性能会极差。
3、闪存的擦写寿命有限,SLC约10万次,MLC为3千~1万次,SLC只有约500次,相对硬盘磁介质就很有限了,结合第2点问题,如果不进行优化的话,写操作不但性能差,而且集中在一个区域的话,很快会耗尽擦写寿命而报废。
针对以上几个注意事项,在SSD上安装配置Linux系统时,需要从以下几方面进行优化:
1、尽量减少写操作次数,通过取消写盘、内存缓存、合并写操作等手段实现,可提高性能、减少磨损。
2、优化磁盘管理,调整存储数据结构,进行4K对齐、平衡磨损(通常由SSD主控芯片处理,不需考虑)、关闭硬盘驱动的机械硬盘相关优化,以及打开TRIM处理。
3、不要把磁盘存太满
在Linux PC系统中可以如下配置:
- 磁盘分区进行4K对齐
- 关闭磁盘的磁头调度优化
- 打开SSD TRIM支持
- 关闭内存交换分区
- 关闭日志文件系统的日志功能
- 关闭文件系统的无必要的更新
- 使用内存文件系统放置临时文件等频繁变更的文件
- 将不需变更的分区挂载为只读分区
具体操作如下,以Ubuntu12.04,EXT4文件系统为例:
1、磁盘分区4K对齐:
分区时按4k字节对齐,要求每个分区的开始扇区从是8的倍数的扇区开始,这样就能保持4k字节对齐
fdisk -b 4096 /dev/sdX
fdisk -H 224 -S 56 -u /dev/sdc 建议第一个分区从64开始
建立文件系统时 指定扇区大小为4k。
比如对/dev/sda1 建立ext4文件系统 : mkfs.ext4 -b 4096 -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize -I 512 /dev/sda1
建立xfs 文件系统: mkfs.xfs -i size=512 -s size=4096 /dev/sda1
2、关闭磁头调度优化
SSD不需机械硬盘所需的磁头调度优化,可提高效率
cat /sys/block/sda/queue/scheduler
比如显示:
[noop] deadline cfq
在/etc/rc.local中添加如下语句:
echo noop > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler
比如显示:
[noop] deadline cfq
在/etc/rc.local中添加如下语句:
echo noop > /sys/block/sda/queue/scheduler
3、打开SSD TRIM支持
启用TRIM(discard) linux自2.6.33开始支持TRIM
检查SSD硬盘是否支持TRIM:
hdparm -I /dev/sda
如果显示比如(不同硬件可能不同提示):
* Data Set Management TRIM supported 说明支持。
修改fstab中如ext4 SSD分区挂载选项,添加:discard
注:部分低端SSD可能TRIM支持有问题,观察syslog有无相关错误提示。
4、关闭内存交换分区
在分区时不要划分交换分区。
5、关闭日志文件系统的日志功能:
以ext4为例,关闭EXT4分区journaling
以liveCD系统启动,执行:
tune2fs -O ^has_journal /dev/sda1 #打开:tune2fs -O has_journal /dev/sda1
e2fsck -f /dev/sda1 #检查文件系统
检查是否关闭:dmesg | grep EXT4 如果出现:
EXT4-fs (sda1): mounted filesystem without journal 说明设置成功。
原来是:mounted filesystem with ordered data mode
6、关闭文件系统无必要更新:
修改fstab中ext4 SSD分区挂载选项,添加:noatime,nodiratime 关闭文件和目录的访问时间更新
7、使用内存文件系统放置临时文件
修改fstab,添加以下设置
tmpfs /tmp tmpfs defaults,noatime mode=1777 0 0
tmpfs /var/spool tmpfs defaults,noatime mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime mode=1777 0 0
tmpfs /log tmpfs defaults,noatime mode=0755 0 0
tmpfs /var/spool tmpfs defaults,noatime mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime mode=1777 0 0
tmpfs /log tmpfs defaults,noatime mode=0755 0 0
注:实际设置时会报mode参数错误,先去掉mode=xxxx,有时间再查找一下原因。
8、将不需要变更的分区挂在为只读分区
经过以上设置,基本上除了home分区,其它分区基本都不需要更改了,可以直接把root分区挂载为只读:mount / -o remount
实际使用时修改fstab或将该命令加到rc.local中
另外,如果必须要在SSD中存储大量会频繁变更的数据,应该确保分区有足够大的空余容量,否则不但闪存擦写次数会太多,寿命缩短,而且性能会急剧下降,可能开启TRIM功能也不会有太大效果。
尽可能少安装软件,尤其是桌面系统,会生成大量本地配置文件等,如果是双硬盘,应该把Home分区放在机械硬盘上。
版权声明:本文为haveaway原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。