linux-system-roles.storage

Linux 存储角色

ansible-lint.yml ansible-test.yml codeql.yml markdownlint.yml python-unit-test.yml shellcheck.yml tft.yml tft_citest_bad.yml woke.yml

这个角色允许用户以最少的输入配置本地存储。

至今为止,该角色支持管理文件系统和挂载条目,支持的方式有:

  • 硬盘
  • LVM 卷组
  • Stratis 池

也支持加密(使用 LUKS)和 RAID(使用 MD)。对管理已有设备的支持有限,但可以将新的 LVM 卷和 Stratis 文件系统添加到现有设置和挂载点,并且可以向现有设备添加或移除某些其他功能。

要求

请参见下方内容。

集合要求

该角色需要外部集合。使用以下命令安装它们:

ansible-galaxy collection install -vv -r meta/collection-requirements.yml

角色变量

注意: 从版本 1.3.0 开始,未定义的参数对于存在和不存在的池/卷会有不同的解释。对于新的或不存在的池和卷,任何省略的参数将使用defaults/main.yml中描述的默认值。而对于现有的池和卷,省略的参数将继承池或卷已有的设置。这意味着要更改或覆盖现有池或卷的角色默认值,必须在角色变量中明确指定新值/设置。

storage_pools

storage_pools 变量是一个管理的池列表。每个池包含一个嵌套的 volume 字典列表以及以下键:

  • name

    指定要管理/创建的池的名称(字符串)。例如,LVM 卷组就是一个池的示例。

  • type

    指定要管理的池的类型。 有效的 type 值:lvmstratis

  • state

    有效值为 present(默认行为)或 absent。标记为 absent 的池将被角色删除。标记为 present 的池将被创建(如果指定的 name 的池尚不存在)或保留。

  • grow_to_fill

    当设置时,池的物理卷将调整大小以匹配其各自设备的大小。 (例如,在虚拟机磁盘大小增加后)

    默认值:false

    注意: 此参数仅对 LVM 池有效。

  • shared

    如果设置为 true,角色将创建或管理一个共享卷组。需要配置并运行 lvmlockd 和 dlm 服务。

    默认值:false

    警告: 修改现有池上的 shared 值是破坏性的操作。池本身将在此过程中被移除。

    注意: 此参数仅对 LVM 池有效。

  • disks

    指定用于池的后备存储的一组磁盘的列表。 支持的标识符包括:设备节点(如 /dev/sda/dev/mapper/mpathb), 设备节点基本名称(如 sdampathb),/dev/disk/ 符号链接 (如 /dev/disk/by-id/wwn-0x5000c5005bc37f3f)。

    对于 LVM 池,这也可以用来向现有池添加和删除磁盘。 列表中的磁盘如果未被池使用,将会添加到池中。 当前由池使用,但不在列表中的磁盘仅在storage_safe_mode设置为 false 时会从池中删除。

  • raid_level

    使用 type: lvm 时,管理一个具有指定级别的 mdraid 阵列的卷组。 在这种情况下,输入的 disks 用作 RAID 成员。 可接受的值包括:linearraid0raid1raid4raid5raid6raid10

  • volumes

    这是属于当前池的卷的列表。它遵循与以下 storage_volumes 变量相同的格式。

  • encryption

    这指定池是否将使用 LUKS 加密。 警告: 切换池的加密状态是一个破坏性操作,这意味着 在添加/移除加密层的过程中,池本身将被移除。

  • encryption_password

    此字符串指定用于解锁/打开 LUKS 卷的密码或口令。

  • encryption_key

    此字符串指定在受管理节点上用于解锁 LUKS 卷的密钥文件的完整路径。用户需确保安全地复制该文件到受管理节点,或确保该文件在受管理节点上存在。

  • encryption_cipher

    此字符串指定LUKS将使用的非默认密码。

  • encryption_key_size

    此整数指定 LUKS 密钥的大小(以字节为单位)。

  • encryption_luks_version

    此整数指定要使用的 LUKS 版本。

  • encryption_clevis_pin

    对于 Stratis 池,指定应使用的 clevis 加密方法。 可接受的值为:tangtpm2

  • encryption_tang_url

    创建通过 NBDE 加密的 Stratis 池时,指定服务器的 URL。

  • encryption_tang_thumbprint

    创建通过 NBDE 加密的 Stratis 池时,指定服务器的指纹。

storage_volumes

storage_volumes 变量是一个管理的卷列表。每个卷有以下变量:

  • name

    指定卷的名称。

  • type

    指定文件系统将驻留的卷类型。 有效的 type 值:lvmdiskpartitionraid。 默认值根据操作系统和版本确定(当前为 lvm)。

    注意: 对于分区卷的管理支持目前非常有限, 该角色仅允许创建一个跨整个磁盘的单个分区。

  • state

    有效值为 present(默认行为)或 absent。标记为 absent 的卷将被角色删除。标记为 present 的卷将被创建(如果指定的 name 的卷尚不存在)或保留,并可能 被更改以匹配其他值(例如,如果指定 name 的卷存在但没有所需的 size,它将被调整大小,如果可能的话)。

  • disks

    指定用作文件系统后备存储的一组磁盘。 这目前仅与类型为 disk 的卷相关,其中列表 必须仅包含单个项目。

  • size

    size 指定文件系统的大小。格式应为人类可读的,例如:"10g","50 GiB"。LVM 卷的大小可以指定为池/VG 大小的百分比,例如:在 v1.4.2 中为 "50%"。

    当使用 compressiondeduplication 时,size 可以设置高于实际可用空间, 例如:基于存储数据的复制性和/或压缩性的三倍大小。

    注意: 所请求的卷大小可能会根据需要减少,以使卷能够适应可用池空间,但只有在所需减少不超过所请求卷大小的 2% 时。

  • fs_type

    指定要使用的期望文件系统类型,例如:"xfs","ext4","swap"。 默认值根据操作系统和版本确定 (目前所有支持的系统都是 xfs)。 如果不希望存在文件系统,请使用 "unformatted"。 警告: 在现有文件系统上使用 "unformatted" 文件系统类型 是一种破坏性操作,将会删除卷上的所有数据。

  • fs_label

    fs_label 是将用于文件系统标签的字符串。

  • fs_create_options

    fs_create_options 指定作为字符串传递给 mkfs 的自定义参数。

  • mount_point

    mount_point 指定将挂载文件系统的目录。

  • mount_options

    mount_options 指定自定义挂载选项作为字符串,例如:'ro'。

  • mount_user

    mount_user 指定挂载目录的期望拥有者。

  • mount_group

    mount_group 指定挂载目录的期望组。

  • mount_mode

    mount_mode 指定挂载目录的期望权限。

  • raid_level

    指定 RAID 级别。也可以创建 LVM RAID。 "常规" RAID 卷要求类型为 raid。 LVM RAID 需要该卷具有 storage_pools 父级并且类型为 lvm, 还需指定 raid_disks

    可接受的值为:

    • 对于 LVM RAID 卷:raid0raid1raid4raid5raid6raid10stripedmirror
    • 对于 RAID 卷:linearraid0raid1raid4raid5raid6raid10

    警告: 更改卷的 raid_level 是破坏性操作,这意味着 卷上的所有数据将在移除旧 RAID 和添加新 RAID 的过程中丢失。目前不支持 RAID 变形。

  • raid_device_count

    当类型为 raid 时,指定活动 RAID 设备的数量。

  • raid_spare_count

    当类型为 raid 时,指定备用 RAID 设备的数量。

  • raid_metadata_version

    当类型为 raid 时,指定 RAID 元数据版本作为字符串,例如:'1.0'。

  • raid_chunk_size

    当类型为 raid 时,指定 RAID 块大小作为字符串,例如:'512 KiB'。 块大小必须是 4 KiB 的整数倍。

  • raid_stripe_size

    当类型为 lvm 时,指定 LVM RAID 的条带大小作为字符串,例如:'512 KiB'。

  • raid_disks

    指定应用于 LVM RAID 卷的磁盘。 需要指定 raid_level,卷必须具有类型为 lvmstorage_pools 父级。 接受父 storage_poolsdisks 子列表。 在同一存储池内多步 LVM RAID 卷的情况下,相同磁盘可以在多个 raid_disks 中使用。

  • encryption

    指定卷是否将使用 LUKS 加密。 警告: 切换卷的加密状态是破坏性操作,这意味着 卷上的所有数据将会在添加/移除加密层的过程中被删除。

  • encryption_password

    此字符串指定用于解锁/打开 LUKS 卷的密码或口令。

  • encryption_key

    此字符串指定在受管理节点上用于解锁 LUKS 卷的密钥文件的完整路径。用户需确保安全地复制该文件到受管理节点,或确保该文件在受管理节点上存在。

  • encryption_cipher

    此字符串指定 LUKS 将使用的非默认算法。

  • encryption_key_size

    此整数指定 LUKS 密钥的大小(以位为单位)。

  • encryption_luks_version

    此整数指定要使用的 LUKS 版本。

  • deduplication

    指定是否将使用虚拟数据优化器(VDO)。 当设置后,存储卷上重复的数据将被去重,从而产生更多存储容量。 可以与 compressionvdo_pool_size 一起使用。 卷必须是 LVM storage_pool 的一部分。 限制:每个 storage_pool 限制一个 VDO storage_volume。 基础卷必须至少为 9 GB(最低约为 5 GiB)。

  • compression

    指定是否将使用虚拟数据优化器(VDO)。 当设置后,存储卷上的数据将被压缩,从而产生更多存储容量。 卷必须是 LVM storage_pool 的一部分。 可以与 deduplicationvdo_pool_size 一起使用。 限制:每个 storage_pool 限制一个 VDO storage_volume

  • vdo_pool_size

    使用虚拟数据优化器(VDO)时,指定卷在设备上将占用的实际大小。VDO 卷的虚拟大小由 size 参数设置。 vdo_pool_size 格式应为人类可读,例如:"30g","50GiB"。 默认值等于卷的大小。

  • cached

    指定卷是否应被缓存。目前仅对使用 dm-cache 的 LVM 卷支持。

  • cache_size

    缓存的大小。cache_size 格式应为人类可读,例如:"30g","50GiB"。

  • cache_mode

    缓存的模式。支持的值包括 writethrough(默认)和 writeback

  • cache_devices

    将用于缓存的设备列表。这些应为物理卷或这些物理卷所分配的驱动器。一般来说,您希望为缓存选择快速设备,如 SSD 或 NVMe 驱动器。

  • thin

    卷是否应被细化配置。 目前仅支持 LVM 卷。

  • thin_pool_name

    对于 thin 卷,可以用来指定将用于该卷的 LVM 缩小池的名称。如果提供的名称的池已存在,将会添加该卷。如果不存在,将创建一个名为 thin_pool_name 的新池。 如果未指定:

    • 如果没有现有的缩小池,将创建一个新缩小池,名称会自动生成,
    • 如果恰好存在一个现有的缩小池,细化卷将添加到该池中,
    • 如果存在多个缩小池,则会引发异常。
  • thin_pool_size

    缩小池的大小。thin_pool_size 格式应为人类可读,例如:"30g","50GiB"。

storage_safe_mode

当为 true(默认值)时,将会出错,而不是自动移除现有设备和/或格式化。

storage_udevadm_trigger

当为 true(默认值为 false)时,角色将使用 udevadm 触发器 使 udev 更改立即生效。这可能会帮助某些 具有 “有缺陷” udev 的平台。

示例剧本

- name: 管理存储
  hosts: all
  roles:
    - name: linux-system-roles.storage
      storage_pools:
        - name: app
          disks:
            - sdb
            - sdc
          volumes:
            - name: shared
              size: "100 GiB"
              mount_point: "/mnt/app/shared"
              #fs_type: xfs
              state: present
            - name: users
              size: "400g"
              fs_type: ext4
              mount_point: "/mnt/app/users"
      storage_volumes:
        - name: images
          type: disk
          disks: ["mpathc"]
          mount_point: /opt/images
          fs_label: images

rpm-ostree

见 README-ostree.md

许可证

MIT

安装
ansible-galaxy install linux-system-roles.storage
许可证
mit
下载
96.2k