介绍
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,nodiscard
和mount
:
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.service
和fstrim.timer
单元是默认可用的。
1sudo systemctl enable fstrim.timer
您的服务器现在应该每周一次 TRIM支持该操作的所有安装的文件系统。
结论
您的 Linux 服务器现在应该配置为每周定期 TRIM 支持的所有文件系统,TRIM 有助于最大限度地提高您的 SSD 的长期性能和寿命。
持续的TRIM操作可能听起来很理想,但它们可以给常规文件系统操作增加大量的间接费用. 定期TRIM提供了一个良好的中间点,通过转发在预定工作中对驱动器进行例行维护所需的关键信息,而不是作为每个文件操作的组成部分. 请检查access-date=中的日期值 (帮助) 校对:Soup.