LVM - lvg and lvol

最近幫同事看 DRBD 還有準備考 RHCSA/RHCE,就想說可以趁這機會來練習如何用 Ansible 來操作磁碟分割區與 LVM。

這邊有個誤會,我一直以來都以為 pvcreate / vgcreate / lvcreate 都有對應的模組可以使用,經過這次研讀後,發現只要用到 lvg 跟 lvol 這兩個模組就可以來建立。

community.general.lvg 是 LVM volume groups 的縮寫, 主要是用來設置 LVM volume groups 的模組。 這個模組包辦了 pvcreate / vgcreate 這兩個指令。

例如要建立 volume group,就用

- name: 在 /dev/sda1 跟 /dev/sdb1 之上建立 volume group,其 extend size 設置為 32MB
  community.general.lvg:
    vg: vg.services
    pvs: /dev/sda1,/dev/sdb1
    pesize: 32

要移除,就加上 state: absent

- name: 移除名稱是 vg.services 的 volume group
  community.general.lvg:
    vg: vg.services
    state: absent

若是要建立 local volume,則是用 community.general.lvol

- name: 建立一個大小為 512m 的 local volume
  community.general.lvol:
    vg: firefly
    lv: test
    size: 512

要刪掉,就加上 state: absent

- name: 移除 local volume
  community.general.lvol:
    vg: firefly
    lv: test
    state: absent
    force: yes

這個模組也可以建立 thinpool、cache pool 這些。 這邊可以參照 community.general.lvol下面的範例來複製使用,會比較快。

最後附上我去初始化 DRBD 所需要的 local volume 的 playbook,這個 playbook 首先使用 parted 去做出磁碟分割區,然後標注給 LVM 使用。 接著再使用 lvg 跟 lvol 來建立所需要的 Local volume。

---
- name: Create LVM for DRBD
  hosts: all
  become: yes

  vars:
    vg_name: drbdpool

  tasks:
  - name: Create a new primary partition for LVM
    community.general.parted:
      device: /dev/sdb
      number: 1
      align: optimal
      flags: [ lvm ]
      state: present

  - name: Create a volume group on top of /dev/sda1 with physical extent size = 32MB
    community.general.lvg:
      vg: "{{ vg_name }}"
      pvs: /dev/sdb1
      state: present

  - name: Create a logical volume
    community.general.lvol:
      vg: "{{ vg_name }}"
      lv: drbddata
      size: 100%FREE

參考資料