Ubuntu 14.04 固态磁盘配置 Trim
2014-09-13 by dongnan
开始之前
Trim指令也叫disable delete notify
(禁用删除通知),是微软联合各大SSD
厂商所开发的一项技术,属于ATA8-ACS
规范的技术指令。
当我们在操作系统中删除一个文件时,系统并没有真正删掉这个文件的数据,它只是把这些数据占用的地址标记为空即可以覆盖使用。 但这只是在文件系统层面的操作,硬盘本身并不知道那些地址的数据已经无效,除非系统通知它要在这些地址写入新的数据。
在HDD
上本无任何问题因为HDD
允许覆盖写入,但到SSD
上问题就来了,已知道闪存不允许覆盖只能先擦除再写入,
要得到空闲的闪存空间来进行写入,SSD
就必须进行GC
(垃圾回收)操作。
在没有Trim
的情况下,SSD
无法事先知道那些被删除的数据页已经是无效的,
必须到系统要求在相同的地方写入数据时才知道那些数据可以被擦除,这样就无法在最适当的时机做出最好的优化,既影响GC
的效率(间接影响性能),又影响SSD
的寿命。
环境描述
操作系统
head -n1 /etc/issue
Ubuntu 14.04.1 LTS \n \l
磁盘型号
lsscsi
[0:0:0:0] disk ATA SanDisk SDSSDP12 2.0. /dev/sda
[1:0:0:0] cd/dvd TSSTcorp DVD+-RW TS-U633J D800 /dev/sr0
支持TRIM
hdparm -I /dev/sda | grep -i "TRIM supported"
* Data Set Management TRIM supported (limit 8 blocks)
操作步骤
编辑配置文件
vim /etc/fstab
添加参数
# noatime,nodiratime,discard
/dev/mapper/ubuntu--vg-root / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
重新挂载
mount -o remount /
验证
mount -a mount | grep root
/dev/mapper/ubuntu--vg-root on / type ext4 (rw,noatime,nodiratime,discard,errors=remount-ro)
扩展
另一种方法使用 fstrim
命令配合任务计划,定期进行 trim
。
MAN
NAME
fstrim - discard unused blocks on a mounted filesystem
SYNOPSIS
fstrim [-o offset] [-l length] [-m minimum-free-extent] [-v] mountpoint
DESCRIPTION
fstrim is used on a mounted filesystem to discard (or "trim") blocks which are not in use by
the filesystem. This is useful for solid-state drives (SSDs) and thinly-provisioned storage.
By default, fstrim will discard all unused blocks in the filesystem. Options may be used to
modify this behavior based on range or size, as explained below.
The mountpoint argument is the pathname of the directory where the filesystem is mounted.