在过去的十年中,固态硬盘 (SSD) 带来了一种新的存储管理方式。与传统的机械硬盘相比,SSD 具有静音、低温运行和更快的接口规范等优点。当然,新技术也带来了新的维护和管理方法。SSD 具有一个名为 TRIM 的功能。这本质上是一种回收设备上未使用块的方法,这些块可能以前被写入过数据,但不再包含有效数据,因此可以返回到通用存储池以供重复使用。Opensource.com 的 Don Watkins 在他 2017 年的文章 “Linux 中的固态硬盘:为 SSD 启用 TRIM” 中首次撰写了关于 TRIM 的文章。
如果您一直在您的 Linux 系统上使用此功能,那么您可能熟悉下面描述的两种方法。
旧方法
Discard
我最初通过 mount 命令的 discard 选项启用了此功能。配置被放置在每个文件系统的 /etc/fstab 文件中。
# cat /etc/fstab
UUID=3453g54-6628-2346-8123435f /home xfs defaults,discard 0 0
discard 选项启用自动在线 TRIM。最近关于这是否是最佳方法存在争议,因为它可能对性能产生负面影响。使用此选项会导致每次将新数据写入驱动器时都启动 TRIM。这可能会引入额外的活动,从而干扰存储性能。
Cron
我从 fstab 文件中删除了 discard 选项。然后我创建了一个 cron 作业,以便按计划调用该命令。
# crontab -l
@midnight /usr/bin/trim
这是我最近在我的 Ubuntu Linux 系统上使用的方法,直到我了解了另一种方法。
新的 TRIM 服务
我最近发现存在一个用于 TRIM 的 systemd 服务。Fedora 在版本 30 中引入了 这个服务到他们的发行版中,尽管在版本 30 和 31 中默认情况下未启用,但计划在版本 32 中启用。如果您正在使用 Fedora Workstation 31 并且想要开始使用此功能,您可以非常轻松地启用它。我还将在下面向您展示如何测试它。此服务并非 Fedora 独有。存在状态将取决于各个发行版。
测试
我喜欢先进行测试,以便更好地了解幕后发生的事情。我通过打开终端并发出服务配置为调用的命令来完成此操作。
/usr/sbin/fstrim --fstab --verbose --quiet
fstrim 的 –help 参数将描述这些参数和其他参数。
$ sudo /usr/sbin/fstrim --help
Usage:
fstrim [options] <mount point>
Discard unused blocks on a mounted filesystem.
Options:
-a, --all trim all supported mounted filesystems
-A, --fstab trim all supported mounted filesystems from /etc/fstab
-o, --offset <num> the offset in bytes to start discarding from
-l, --length <num> the number of bytes to discard
-m, --minimum <num> the minimum extent length to discard
-v, --verbose print number of discarded bytes
--quiet suppress error messages
-n, --dry-run does everything, but trim
-h, --help display this help
-V, --version display version
所以,现在我可以看到 systemd 服务配置为在我的 /etc/fstab 文件 –fstab 中对所有受支持的已挂载文件系统运行 trim,并打印丢弃的字节数 –verbose,但抑制可能发生的任何错误消息 –quiet。了解这些选项对于测试很有帮助。例如,我可以从最安全的选项开始,即 dry run。我也将去掉 quiet 参数,以便我可以确定我的驱动器设置是否会发生任何错误。
$ sudo /usr/sbin/fstrim --fstab --verbose --dry-run
这将简单地显示 fstrim 命令将根据在您的 /etc/fstab 文件中配置的文件系统执行的操作。
$ sudo /usr/sbin/fstrim --fstab --verbose
现在这将向驱动器发送 TRIM 操作,并报告每个文件系统丢弃的字节数。下面是我最近在新 NVME SSD 上全新安装 Fedora 后的一个示例。
/home: 291.5 GiB (313011310592 bytes) trimmed on /dev/mapper/wkst-home
/boot/efi: 579.2 MiB (607301632 bytes) trimmed on /dev/nvme0n1p1
/boot: 787.5 MiB (825778176 bytes) trimmed on /dev/nvme0n1p2
/: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/wkst-root
启用
Fedora Linux 实现了 systemd 定时器服务,计划每周运行一次。要检查是否存在以及当前状态,请运行 systemctl status。
$ sudo systemctl status fstrim.timer
现在,启用该服务。
$ sudo systemctl enable fstrim.timer
验证
然后您可以验证定时器是否已启用,方法是列出所有定时器。
$ sudo systemctl list-timers --all
将出现引用 fstrim.timer 的以下行。请注意,定时器实际上激活了 fstrim.service。这是实际调用 fstrim 的位置。与时间相关的字段显示 n/a,因为该服务刚刚启用,尚未运行。
NEXT LEFT LAST PASSED UNIT ACTIVATES
n/a n/a n/a n/a fstrim.timer fstrim.service
结论
此服务似乎是在您的驱动器上运行 TRIM 的最佳方式。它比必须创建自己的 crontab 条目来调用 fstrim 命令要简单得多。不需编辑 fstab 文件也更安全。观察固态存储技术的发展以及得知 Linux 似乎正在朝着实施它的标准和安全方式发展,这很有趣。
5 条评论