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

默认情况下是否启用了TRIM,或者我需要更改某些设置或安装其他软件来它起作用吗?如果可以,怎么办?

评论

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

#1 楼

从Ubuntu 14.10开始
在Ubuntu 14.10和15.04中,fstrim支持的所有SSD每周都会自动进行TRIMming。 />
$ tail -n1 /etc/cron.weekly/fstrim 
/sbin/fstrim --all || true

Ubuntu 14.04
从Ubuntu 14.04开始,默认情况下,英特尔,SAMSUNG,OCZ,Patriot和Sandisk SSD启用了计划的TRIM。如果您有其他品牌,则可以通过运行以下命令来禁用供应商检查:
systemctl list-timers
systemctl status fstrim.timer

(或只需编辑文件man systemd.timer并添加/etc/cron.weekly/fstrim
Ubuntu 13.10和更早版本
有三种执行TRIM的方法:手动,计划的和自动的:
手动TRIM
在Ubuntu中,可以使用--no-model-check来执行:
sed -i 's/exec fstrim-all/exec fstrim-all --no-model-check/g' /etc/cron.weekly/fstrim

,但是在计划时不需要或启用了自动TRIM,如以下各节所述。
注意:对于Ubuntu 11.04和更早版本的系统,fstrim不可用,因此必须在fstrim中使用wiper.sh随附的hdparm
计划的TRIM(推荐)
这是当前推荐的方法,并且计划默认在Ubuntu 14.04中被激活。以下是在旧版本的ubuntu(11.10至13.10)中手动激活它的方法:
创建每周的CRON作业脚本文件:
sudo fstrim /

将以下代码粘贴到文件中,然后保存并关闭文件:
gksudo gedit /etc/cron.weekly/fstrim

请注意,以上假设仅将根文件系统/usr/share/doc/hdparm/contrib/wiper.sh.gz放在SSD上。如果您有一个或多个SSD上有更多安装点,请按照代码中的说明将它们添加到/
使脚本可执行:
#! /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

最后进行测试:
sudo chmod +x /etc/cron.weekly/fstrim

如果没有错误,则您的cron作业应该工作正常。
自动TRIM(不推荐使用,速度慢)
自从Ubuntu 10.10(内核2.6.33)使用EXT4文件系统以来,就一直支持自动TRIM。但是,已识别出在每次删除后实时将TRIM命令发送到SSD,这使某些驱动器的删除速度比平常慢得多。因此,建议通过cron作业(如上所述)每周安排一次TRIM。
要在驱动器或分区上启用自动TRIM,需要使用SSD_MOUNT_POINTS中的discard选项安装它们。首先备份fstab,然后将其打开以进行编辑:
sudo /etc/cron.weekly/fstrim

fstab添加到SSD驱动器或每个分区的fstab选项条目(逗号分隔)中。
sudo cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab

关闭并保存fstab,然后重新启动,自动TRIM现在应该可以工作。
测试自动TRIM
要测试TRIM是否正在工作,请发出以下命令(源):
UUID=00000000-0000-0000-0000-000000000000  /  ext4  discard,errors=remount-ro  0  1

从输出副本中discard下的编号并验证您的SSD的设备名称:begin_LBA例如sda,sdb,sdc ...
运行以下命令,但用上面获得的详细信息替换System->Administration->Disk Utility(begin_LBA)和[ADDRESS](SSD设备名称)。
cd  / # Replace with SSD file system
sudo dd if=/dev/urandom of=tempfile count=100 bs=512k oflag=direct
sudo hdparm --fibmap tempfile

输出应为长字符串这些扇区的字符数
sudo hdparm --read-sector [ADDRESS] /dev/sdX 

从上方重复sdX命令:
sudo rm tempfile
sync

如果只有零,则自动TRIM起作用。但是,如果在删除文件后扇区仍然不为空,则请稍等片刻,然后再次运行命令。

评论


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

–chrishiestand
2012年6月22日在21:53



@Uli请有人帮助我。它似乎不适合我。我的ssd / / boot / usr和/ opt中有4个分区,并且我的/ home使用了另一个硬盘。我转到cd / #sdc并继续执行说明,但从未得到零。提前致谢!

–BugShotGG
13年3月27日在1:00

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

– Uli
2013年12月4日12:54

您可能想在dd命令之后添加同步,因为至少在我的系统上不会立即创建tempfile,因此hdparm不会报告任何内容。

– Andreas J.
2013年12月9日18:40

systemd现在可以处理此问题。 sudo systemctl状态fstrim.timer

–气球
18年6月3日在23:05

#2 楼

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

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


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


本分步演练将使您利用TRIM技术来为您的加密SSD分区使用cryptsetup 1.4或更高版本以及内核3.1或更高版本。这会带来无忧的SSD体验,因为


“ TRIM使SSD可以处理垃圾收集开销,否则,
会大大减慢对
的未来写入操作/>预先包含块。“


示例设置

笔记本为SSD单个驱动器,Linux通过LVM交换安装在单个ext4 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


HowTo


备份所有数据。您搞砸了文件系统
,因此备份是一个好主意。
请确保您具有必需的内核和cryptsetup版本(3.1
和1.4,例如在Ubuntu 12.04中,但是请注意,在编写本文时12.04
仍为beta)。

在/ etc /中的已加密的LVM卷的文件系统选项中添加丢弃参数。 fstab文件。这使您的LVM分区的文件系统意识到您要使用TRIM。

最后一步还不够。只要LUKS不了解
您要使用TRIM,就会出于安全原因有效地阻止来自LVM分区文件系统的所有TRIM
操作。在
的cryptdevice选项中添加丢弃参数/ etc / crypttab使LUKS接受LVM分区的丢弃行为。

/dev/mapper/volumegroup-root    /   ext4 discard,noatime,nodiratime,errors=remount-ro    0    1



重建initramfs。 crypttab选项存储在此处,并在引导时使用。

sda5_crypt UUID=e364d03f-[...]6cd7e none luks,discard


重新引导。

检查TRIM现在是否处于活动状态。 br />
sudo update-initramfs -c -k all



如果最后一条命令显示的结果是这样的(末尾有1个allow_discards),则一切就绪。

sudo dmsetup table /dev/mapper/sda5_crypt --showkeys



结果

TRIM被激活。尽情享受您的无忧SSD!

评论


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

–nem75
2012年6月4日9:15



只需整理一下标记,然后删除“签名”行(假设您将通过评论和对该站点的投票获得反馈。

– Marco Ceppi♦
2012年6月4日12:49

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

–Cas
2013年1月8日13:22

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

– Gertvdijk
13年5月4日在11:17

按照这些说明进行操作之后,是否仍需要设置cron作业以在14.04上修剪磁盘?

–ajn
15年5月21日在13:45