如何启用TRIM?


189

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

默认情况下是否启用TRIM,或者我需要更改某些设置或安装其他软件才能使其工作?如果是这样,怎么办?


我只是按照webupd8上的这些说明进行操作,它给出了一些非常好的选择:-) webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html我尝试了上述自动修边选项“自动修剪”但发现设置每日cron在我的设置中效果更好。
bmbaker

Answers:


197

Ubuntu 14.10以上

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

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

从15.04开始,Ubuntu使用systemd及其计时器(man systemd.timerArch wiki

systemctl list-timers
systemctl status fstrim.timer

Ubuntu 14.04

从Ubuntu 14.04开始,默认情况下,针对英特尔,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的方法:手动,计划和自动:

手动修剪

在Ubuntu中,可以使用以下命令执行fstrim

sudo fstrim /

但是,如果启用了计划的或自动的TRIM,则不需要这样做,如以下各节所述。

注意:对于Ubuntu的11.04和更早版本系统,fstrim不适用,因此你必须使用wiper.sh与供应hdparm/usr/share/doc/hdparm/contrib/wiper.sh.gz

预定的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。但是,已识别出在每次删除后实时将TRIM命令发送到SSD,这使某些驱动器的删除速度比平常慢得多。因此,建议通过cron作业(如上所述)进行每周计划的TRIM。

要在驱动器或分区上启用自动TRIM,需要使用中的discard选项安装它们fstab。首先备份您的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是否正常运行,请发出以下命令(source):

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并验证您的SSD的设备名称: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正在工作。但是,如果删除文件后扇区仍然不为空,则请稍等片刻,然后再次运行命令。


5
测试TRIM可能实际上不能这样工作:serverfault.com/a/401506/60525
chrishiestand 2012年

1
@Uli请有人帮助我。它似乎不适合我。我在我的SSD 4个分区/ /boot /usr,并/opt和我用另一硬盘我/home。我去了cd / #sdc,继续按照说明进行操作,但是我从来没有得到零。提前致谢!
BugShotGG 2013年

1
@lightrush:很棒的编辑!感谢您保持答案最新。
Uli 2013年

1
您可能想syncdd命令后添加a ,因为至少在我的系统上不会立即创建tempfile,所以hdparm不会报告任何内容。
Andreas J.

2
systemd现在可以处理这个问题。sudo systemctl status fstrim.timer
气球

28

请注意,如果您使用的是加密,那么到目前为止发布的解决方案将无济于事,因为您还需要在加密层中启用TRIM支持。可以使用内核版本3.1+和cryptsetup版本1.4+来完成,这两个版本都包含在Ubuntu 12.04中。

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


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


此逐步介绍将使您可以利用TRIM技术对cryptsetup 1.4或更高版本以及内核3.1或更高版本的加密SSD分区进行使用。这将带来无忧的SSD体验,因为

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

设定范例

笔记本电脑以SSD为单驱动器,Linux通过LUKS加密逻辑分区安装在单个ext4 LVM根分区和LVM交换分区中。

固态硬盘:/ 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仍为beta)。
  3. 将丢弃参数添加到/ etc / fstab文件中加密的LVM卷的文件系统选项中。这使LVM分区的文件系统知道要使用TRIM。

    /dev/mapper/volumegroup-root    /   ext4 discard,noatime,nodiratime,errors=remount-ro    0    1
    
  4. 最后一步还不够。只要LUKS不知道您要使用TRIM,出于安全原因,它将有效地阻止来自LVM分区文件系统的所有TRIM操作。将丢弃参数添加到/ 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!


@Marco Ceppi进行编辑的任何特定原因,我忽略了什么?
nem75

只需整理一下降价幅度并删除“签名”行(假设您将通过网站上的评论和投票获得反馈
。– Marco Ceppi

7
如果站点/页面不可用,则应在此处包含该指南。
Cas

除了这实际上是仅链接的答案以外,它根本无法工作。你们中的大多数人都将LVM与LUKS结合使用,后者无法在12.04中传播TRIM。有关更多信息,请参见此答案
gertvdijk

1
按照这些说明进行操作之后,是否仍需要设置cron作业以在14.04上修剪磁盘?
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.