工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆

linux下使用固态硬盘ssd的优化配置问题,配置trim(discard)

现在固态硬盘越来越流行,如何使用固态硬盘?本人参考了一些国外最新的资料,总结如下:

参考:
http://en.opensuse.org/SDB:SSD_discard_%28trim%29_support
1、内核支持。kernel版本>2.6.37 中包含只针对ext4文件的FITRIM的系统调用。
因此要使用固态硬盘,内核版本必需大于2.6.33,由于2.6.37针对ext4下的固态硬盘进行了优化建议采用2.6.37以上版本,同时文件系统采用ext4。
2、如何使用ssd的TRIM功能。
下载最新版的hdparm,最新版的hdparm支持linux下的trim,也就是discard。
在/etc/rc.local下增加/sbin/wiper.sh
在/etc/fstab 下修改为如下:
/dev/sda1 / ext4 discard,defaults
增加discard选项即可。

 

几点建议:
1、将/tmp 和 /var/tmp目录挂载到内存中,避免对ssd频繁读写
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

 

why not btrfs?

tmpfs on /var/run type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /media type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /var/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /tmp type tmpfs (rw,relatime)
/dev/sda2 on / type btrfs (rw,noatime,nodiratime,ssd)

 

原本在机械硬盘上,写入数据时,系统会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。而在删除数据时,系统只会在此处做个标记,说明这里应该是没有东西了,等到真正要写入数据时再来真正删除,并且做标记这个动作会保留在磁盘缓存中,等到磁盘空闲时再执行。而当系统识别到SSD并确认SSD支持Trim后,在删除数据时,会不向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的时候,由于NAND闪存保存数据是纯粹的数字形式,因此可以直接根据Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花时间去擦除原本的数据。
  以上就是Trim的原理以及真正作用。

--------------------------------

Linux下的trim支持叫discard,现在ext4和xfs都支持(btrfs应该也支持),内核需要>=2.6.37,xfs的支持在3.0才比较完善。具体需要设置这几个方面:

1. 内核
升级到2.6.37以上,最好用最新的3.0。
禁用disk IO scheduler模块。

2. 文件系统表
修改fstab文件,在挂载参数中加上discard;最好也同时加上noatime。

3. 调整文件系统参数
ext4的话最好禁用日志功能,能防止写入额外的数据而减少ssd寿命。

4. 相关文档:
xfs官网对ssd支持的说明
ext4的ssd设置
suse官方对ssd支持的相关说明
fdisk -H 224 -S 56 /dev/sdd
fdisk -H 32 -S 32 /dev/sdd

配置固态硬盘(SSD)的Ext 4

接着需要关注的就是文件系统。想要优化文件系统删除字节区块的效率,就必须确保小于512K的文件分布在不同的删除字节区块上。要做到这一点,必须确保在创建可扩展文件系统时指定了需要使用的条带的宽度和幅度。这些值在页面中指定,默认大小为4KB。要创建一个最佳的可扩展文件系统,应该使用如下命令:
mkfs.ext4 -E stride=128,stripe-width=128 /dev/sda1

如果要修改现有的文件系统的参数,可以使用tune2fs实用程序:

tune2fs -E stride=128,stripe-width=128 /dev/sda1

配置固态硬盘(SSD)的I/O调度程序
优化的第三个部分涉及到I/O调度程序。该模块是一个决定如何处理I/O请求的核心组件。默认情况下就是非常公平的排队,对于普通的磁盘驱动器来说,这是很好的方案,但对于以期限调度为优势的固态硬盘来说,这并不是最好的。

如果你想在系统中对所有磁盘采用期限调度,可以在内核加载时把elevator=deadline这句话加入到系统引导管理器(GURB)中;如果你只是想针对某一个磁盘,就应该在rc.local文件中加入类似如下实例的一句话,那么每次当系统重启,期限调度就会应用到指定的磁盘。如下实例将会对/dev/sdb磁盘采用期限调度。

echo deadline > /sys/block/sda/queue/scheduler

清理固态硬盘(SSD)中的数据块

最后一个重要的步骤称为“清理”,该操作可以确保在删除文件后相应的数据块真正清空,然后在创建新的文件时才能有可用的数据块。如果没有清理操作,一旦数据块空间填满,固态硬盘的性能就会下降。如果使用丢弃挂载选项,当文件删除后,数据块也会被相应地清除,这样可以显著提高固态硬盘的性能。2.6.33以上的内核已经支持清理操作。

要启用清理功能,需要在固态硬盘的/etc/fstab配置中为挂载文件系统添加丢弃选项。示例中的命令为挂载的根逻辑卷启用了清理操作。

/dev/system/root/ext4 discard,errors=remount-ro,noatime 0 1
该命令同时也添加了Noatime选项,该选项保证了文件的访问时间不会因为每次读取而更新,从而降低对文件系统的写入次数。

在fasab配置文件中完成对文件系统的这些修改后,重启计算机,或者通知文件系统重新读取其配置,然后使用/etc/fstab文件中包含的mount -o命令重新安装每个文件系统。

 

 

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论

评论内容 (必填):