Red Hat Training

A Red Hat training course is available for RHEL 8

第 6 章 丢弃未使用块

您可以在支持它们的块设备中执行或调度丢弃操作。

6.1. 块忽略操作

块忽略操作丢弃了被挂载的文件系统不再使用的块。它们在以下方面很有用:

  • 固态驱动器(SSD)
  • 精简置备存储

要求

基本文件系统的块设备必须支持物理的丢弃(discard)操作。

如果 /sys/block/device/queue/discard_max_bytes 文件中的值不是零,则代表支持物理丢弃操作。

6.2. 块丢弃操作的类型

您可以使用不同方法运行 discard 操作:

批量丢弃
由用户明确运行。它们丢弃所选文件系统中的所有未使用块。
在线丢弃
在挂载时指定。它们在没有用户干预的情况下实时运行。在线丢弃操作只丢弃从已使用到空闲的块。
定期丢弃
systemd 服务定期运行的批处理操作。

XFS 和 ext4 文件系统以及 VDO 支持所有类型。

建议

红帽建议您使用批处理或周期性丢弃。

仅在以下情况下使用在线丢弃:

  • 系统负载不允许使用批量丢弃,或者
  • 为了保持性能,需要在线丢弃操作。

6.3. 执行批块丢弃

这个过程执行批块丢弃操作,忽略挂载的文件系统中未使用的块。

先决条件

  • 挂载文件系统。
  • 文件系统底层的块设备支持物理忽略操作。

流程

  • 使用 fstrim 实用程序:

    • 要只在所选文件系统中执行丢弃,请使用:

      # fstrim mount-point
    • 要在所有挂载的文件系统中执行丢弃,请使用:

      # fstrim --all

如果您在其中执行 fstrim 命令:

  • 不支持丢弃操作的设备,或者
  • 由多个设备组成的逻辑设备(LVM 或者 MD),其中任意设备不支持丢弃操作:

下面的信息将显示:

# fstrim /mnt/non_discard

fstrim: /mnt/non_discard: the discard operation is not supported

其它资源

  • fstrim(8) man page

6.4. 启用在线块丢弃

这个过程启用在线块丢弃操作,该操作可自动丢弃所有支持的文件系统中未使用的块。

流程

  • 在挂载时启用在线丢弃:

    • 在手动挂载文件系统时,添加 -o discard 挂载选项:

      # mount -o discard device mount-point
    • 当永久挂载文件系统时,将 discard 选项添加到 /etc/fstab 文件中的挂载条目中。

其它资源

  • mount(8) man page
  • fstab(5) man page

6.5. 使用 RHEL 系统角色启用在线块丢弃

这部分论述了如何使用角色启用在线块丢弃 storage

先决条件

  • 已存在包括 storage 角色的 Ansible playbook。

如需有关如何应用此 playbook 的信息,请参阅 应用角色

6.5.1. 启用在线块丢弃的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来挂载启用了在线块丢弃的 XFS 文件系统。

例 6.1. 一个 playbook,它在 /mnt/data/ 上启用在线块丢弃功能

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
        mount_options: discard
  roles:
    - rhel-system-roles.storage

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

6.6. 启用定期块丢弃

这个过程启用一个 systemd 计时器,它会定期丢弃所有支持的文件系统中未使用的块。

流程

  • 启用并启动 systemd 计时器:

    # systemctl enable --now fstrim.timer