如何为 Linux 服务器上的固态硬盘存储配置周期性 TRIM

介绍

SSD的内部垃圾收集流程负责删除块并管理磨损平衡,但是,文件系统通常会删除数据,仅仅在自己的记录中将其标记为可用空间。

这意味着SSD通常不会知道一个页面不再需要,直到它收到文件系统的指示,以便在以后写到相同的逻辑位置。

TRIM命令传播了从文件系统不再使用哪些数据到SSD的信息,这允许设备在空闲时执行其常规垃圾收集任务,以确保有零页面准备处理新的写作。

然而,每次删除时执行 TRIM 可能很昂贵,并且可能会对驱动器的性能产生负面影响。

在本教程中,您将了解SSD和TRIM如何工作,然后在各种Linux发行版上启用定期TRIM。

前提条件

在本教程中,您将在三个不同的 Linux 发行版上启用定期 TRIM,Ubuntu 22.04, Debian 11 和 CentOS 8。

第1步:在SSD上存储数据

为了更好地了解TRIM解决的问题,有助于了解SSD如何存储和管理数据的几点。

数据单元

SSD上的数据以固定尺寸的单位写入和读取,称为 pages

阅读,写作和删除限制

SSD 可以单独阅读和写入页面,但是,它们只能在区块级别删除数据,另一个限制是,只可以在完全 zeroed 的页面上执行写入(所有位数设置为 0)。

为了修改数据,SSD实际上必须从旧位置读取信息,在内存中修改它,然后将修改的数据写入新的零页面,然后更新一个内部表,以绘制操作系统给设备上数据的新物理位置的逻辑位置。

回收固定页面

为了恢复不复存在的页面,SSD的内部垃圾收集流程必须从块中读取所有有效的页面,然后将其写入新的块中。

步骤 2 - 禁用连续 TRIM

安装时,您可能已经在设备上启用了连续 TRIM. 某些服务器或安装磁盘可能会自动配置连续 TRIM. 在启用定期 TRIM 之前,请仔细查看当前的安装选项。

通过安装一个驱动器或分区使用discard选项来启用连续 TRIM。

首先,找出目前配备了discard选项的文件系统:

1findmnt -O discard
1[secondary_label Output]
2TARGET SOURCE FSTYPE OPTIONS
3/mnt/data  /dev/sda1 ext4 rw,relatime,discard,data=ordered
4/mnt/data2 /dev/sdb1 ext4 rw,relatime,discard,data=ordered

您可以远程安装这些文件系统,而无需选择discard选项,包括-o remount,nodiscardmount:

1sudo mount -o remount,nodiscard /mnt/data
2sudo mount -o remount,nodiscard /mnt/data2

如果您再次运行findmnt命令,您不应该收到任何结果:

1findmnt -O discard

接下来,使用nano或您最喜欢的文本编辑器,打开/etc/fstab文件,查看当前为您的文件系统定义的安装选项。

1sudo nano /etc/fstab

寻找discard选项,并从你找到的行中删除它:

1[label /etc/fstab]
2. . .
3# /dev/sda1 /mnt/data ext4 defaults,nofail,discard 0 0
4/dev/sda1 /mnt/data ext4 defaults,nofail 0 0
5# /dev/sdb1 /mnt/data2 ext4 defaults,nofail,discard 0 0
6/dev/sdb1 /mnt/data2 ext4 defaults,nofail 0 0

完成后保存并关闭文件 如果您正在使用nano,请按Ctrl+X,然后在提示时按Y,然后输入。 文件系统现在将安装在没有Discard选项的情况下,并将以相同的方式安装在随后的启动中。

步骤 3 - 设置systemd分布的定期 TRIM

使用Ubuntu 22.04

Ubuntu 22.04 配备了由cron每周运行的脚本,这意味着在下面的部分中描述的systemd方法的启用对于 Ubuntu 22.04 来说是不必要的。

要查看脚本,请使用:

1cat /etc/cron.weekly/fstrim
1[secondary_label Output]
2#!/bin/sh
3# trim all mounted file systems which support it
4/sbin/fstrim --all || true

正如你所看到的,这个脚本需要一个版本的fstrim--all旗帜. 许多版本的fstrim发送与以前的Ubuntu版本不包含这个选项。

其他systemd分布

对于其他systemd发行版,可以通过fstrim.timer文件启用定期 TRIM,该文件将每周一次在所有能够安装的驱动器上运行 TRIM 操作。

在本文写作时,这是以下分布和上面的最佳方法:

  • Debian 8 * CentOS 7 * Fedora 23 * 核心操作系统

对于 CentOS 和 Fedora,fstrim.servicefstrim.timer单元是默认可用的。

1sudo systemctl enable fstrim.timer

您的服务器现在应该每周一次 TRIM支持该操作的所有安装的文件系统。

结论

您的 Linux 服务器现在应该配置为每周定期 TRIM 支持的所有文件系统,TRIM 有助于最大限度地提高您的 SSD 的长期性能和寿命。

持续的TRIM操作可能听起来很理想,但它们可以给常规文件系统操作增加大量的间接费用. 定期TRIM提供了一个良好的中间点,通过转发在预定工作中对驱动器进行例行维护所需的关键信息,而不是作为每个文件操作的组成部分. 请检查access-date=中的日期值 (帮助) 校对:Soup.

Published At
Categories with 技术
comments powered by Disqus