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: absentforce: 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 键下。 lvnamesizestate 参数是必需的! lvname 是逻辑卷的名称。 size 指定逻辑卷的大小,按 lvcreate(8) --size 默认为以兆字节为单位,或选择以下单位之一 [bBsSkKmMgGtTpPeE];或根据 lvcreate(8) --extents 作为 [VG|PVS|FREE] 的百分比;浮动值必须以数字开头。 state 控制逻辑卷是否存在。要删除一个 LV,需要指定 state: absentforce: 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 模块提供的相同选项,如 mountedabsentpresentunmountedremounted(另见 state)。 statepath.name 是必需的。 path.name 指定应挂载的目录的名称。如果目录还不存在,它将被创建。有关更多选项,请参见下一个示例。

与上一个示例相同,但文件系统现在获得了标签 mnt1。同时,文件系统使用 noatime 文件系统选项挂载在 /mnt1。另外,文件系统使用标签 mnt1 挂载(src: LABEL=mnt1)。 /mnt1 目录的 ownergroup 将是 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-01test-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-progsdosfstoolsf2fs-toolsreiserfsprogs 等:

# 适用于 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

许可证

GNU 通用公共许可证 v3.0 或更高版本

作者信息

http://www.tauceti.blog

关于项目

Manage Linux Logical Volume Manager resources

安装
ansible-galaxy install githubixx.lvm
许可证
gpl-3.0
下载
1.8k
拥有者
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)