linux-system-roles.storage
Linux 存储角色
这个角色允许用户以最少的输入配置本地存储。
至今为止,该角色支持管理文件系统和挂载条目,支持的方式有:
- 硬盘
- 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
值:lvm
,stratis
。state
有效值为
present
(默认行为)或absent
。标记为absent
的池将被角色删除。标记为present
的池将被创建(如果指定的name
的池尚不存在)或保留。grow_to_fill
当设置时,池的物理卷将调整大小以匹配其各自设备的大小。 (例如,在虚拟机磁盘大小增加后)
默认值:
false
注意: 此参数仅对 LVM 池有效。
shared
如果设置为
true
,角色将创建或管理一个共享卷组。需要配置并运行 lvmlockd 和 dlm 服务。默认值:
false
警告: 修改现有池上的
shared
值是破坏性的操作。池本身将在此过程中被移除。注意: 此参数仅对 LVM 池有效。
disks
指定用于池的后备存储的一组磁盘的列表。 支持的标识符包括:设备节点(如
/dev/sda
或/dev/mapper/mpathb
), 设备节点基本名称(如sda
或mpathb
),/dev/disk/ 符号链接 (如/dev/disk/by-id/wwn-0x5000c5005bc37f3f
)。对于 LVM 池,这也可以用来向现有池添加和删除磁盘。 列表中的磁盘如果未被池使用,将会添加到池中。 当前由池使用,但不在列表中的磁盘仅在
storage_safe_mode
设置为false
时会从池中删除。raid_level
使用
type: lvm
时,管理一个具有指定级别的 mdraid 阵列的卷组。 在这种情况下,输入的disks
用作 RAID 成员。 可接受的值包括:linear
,raid0
,raid1
,raid4
,raid5
,raid6
,raid10
。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 加密方法。 可接受的值为:
tang
和tpm2
。encryption_tang_url
创建通过 NBDE 加密的 Stratis 池时,指定服务器的 URL。
encryption_tang_thumbprint
创建通过 NBDE 加密的 Stratis 池时,指定服务器的指纹。
storage_volumes
storage_volumes
变量是一个管理的卷列表。每个卷有以下变量:
name
指定卷的名称。
type
指定文件系统将驻留的卷类型。 有效的
type
值:lvm
,disk
,partition
或raid
。 默认值根据操作系统和版本确定(当前为lvm
)。注意: 对于分区卷的管理支持目前非常有限, 该角色仅允许创建一个跨整个磁盘的单个分区。
state
有效值为
present
(默认行为)或absent
。标记为absent
的卷将被角色删除。标记为present
的卷将被创建(如果指定的name
的卷尚不存在)或保留,并可能 被更改以匹配其他值(例如,如果指定name
的卷存在但没有所需的size
,它将被调整大小,如果可能的话)。disks
指定用作文件系统后备存储的一组磁盘。 这目前仅与类型为
disk
的卷相关,其中列表 必须仅包含单个项目。size
size
指定文件系统的大小。格式应为人类可读的,例如:"10g","50 GiB"。LVM 卷的大小可以指定为池/VG 大小的百分比,例如:在 v1.4.2 中为 "50%"。当使用
compression
或deduplication
时,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 卷:
raid0
,raid1
,raid4
,raid5
,raid6
,raid10
,striped
,mirror
- 对于 RAID 卷:
linear
,raid0
,raid1
,raid4
,raid5
,raid6
,raid10
警告: 更改卷的
raid_level
是破坏性操作,这意味着 卷上的所有数据将在移除旧 RAID 和添加新 RAID 的过程中丢失。目前不支持 RAID 变形。- 对于 LVM 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
,卷必须具有类型为lvm
的storage_pools
父级。 接受父storage_pools
的disks
子列表。 在同一存储池内多步 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)。 当设置后,存储卷上重复的数据将被去重,从而产生更多存储容量。 可以与
compression
和vdo_pool_size
一起使用。 卷必须是 LVMstorage_pool
的一部分。 限制:每个storage_pool
限制一个 VDOstorage_volume
。 基础卷必须至少为 9 GB(最低约为 5 GiB)。compression
指定是否将使用虚拟数据优化器(VDO)。 当设置后,存储卷上的数据将被压缩,从而产生更多存储容量。 卷必须是 LVM
storage_pool
的一部分。 可以与deduplication
和vdo_pool_size
一起使用。 限制:每个storage_pool
限制一个 VDOstorage_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