githubixx.lvm
ansible-role-lvm
这个 Ansible 角色安装了 Linux 逻辑卷管理器 (LVM) 资源,如 卷组
(VG)、逻辑卷
(LV),并处理 文件系统
创建和 挂载点
。
更新日志
请查看 CHANGELOG
角色变量
默认情况下没有创建 LVM 资源。请参见以下示例。lvm_vgs
键是所有应创建的 LVM 资源的入口点。
lvm_vgs: []
首先是一些关于创建 LVM 资源的示例(关于删除如何处理请看下面)。
创建一个名为 test-vg-01
的卷组 (VG),使用设备 /dev/vdb
作为物理卷:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
这三个参数都是必需的! vgname 是卷组的名称。 pvs 是用于此卷组的物理设备的以逗号分隔的设备列表。 state 控制卷组是否存在。
要删除 VG,请指定 state: absent
及 force: true
。与 community.general.lvg 模块的 force
参数不同,force: true
不会删除仍包含 (a) 逻辑卷的 VG!这样是为了避免意外删除数据。
创建一个名为 test-vg-01
的卷组 (VG),使用设备 /dev/vdb
和 /dev/vdc
作为物理卷:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb,/dev/vdc
state: present
目前支持以下额外的 community.general.lvg 参数:
以下是上一个示例,但还创建一个逻辑卷 test-lv-01
并分配可用 VG 空间的 10%
:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
卷组包含的所有逻辑卷都列在 lvm_lvs
键下。 lvname
、size
和 state
参数是必需的! lvname 是逻辑卷的名称。 size 指定逻辑卷的大小,按 lvcreate(8) --size
默认为以兆字节为单位,或选择以下单位之一 [bBsSkKmMgGtTpPeE];或根据 lvcreate(8) --extents
作为 [VG|PVS|FREE] 的百分比;浮动值必须以数字开头。 state 控制逻辑卷是否存在。要删除一个 LV,需要指定 state: absent
和 force: true
。
目前还支持以下额外的 community.general.lvol 参数:
与上一个示例相同,但还创建一个使用逻辑卷 test-lv-01
作为设备的 ext4
文件系统:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
fs
键指定逻辑卷应包含一个文件系统。 type 指定应使用的文件系统。 state: present
指明如果文件系统不存在则创建它。 如果 state: absent
,则如果设备上存在文件系统,文件系统签名将被清除(如blkid
所知)。 当 state: absent
时,除设备外的所有其他选项都将被忽略,如果设备实际上不存在,则模块不会失败。在 state: absent
的情况下,还需要 force: true
,否则文件系统将无法更改。与 community.general.filesystem 模块的 force 参数不同,force: true
不会覆盖现有的文件系统。您需要先清除旧的文件系统才能创建新的文件系统!同样,这是为了避免意外删除。
与上一个示例相同,但还创建了目录 /mnt1
并将 ext4
文件系统挂载在那里。这也会在 /etc/fstab
中创建一个条目(默认情况下)。
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
mountpoint:
state: mounted
path:
name: /mnt1
mountpoint
键处理与挂载点相关的操作。 state 具有与 ansible.posix.mount 模块提供的相同选项,如 mounted
、absent
、present
、unmounted
和 remounted
(另见 state)。 state
和 path.name
是必需的。 path.name
指定应挂载的目录的名称。如果目录还不存在,它将被创建。有关更多选项,请参见下一个示例。
与上一个示例相同,但文件系统现在获得了标签 mnt1
。同时,文件系统使用 noatime
文件系统选项挂载在 /mnt1
。另外,文件系统使用标签 mnt1
挂载(src: LABEL=mnt1
)。 /mnt1
目录的 owner
和 group
将是 vagrant
,目录权限将是 0750
:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
opts: -L mnt1
state: present
mountpoint:
opts: noatime
state: mounted
src: LABEL=mnt1
path:
name: /mnt1
mode: '0750'
owner: vagrant
group: vagrant
默认情况下,mountpoint.src
是 /dev/ + vgname + / + lvname
。在上述示例中使用了 LABEL=mnt1
。在 opts: -L mnt
中提供了这个选项以创建带有该标签的文件系统,以便稍后可以用于 mountpoint.src
。
mountpoint
支持以下附加参数:
创建两个卷组 (VG),分别名为 test-vg-01
和 test-vg-02
,使用设备 /dev/vdb
和 /dev/vdc
作为物理卷:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
- vgname: test-vg-02
pvs: /dev/vdc
state: present
以下示例用于卸载挂载点并从 /etc/fstab
中删除其条目:
mountpoint:
state: absent
path:
name: /vg01lv01
当然,这仅在挂载点未被程序或服务使用的情况下有效。
由于删除文件系统、逻辑卷(LV)和卷组(VG)可能会毁坏您的数据,因此应格外小心!在这种情况下,指定 state: absent
删除此类资源是不够的。还需要 force: true
。当然,删除仍包含逻辑卷的卷组将失败。此外,带有 state: present
的文件系统的逻辑卷将无法删除。
以下示例将卸载指定的挂载点(/vg02lv01
),并从 /etc/fstab
中删除其条目,将清除 ext4
文件系统,删除逻辑卷(vg02lv01
)并最终删除卷组(vg02
)(按此顺序):
lvm_vgs:
- vgname: vg02
pvs: /dev/vdc
state: absent
force: true
lvm_lvs:
- lvname: vg02lv01
size: 10%VG
state: absent
force: true
fs:
type: ext4
state: absent
force: true
mountpoint:
state: absent
path:
name: /vg02lv01
要能够创建文件系统,需要额外的软件包。对于 ext(2|3|4)
,需要安装 e2fsprogs
软件包。例如,根据您希望设置的文件系统,您可能需要安装额外的软件包或从列表中删除不需要的软件包。您可以将要安装的任何软件包添加到列表中。
默认情况下,只安装了 ext(2|3|4)
或 xfs
所需的工具。对于其他文件系统,您可能需要安装 btrfsprogs/btrfs-progs
、dosfstools
、f2fs-tools
或 reiserfsprogs
等:
# 适用于 SuSE 兼容操作系统的额外软件包
additional_packages_suse:
- e2fsprogs
- xfsprogs
# 适用于 Debian 兼容操作系统的额外软件包
additional_packages_debian:
- e2fsprogs
- xfsprogs
# 适用于 Redhat 兼容操作系统的额外软件包
additional_packages_redhat:
- e2fsprogs
- xfsprogs
# 适用于 Archlinux 兼容操作系统的额外软件包
additional_packages_arch:
- e2fsprogs
- xfsprogs
一般来说,以下模块的大部分选项都受支持:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
依赖关系
此角色依赖于一些 Ansible 模块:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
待办事项
目前尚未实现以下功能:
- 卷组调整大小
- 逻辑卷缩小
- 逻辑卷快照
- 逻辑卷/文件系统调整大小
示例剧本
示例 1(没有角色标签)
- hosts: your-host
roles:
- githubixx.lvm
示例 2(为角色分配标签)
-
hosts: your-host
roles:
-
role: githubixx.lvm
tags: role-lvm
更多示例
还有一些用于测试此角色的示例。请参见 molecule 目录。
测试
此角色具有一个小型测试设置,通过 Molecule、libvirt (vagrant-libvirt) 和 QEMU/KVM 创建。有关如何设置的更多信息,请参阅我的博客文章 使用 Molecule、libvirt (vagrant-libvirt) 和 QEMU/KVM 测试 Ansible 角色。测试配置在 此处。
然后可以执行 molecule:
molecule converge -s kvm
这将设置许多具有不同受支持的 Linux 操作系统的虚拟机 (VM),并创建各种 LVM 资源。
要清理,请运行
molecule destroy -s kvm