Linux 中的固态硬盘:为 SSD 启用 TRIM

466 位读者喜欢这篇文章。
Three giant robots and a person

Opensource.com

在运行 Linux 的计算机中安装我的第一块固态硬盘 (SSD) 后,我开始探索如何维护它们。固态硬盘与传统磁性硬盘的运行方式不同,并且它们需要来自软件方面的不同维护才能实现最佳功能。

在传统磁性硬盘上,删除的文件在删除时不会从磁盘上完全移除。这就是您可以恢复已删除文件的原因。本质上,文件系统只是引用磁盘上文件的位置,当文件被删除时,该引用被擦除,允许您在新数据覆盖这些空白空间中的旧数据。但是,对于 SSD,新数据只能写入驱动器的全新或已擦除的单元中。由于在写入之前必须清除空间,如果在写入文件时没有足够的可用空间,则必须先将其擦除。 这可能会对性能产生负面影响。

如果操作系统在写入新数据之前擦除未使用的空间,并且在设备未同时尝试写入时进行擦除,则可以提高文件保存性能。 输入 TRIM。TRIM 命令本质上允许您的操作系统告知驱动器哪些数据区域不再使用,以便它可以擦除它们,从而加快驱动器以进行将来的写入,并为 SSD 用户提供更优化的体验。

在 Linux 中,fstrim 提供了此功能,使驱动器为写入新数据做好准备,并延长驱动器的长期使用寿命。由于在我使用过的 Linux 发行版上,SSD 的 TRIM 功能不是自动的,因此必须对其进行计划,否则 SSD 的性能会随着时间的推移而下降。

为了在驱动器上运行 fstrim,驱动器本身以及位于其之上的文件系统都必须支持 TRIM。可以在文件系统挂载过程中启用 TRIM。例如,为了将设备 /dev/sda2 挂载到 /mnt 并启用 TRIM,您将运行

mount -t ext4 -o discard /dev/sda2 /mnt

一旦启用,TRIM 过程本身非常简单。也可以在命令行或 cron 作业中手动完成 SSD 的 TRIM。作为超级用户(使用 su 或 sudo),运行 fstrim / -v 以完成手动 TRIM,或设置一个 cron 作业,以便在您的计算机不使用时定期为您运行此命令。有关 fstrim 的完整选项列表,请参阅其 man page

硬件支持因使用的驱动器接口类型而异,无论是 PCI、ATASCSI 还是 SD/MMC。还值得咨询您的 Linux 供应商,以了解有关您的特定发行版如何支持 TRIM 的更多信息。

例如,Red Hat 提供了以下 SSD 磁盘指南。“随着已用块数接近磁盘容量,性能会下降。性能影响程度因供应商而异。但是,所有设备都会经历某种程度的性能下降。为了解决性能下降问题,主机系统(例如,Linux 内核)可以使用丢弃请求来通知存储给定范围的块不再使用。”

Debian wiki 提供了 SSD 使用的一些基本注意事项:使用 Linux kernel 3.2 或更高版本,使用 SSD 的最新固件,使用 EXT4 文件系统,以及“拥有足够的 DRAM,以便在正常工作负载下无需交换空间即可运行”。

标签
User profile image.
教育家、企业家、开源倡导者、终身学习者、Python 教师。教育心理学硕士,教育领导学硕士,Linux 系统管理员。

19 条评论

很棒的信息。我在我的台式机和笔记本电脑上的 SSD 上使用 JFS,具有 TRIM 功能,并且我认为设置了 noatime。效果很好。

discard 标志使文件系统在删除每个扇区时发出 TRIM 命令。关于这是否是个好主意,存在不同的看法,但它可能会对性能产生影响。文件系统不需要使用 -o discard 挂载即可运行 fstrim。 实际上,一些发行版有一个 cron 作业,每周运行 fstrim -av 以代替使用 -o discard 进行挂载。

Ubuntu 默认在检测到您正在使用 ssd 硬盘驱动器后立即激活 trim 命令。

您能分享一个关于这方面的链接吗?

回复 作者 Greavy Weavy (未验证)

您好,

您可以查看 Ubuntu 16.04 的更新日志,关于 util-linux 软件包。它安装了 fstrim 命令和脚本以自动运行。引用
"util-linux (2.27.1-6ubuntu1) xenial; urgency=medium * Merge from Debian unstable. Remaining changes: - Regularly trim SSDs automatically (core-1311-ssd-trimming): + Add debian/fstrim-all.cron: Call fstrim --all. Installed as /etc/cron.weekly/fstrim."

来自

https://launchpad.net/ubuntu/xenial/+source/util-linux/+changelog

Carlos

回复 作者 Don Watkins

感谢分享并为学习做出贡献。

回复 作者 cromualdo (未验证)

Systemd 也提供 fstrim.timer。
例如,以下是如何为 Debian 启用它
sudo cp /usr/share/doc/util-linux/examples/fstrim.service /etc/systemd/system
sudo cp /usr/share/doc/util-linux/examples/fstrim.timer /etc/systemd/system
sudo systemctl enable fstrim.timer

感谢分享。所有这些都有助于更好地了解如何维护固态硬盘。

回复 作者 Ferdinand Thommes (未验证)

感谢这篇精彩的解释和文章。

这篇文章具有误导性。我知道已经有人评论过这一点,但您真的应该在您的主要文章中修复它。它不是
步骤 1:使用 discards 挂载
步骤 2:现在运行 fstrim
这些实际上是两种完全不同的方法。事实上,在文件系统已使用 discards 挂载后运行 fstrim 是完全没有必要的(第一次除外)。

这篇文章比实际情况晚了 5 年,即使经过这么长时间,充其量也是不准确的。

我不是 SSD 硬盘的粉丝。我不知道它们有什么特别之处,我只是更喜欢我熟悉和喜爱的机械硬盘,它们按照我的需要运行,并且在它们的 EOL 之前不会出现问题。到那时我已经有了另一个来替换它。更不用说我可以用很少的钱购买 2/3/4TB 的硬盘

http://www.tigerdirect.com/applications/SearchTools/item-details.asp?Ed…

http://www.tigerdirect.com/applications/SearchTools/item-details.asp?Ed…

-- 对于我作为一名刚起步的程序员编写的所有脚本来说,空间都绰绰有余!我想当 SSD 成为常态时,我最终将不得不接受它并购买它们,但在那之前?...我会储备机械硬盘并享受寻道时间!哈哈!

我在我的单 SSD 笔记本电脑上安装了 linux,我是否必须启用 TRIM,系统会自动启用它吗?谢谢。

您运行的是哪个版本的 Linux?

回复 作者 Dhonis Frank (未验证)

非常好的文章!

我使用三星 EVO 850 SSD 和几个不同的发行版,但不知道这个问题。

在获得适当的授权和作者署名后,我想为我网站的读者准备一篇文本。

谢谢!

http://www.openbuntu.com/

很好的评论

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.