固态硬盘

安装后,您需要为固态驱动器启用 TRIM。 你可以通过运行检查哪些设备允许 TRIM:

$ lsblk --discard

如果 DISC-GRAN(丢弃颗粒度)和 DISC-MAX(丢弃最大字节数)列非零,这意味着该块设备有 TRIM 支持。如果你的固态硬盘分区没有显示支持 TRIM,请确认你选择了一个支持 TRIM 的文件系统(ext4, Btrfs, F2FS, 等等)。注意,F2FS 需要内核 4.19 或更高版本来支持 TRIM。

要一次性运行 TRIM,你可以手动运行 fstrim(8) 。例如,如果你的 / 目录在一个 SSD 上。

# fstrim /

要自动运行 TRIM,使用 cron 或在 /etc/fstab 中添加 discard 选项。

使用cron的定期TRIM

将以下行添加到 /etc/cron.weekly/fstrim:

#!/bin/sh

fstrim /

最后,使该脚本可执行:

# chmod u+x /etc/cron.weekly/fstrim

使用 fastab discard 和 持续 trim

你可以使用连续或定期的 TRIM,但如果你的 SSD 不能正确处理 NCQ,则不建议使用连续 TRIM。请参考内核的黑名单

编辑 /etc/fstab ,添加 discard 选项以阻止需要TRIM的设备。

例如,如果 /dev/sda1 是一个 SSD 分区,格式化为 ext4,挂载 在 /:

/dev/sda1  /           ext4  defaults,discard   0  1

LVM

要为 LVM 的命令(lvremove, lvreduce, 等等)启用 TRIM,编辑 /etc/lvm/lvm.conf ,取消对 issue_discards 选项的注释,并将其设置为1

issue_discards=1

LUKS

警告: 在为你的 LUKS 分区启用 discard 之前,请注意安全问题

要打开一个加密的 LUKS 设备并允许 discards ,用 --allow-discards 选项打开设备:

# cryptsetup luksOpen --allow-discards /dev/sdaX luks

非 root 设备

编辑 /etc/crypttab,为 SSD 上的设备设置 discard 选项。例如,如果你有一个 LUKS 设备,名称为 externaldrive1,设备为 /dev/sdb2 ,密码为 none

externaldrive1  /dev/sdb2   none    luks,discard

Root 设备

如果你的根设备在 LUKS 上,把 rd.luks.allow-discards 添加到 CMDLINE_LINUX_DEFAULT。在 GRUB 的情况下,编辑 /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="rd.luks.allow-discards"

验证配置

要验证你是否已为 LUKS 正确配置 TRIM,请运行:

# dmsetup table /dev/mapper/crypt_dev --showkeys

如果此命令输出包含字符串 allow_discards, 在你的 LUKS 设备上成功启用了 TRIM。

ZFS

在 ZFS 池上运行 trim 之前,确保池中的所有设备都支持它:

# zpool get all | grep trim

如果池允许 aurotrim (默认设置为 off),你可以定期或者自动 trim zfs池。要一次性 trim 你的 zfs 池的名字

# zpool trim yourpoolname

定期 TRIM

将以下行添加到 /etc/cron.daily/ztrim:

#!/bin/sh
zpool trim yourpoolname

最后,使该脚本可执行:

# chmod u+x /etc/cron.daily/ztrim

自动 trim

设置 autotrim yourpoolname, 请运行:

# zpool set autotrim=on yourpoolname