Ubuntu使用SSD作主存储的配置优化

概述
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系统中可以如下配置:
  1. 磁盘分区进行4K对齐
  2. 关闭磁盘的磁头调度优化
  3. 打开SSD TRIM支持
  4. 关闭内存交换分区
  5. 关闭日志文件系统的日志功能
  6. 关闭文件系统的无必要的更新
  7. 使用内存文件系统放置临时文件等频繁变更的文件
  8. 将不需变更的分区挂载为只读分区

具体操作如下,以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 

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
注:实际设置时会报mode参数错误,先去掉mode=xxxx,有时间再查找一下原因。

8、将不需要变更的分区挂在为只读分区
经过以上设置,基本上除了home分区,其它分区基本都不需要更改了,可以直接把root分区挂载为只读:mount / -o remount 
实际使用时修改fstab或将该命令加到rc.local中

另外,如果必须要在SSD中存储大量会频繁变更的数据,应该确保分区有足够大的空余容量,否则不但闪存擦写次数会太多,寿命缩短,而且性能会急剧下降,可能开启TRIM功能也不会有太大效果。
尽可能少安装软件,尤其是桌面系统,会生成大量本地配置文件等,如果是双硬盘,应该把Home分区放在机械硬盘上。

版权声明:本文为haveaway原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。