使用 fstrim 延长 SSD 硬盘寿命

一个新的 systemd 服务,让您的生活更轻松。
144 位读者喜欢这篇文章。
Linux keys on the keyboard for a desktop computer

在过去的十年中,固态硬盘 (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 文件中对所有受支持的已挂载文件系统运行 trim –fstab,并打印丢弃的字节数 –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 timer 服务,计划每周运行一次。要检查存在性和当前状态,请运行 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 似乎正在朝着实现它的标准和安全方式发展。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转行从事系统工程。Alan 的背景是高可用性集群应用。他在 Oracle Press/McGraw Hill 的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”和“Apache 和 Web 堆栈”章节。

5 条评论

这并不是什么新鲜事,该服务自 Fedora 24 以来就已可用,甚至更早,但用户必须像您上面描述的那样启用它。如果 Fedora 现在已默认启用它并从新安装的 fstab 中删除了 discard,那是一个明智之举。Ubuntu 已经这样做了,因此任何 Ubuntu 衍生版本也启用了 fstrim.timer。

要在一条命令中立即启用并启动该服务,请添加 --now 开关。例如:sudo systemctl enable fstrim.timer --now

正确,此处运行 Kubuntu 19.10

NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2020-03-02 00:00:00 CET 5 days left Tue 2020-02-25 06:11:43 CET 3h 54min ago fstrim.timer fstrim.service

回复 作者 Mike Simms (未验证)

写得好,Alan。感谢您的分享。

© . All rights reserved.