36.3. 丢弃未使用块
您可以在支持它们的块设备中执行或调度丢弃操作。块丢弃操作与挂载的文件系统不再使用的文件系统块进行通信。块丢弃操作允许 SSD 优化垃圾回收例程,它们可以通知精简置备存储来重新使用未使用的物理块。
要求
基本文件系统的块设备必须支持物理的丢弃(discard)操作。
如果
/sys/block/<device>/queue/discard_max_bytes
文件中的值不为零,则支持物理丢弃操作。
36.3.1. 块丢弃操作的类型 复制链接链接已复制到粘贴板!
您可以使用不同方法运行 discard 操作:
- 批量丢弃
- 由用户明确触发,并丢弃所选文件系统中所有未使用的块。
- 在线丢弃
-
在挂载时指定,并实时触发,而无需用户干预。在线丢弃操作只丢弃从
used
变为free
状态的块。 - 定期丢弃
-
是
systemd
服务定期运行的批量操作。
XFS 和 ext4 文件系统支持所有类型。
建议
红帽建议您使用批处理或周期性丢弃。
仅在以下情况下使用在线丢弃:
- 系统负载不允许使用批量丢弃,或者
- 为了保持性能,需要在线丢弃操作。
36.3.2. 执行批块丢弃 复制链接链接已复制到粘贴板!
您可以执行批量块丢弃操作,以丢弃挂载的文件系统上未使用的块。
先决条件
- 文件系统已挂载。
- 文件系统底层的块设备支持物理忽略操作。
流程
使用
fstrim
工具:要只在所选文件系统中执行丢弃,请使用:
fstrim mount-point
# fstrim mount-point
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在所有挂载的文件系统中执行丢弃,请使用:
fstrim --all
# fstrim --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在以下设备上执行 fstrim
命令:
- 不支持丢弃操作的设备,或者
- 由多个设备组成的逻辑设备(LVM 或者 MD),其中任意设备不支持丢弃操作:
下面的信息将显示:
fstrim /mnt/non_discard
# fstrim /mnt/non_discard
fstrim: /mnt/non_discard: the discard operation is not supported
36.3.3. 启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以执行在线块丢弃操作,以自动丢弃所有支持的文件系统上未使用的块。
流程
在挂载时启用在线丢弃:
手动挂载文件系统时,请添加
-o discard
挂载选项:mount -o discard device mount-point
# mount -o discard device mount-point
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
永久挂载文件系统时,请将
discard
选项添加到/etc/fstab
文件的挂载条目中。
36.3.4. 使用 storage RHEL 系统角色启用在线块丢弃 复制链接链接已复制到粘贴板!
您可以使用在线块丢弃选项挂载 XFS 文件系统,来自动丢弃未使用的块。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证在线块丢弃选项是否已启用:
ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
# ansible managed-node-01.example.com -m command -a 'findmnt /mnt/data'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.3.5. 启用定期块丢弃 复制链接链接已复制到粘贴板!
您可以启用 systemd
计时器来定期丢弃所有支持的文件系统上未使用的块。
流程
启用并启动
systemd
计时器:systemctl enable --now fstrim.timer
# systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer
/usr/lib/systemd/system/fstrim.timer. Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证计时器的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow