跳转至

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.

参考

回到页面顶部