如何启用TRIM?

我知道Linux内核从版本2.6.33开始支持TRIM,所以在ubuntu中应该有TRIM支持。

是默认启用TRIM还是我需要更改某些设置或安装其他软件才能使用? 如果是这样,怎么样?

Ubuntu 14.10起

在Ubuntu 14.10和15.04中,每周都会在fstrim支持的所有SSD上自动进行fstrim

 $ tail -n1 /etc/cron.weekly/fstrim /sbin/fstrim --all || true 

Ubuntu 14.04

从Ubuntu 14.04开始, 默认情况下会为Intel,SAMSUNG,OCZ,Patriot和Sandisk SSD启用预定的TRIM 如果您有其他品牌,可以通过运行以下命令来禁用供应商检查:

 sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim 

(或者只是编辑文件/etc/cron.weekly/fstrim并添加--no-model-check

Ubuntu 13.10和之前的版本

有三种方法可以执行TRIM,手动,计划和自动:

手动TRIM

在Ubuntu中,这可以使用fstrim执行:

 sudo fstrim / 

但是,如果启用了计划或自动TRIM,则不需要它,如以下部分所述。

注意:对于Ubuntu 11.04及更早版本的系统,fstrim不可用,因此您必须在/usr/share/doc/hdparm/contrib/wiper.sh.gz使用随hdparm提供的wiper.sh

预定TRIM(推荐)

这是目前推荐的方法,并计划在Ubuntu 14.04默认激活 。 以下是在旧版本的ubuntu(11.10到13.10)中手动激活它的方法:

创建每周CRON作业脚本文件:

 gksudo gedit /etc/cron.weekly/fstrim 

将以下代码粘贴到文件中,然后保存并关闭该文件:

 #! /bin/sh # By default we assume only / is on an SSD. # You can add more SSD mount points, separated by spaces. # Make sure all mount points are within the quotes. For example: # SSD_MOUNT_POINTS='/ /boot /home /media/my_other_ssd' SSD_MOUNT_POINTS='/' for mount_point in $SSD_MOUNT_POINTS do fstrim $mount_point done 

请注意,上面假设只有您的根文件系统/位于SSD上。 如果有一个或多个SSD上有更多挂载点,请按照代码中的说明将它们添加到SSD_MOUNT_POINTS

使脚本可执行:

 sudo chmod +x /etc/cron.weekly/fstrim 

最后测试一下:

 sudo /etc/cron.weekly/fstrim 

如果您没有看到任何错误,那么您的cron作业应该正常工作。

自动TRIM(已弃用,慢速)

自Ubuntu 10.10(内核2.6.33)以来,EXT4文件系统支持自动TRIM。 但是,在每次删除后,实时向SSD发送TRIM命令会使某些驱动器上的删除速度比平时慢得多。 因此,建议通过cron作业(如上所述)进行每周计划的TRIM。

要在驱动器或分区上启用自动TRIM,需要在fstab使用discard选项进行安装。 首先备份你的fstab然后打开它进行编辑:

 sudo cp /etc/fstab ~/fstab-backup gksudo gedit /etc/fstab 

discard添加到SSD驱动器或每个分区的fstab选项条目(逗号分隔)。

 UUID=00000000-0000-0000-0000-000000000000 / ext4 discard,errors=remount-ro 0 1 

关闭并保存fstab,然后重启并自动TRIM现在应该正常工作。

测试自动TRIM

要测试TRIM是否正在运行,请发出以下命令( 源 ):

 cd / # Replace with SSD file system sudo dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct sudo hdparm --fibmap tempfile 

从输出中复制begin_LBA下的begin_LBA并validationSSD的设备名称: System->Administration->Disk Utility例如sda,sdb,sdc

运行以下命令,但将[ADDRESS] (begin_LBA)和sdX(SSD设备名称)替换为上面获得的详细信息。

 sudo hdparm --read-sector [ADDRESS] /dev/sdX 

输出应该是这些扇区的长字符串

 sudo rm tempfile sync 

从上面重复hdparm命令:

 sudo hdparm --read-sector [ADDRESS] /dev/sdX 

如果你只得零,则自动TRIM正在工作。 但是,如果在删除文件之后扇区仍然不为空,则等待一段时间再次运行该命令。

请注意,如果您使用加密,到目前为止发布的解决方案对您没有帮助,因为您还需要在加密层中启用TRIM支持。 这可以通过内核版本3.1+和cryptsetup版本1.4+来完成,这两个版本都包含在Ubuntu 12.04中。

在此处找到有关为LUKS加密分区设置TRIM的指南


如何在Ubuntu和Debian中激活LUKS加密分区上的TRIM


本分步演练将让您利用TRIM技术为您的加密SSD分区提供1.4或更高版本的内存以及内核3.1或更高版本。 这导致无障碍的SSD体验,因为

“TRIM使SSD能够处理垃圾收集开销,否则将会大大减慢未来对相关块的写入操作的速度。”

示例设置

笔记本用SSD作为单驱动器,Linux安装在单个ext4 LVM根分区中,带有LVM交换分区,两者都通过LUKS加密逻辑分区。

SSD:/ dev / sda

 sudo fdisk -l /dev/sda /dev/sda1 # boot partition (83) (unencrypted, ext4) /dev/sda2 # extended partition /dev/sda5 # logical partition (83) with LUKS encryption ls /dev/mapper /dev/mapper/sda5_crypt # encrypted LUKS device in physical /dev/sda5 partition /dev/mapper/volumegroup-root # rootpartition sda5_crypt /dev/mapper/volumegroup-swap # swap partition sda5_crypt 

如何

  1. 备份所有数据。 你搞乱你的文件系统,所以备份是一个好主意。
  2. 确保你有所需的内核和cryptsetup版本(3.1和1.4,例如在Ubuntu 12.04中,但要注意,在编写时12.04仍然是测试版)。
  3. 将discard参数添加到/ etc / fstab文件中加密LVM卷的文件系统选项中。 这使得LVM分区的文件系统意识到您要使用TRIM。

     /dev/mapper/volumegroup-root / ext4 discard,noatime,nodiratime,errors=remount-ro 0 1 
  4. 但最后一步还不够。 只要LUKS不知道您想要使用TRIM,它就会有效地阻止来自LVM分区文件系统的所有TRIM操作,出于安全原因。 将discard参数添加到/ etc / crypttab中的cryptdevice选项,以使LUKS接受LVM分区的丢弃行为。

     sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard 
  5. 重建你的initramfs。 crypttab选项存储在那里并在引导时使用。

     sudo update-initramfs -c -k all 
  6. 重启。

  7. 检查TRIM现在是否处于活动状态。

     sudo dmsetup table /dev/mapper/sda5_crypt --showkeys 
  8. 如果最后一个命令显示这样的结果(最后是1个allow_discards),那么你们都已经设置好了。

     0 77656056 crypt aes-cbc-essiv:sha256 abc[...]c7a0c 0 8:5 2056 1 allow_discards 

结果

TRIM已激活。 享受无忧无虑的SSD!