当前位置: 首页>>技术教程>>正文


如何启用TRIM?

, ,

问题描述

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

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

最佳解决方法

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开始,Intel,SAMSUNG,OCZ,Patriot和Sandisk固态硬盘默认启用预定的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不可用,因此您必须使用/usr/share/doc/hdparm/contrib/wiper.sh.gz中随hdparm提供的wiper.sh

计划的TRIM(推荐)

这是目前推荐的方法,并且是planed to be activated per default for 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命令到real-time中的SSD(每次删除之后)已被识别为在某些驱动器上的删除速度比平时慢得多。因此,建议通过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是否正在运行,请发出以下命令(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正在工作。但是,如果删除文件后扇区仍然不为空,请稍等片刻,然后再次运行该命令。

次佳解决方法

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

查找关于为LUKS加密分区here设置TRIM的指南


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


通过逐步演练,您可以利用加密SSD分区的TRIM技术,获取cryptsetup 1.4或更高版本以及3.1或更高版本的内核。这导致了hassle-free SSD体验,因为

“TRIM enables the SSD to handle garbage collection overhead, that would otherwise significantly slow down future write operations to the involved blocks, in advance.”

示例设置

使用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

如何

  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被激活。享受您的hassle-free SSD!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/225.html,未经允许,请勿转载。