Red Hat Training

A Red Hat training course is available for RHEL 8

第 2 章 使用 RHEL 系统角色管理本地存储

要使用 Ansible 管理 LVM 和本地文件系统(FS),您可以使用 storage 角色,这是 RHEL 8 中可用的 RHEL 系统角色之一。

使用 storage 角色可让您从 RHEL 7.7 开始,在多个机器和逻辑卷中自动管理磁盘和逻辑卷中的文件系统。

有关 RHEL 系统角色以及如何应用它们的更多信息,请参阅 RHEL 系统角色简介

2.1. 存储角色简介

storage 角色可以管理:

  • 磁盘上未被分区的文件系统
  • 完整的 LVM 卷组,包括其逻辑卷和文件系统

使用 storage 角色,您可以执行以下任务:

  • 创建文件系统
  • 删除文件系统
  • 挂载文件系统
  • 卸载文件系统
  • 创建 LVM 卷组
  • 删除 LVM 卷组
  • 创建逻辑卷
  • 删除逻辑卷
  • 创建 RAID 卷
  • 删除 RAID 卷
  • 创建带有 RAID 的 LVM 池
  • 删除带有 RAID 的 LVM 池

2.2. 在存储设备角色中识别存储设备的参数

您的 storage 角色配置只会影响您在以下变量中列出的文件系统、卷和池。

storage_volumes

在所有要管理的未分区磁盘中的文件系统列表。

当前不支持的分区。

storage_pools

要管理的池列表。

目前唯一支持的池类型是 LVM。使用 LVM 时,池代表卷组(VG)。每个池中都有一个要由角色管理的卷列表。对于 LVM,每个卷对应一个带文件系统的逻辑卷(LV)。

2.3. 在块设备中创建 XFS 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色,以使用默认参数在块设备中创建 XFS 文件系统。

警告

storage 角色只能在未分区、整个磁盘或者逻辑卷(LV)中创建文件系统。它不能在分区中创建文件系统。

例 2.1. 在 /dev/sdb 上创建 XFS 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中是 barefs )目前是任意卷。storage 角色根据在 disks: 属性中列出的磁盘设备识别卷。
  • 您可以省略 fs_type: xfs 行,因为 XFS 是 RHEL 8 中的默认文件系统。
  • 要在 LV 中创建文件系统,在 disks: 属性中提供 LVM 设置,包括保护卷组。详情请参阅 管理逻辑卷的 Ansible playbook 示例

    不要提供到 LV 设备的路径。

其它资源

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

2.4. 永久挂载文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来立即和永久挂载 XFS 文件系统。

例 2.2. 在 /dev/sdb 上将文件系统挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • 此 playbook 将文件系统添加到 /etc/fstab 文件中,并立即挂载文件系统。
  • 如果 /dev/sdb 设备或挂载点目录中的文件系统不存在,则 playbook 会创建它们。

其它资源

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

2.5. 管理逻辑卷的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。这个 playbook 应用 storage 角色在卷组中创建 LVM 逻辑卷。

例 2.3. 在 myvg 卷组中创建 mylv 逻辑卷的 playbook

- hosts: all
  vars:
    storage_pools:
      - name: myvg
        disks:
          - sda
          - sdb
          - sdc
        volumes:
          - name: mylv
            size: 2G
            fs_type: ext4
            mount_point: /mnt
  roles:
    - rhel-system-roles.storage
  • myvg 卷组由以下磁盘组成:

    • /dev/sda
    • /dev/sdb
    • /dev/sdc
  • 如果 myvg 卷组已存在,则 playbook 会将逻辑卷添加到卷组中。
  • 如果 myvg 卷组不存在,则 playbook 会创建它。
  • playbook 在 mylv 逻辑卷中创建 Ext4 文件系统,并在其中永久挂载文件系统 /mnt

其它资源

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

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

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

例 2.4. 一个 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 文件。

2.7. 创建和挂载 Ext4 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建和挂载 Ext4 文件系统。

例 2.5. 在 /dev/sdb 上创建 Ext4 并挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext4
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 会永久将文件系统挂载到 /mnt/data 目录中。
  • 文件系统的标签是 label-name

其它资源

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

2.8. 创建和挂载 ext3 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建和挂载 Ext3 文件系统。

例 2.6. 在 /dev/sdb 上创建 Ext3 并挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext3
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 会永久将文件系统挂载到 /mnt/data 目录中。
  • 文件系统的标签是 label-name

其它资源

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

2.9. 使用存储 RHEL 系统角色重新定义现有 Ext4 或 Ext3 文件系统大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来调整块设备中现有 Ext4 或 Ext3 文件系统的大小。

例 2.7. 在磁盘上设置单个卷的 playbook

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 12 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 如果上例中的卷已存在,若要调整卷的大小,您需要运行同一个 playbook,这与参数 size 的值不同。例如:

例 2.8. 调整 ext4 大小的 playbook /dev/sdb

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 10 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中为barefs)当前是任意卷。存储角色根据 disk: 属性中列出的磁盘设备识别卷。
注意

在其它文件系统中使用 Resizing 操作可能会破坏您要使用的设备中的数据。

其它资源

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

2.10. 使用存储 RHEL 系统角色在 LVM 上调整现有文件系统大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用存储 RHEL 系统角色来重新定义带有文件系统的 LVM 逻辑卷的大小。

警告

在其它文件系统中使用 Resizing 操作可能会破坏您要使用的设备中的数据。

例 2.9. 调整 myvg 卷组中现有 mylv1 和 myvl2 逻辑卷大小的 playbook

---

- hosts: all
   vars:
    storage_pools:
      - name: myvg
        disks:
          - /dev/sda
          - /dev/sdb
          - /dev/sdc
        volumes:
            - name: mylv1

            size: 10 GiB
            fs_type: ext4
            mount_point: /opt/mount1
            - name: mylv2
            size: 50 GiB
            fs_type: ext4
            mount_point: /opt/mount2

- name: Create LVM pool over three disks
  incude_role:
    name: rhel-system-roles.storage
  • playbook 在 mylv 逻辑卷中创建 Ext4 文件系统,并在 /mnt 挂载点永久挂载文件系统。

其它资源

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

2.11. 使用存储 RHEL 系统角色创建交换分区的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建交换分区(如果不存在),或使用默认参数在块设备中修改交换分区(如果已存在)。

例 2.10. 在 /dev/sdb 上创建或修改现有 XFS 的 playbook

---
- name: Create a disk device with swap
- hosts: all
  vars:
    storage_volumes:
      - name: swap_fs
        type: disk
        disks:
          - /dev/sdb
	size: 15 GiB
        fs_type: swap
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中为swap_fs )目前是任意卷。storage 角色根据在 disks: 属性中列出的磁盘设备识别卷。

其它资源

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

2.12. 使用存储系统角色配置 RAID 卷

使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置 RAID 卷。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置 RAID 卷以满足您的要求。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 storage 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用 storage 系统角色部署 RAID 卷的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_volumes:
          - name: data
            type: raid
            disks: [sdd, sde, sdf, sdg]
            raid_level: raid0
            raid_chunk_size: 32 KiB
            mount_point: /mnt/data
            state: present
      roles:
        - name: rhel-system-roles.storage
    警告

    设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,我们不建议在 playbook 中使用特定的磁盘名称。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

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

2.13. 使用存储系统角色使用 RAID 配置 LVM 池

通过 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上使用 RAID 配置 LVM 池。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置使用 RAID 的 LVM 池。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 storage 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用 storage 系统角色配置带有 RAID 的 LVM 池的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_pools:
          - name: my_pool
            type: lvm
            disks: [sdh, sdi]
            raid_level: raid1
            volumes:
              - name: my_pool
                size: "1 GiB"
                mount_point: "/mnt/app/shared"
                fs_type: xfs
                state: present
      roles:
        - name: rhel-system-roles.storage
    注意

    要使用具有 RAID 的 LVM 池,您必须使用 raid_level 参数指定 RAID 类型。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

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

2.14. 使用存储角色创建 LUKS 加密卷

您可以通过运行 Ansible playbook,使用 storage 角色创建并配置使用 LUKS 加密的卷。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要创建卷的系统中安装 Red Hat Ansible Automation Platform。

  • 您已在 Ansible 控制器上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用存储系统角色部署 LUKS 加密卷的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_volumes:
          - name: barefs
            type: disk
            disks:
             - sdb
            fs_type: xfs
            fs_label: label-name
            mount_point: /mnt/data
            encryption: true
            encryption_password: your-password
      roles:
       - rhel-system-roles.storage
  2. 可选:验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

其它资源

  • 如需更多信息,请安装 rhel-system-roles 软件包并查看以下目录:

    • /usr/share/doc/rhel-system-roles/storage/
    • /usr/share/ansible/roles/rhel-system-roles.storage/