Recherche de site Web

Créer un volume logique LVM et le monter à l'aide d'Ansible


LVM fournit une couche d'abstraction sur le stockage physique et vous permet de créer des volumes de stockage logiques. Avec un volume logique, il n'y a aucune restriction quant à la taille des disques physiques. De plus, la configuration du stockage matériel est masquée par le logiciel, ce qui facilite le redimensionnement et le déplacement sans devoir arrêter les applications ou démonter les systèmes de fichiers.

Certains des avantages des volumes logiques sont :

  • Nomination facile des appareils : les volumes de stockage logiques peuvent être gérés dans des groupes nommés personnalisés et définis par l'utilisateur.
  • Répartition des disques : vous pouvez créer un volume logique qui répartit les données sur deux disques ou plus, vous offrant ainsi un meilleur débit.
  • Mise en miroir des volumes : avec les volumes logiques, vous pouvez fournir un moyen pratique de configurer la mise en miroir des données.
  • Facilité de redimensionnement des pools de stockage : possibilité d'étendre les volumes logiques ou de réduire la taille des volumes logiques sans reformater ni repartitionner les périphériques de disque sous-jacents
  • Flexibilité dans l'extension de capacité : Vous pouvez étendre les systèmes de fichiers sur plusieurs disques grâce à l'agrégation et au partitionnement des disques en un seul volume logique.
  • Et beaucoup plus

Dans cet article, nous examinons comment créer un volume logique à l'aide du playbook Ansible en tenant compte des considérations suivantes :

  • Création d'un volume logique dans un groupe de volumes existant.
  • Création de PV, VG puis Volume Logique (LV)

Structure LVM :

  • Volumes physiques : blocs de périphériques (disques physiques ou partitions) initialisés.
  • Groupe de volumes : volumes physiques combinés dans un groupe de volumes. Il représente un pool de stockage unique d’espace de stockage disponible.
  • Volume logique : créé au-dessus du groupe de volumes (similaire à la création de partitions simples sur une partition de disque)

1. Créez un volume logique avec un groupe de volumes existant

Voici un exemple de playbook qui peut être modifié lors de la création d'un volume logique à partir d'un groupe de volumes existant.

---
- name: Playbook to create LV, Filesystem and Mount it
  hosts: myservers
  remote_user: debian
  become: yes
  become_method: sudo
  vars:
    vg_name: vg0
    lv_name: container_data
    lv_size: 20g
    fs_type: xfs
    mount_path: /data
  tasks:
    - name: Create Logical Volume for data persistence
      community.general.lvol:
        vg: "{{ vg_name }}"
        lv: "{{ lv_name }}"
        size: "{{ lv_size }}"

    - name: Create filesystem on LV 
      community.general.filesystem:
        fstype: "{{ fs_type }}"
        dev:  /dev/mapper/{{ vg_name }}-{{ lv_name }}

    - name: Get LV UUID
      ansible.builtin.command: lsblk /dev/mapper/{{ vg_name }}-{{ lv_name }} -no UUID
      register: lv_uuid

    - name: Mount created filesystem
      ansible.posix.mount:
        path: "{{ mount_path }}"
        src: UUID={{ lv_uuid.stdout }} 
        state: mounted
        fstype: "{{ fs_type }}"

Variables utilisées :

  • vg_name : le nom du groupe de volumes existant sur votre(vos) serveur(s)
  • lv_name : Le nom du volume logique à créer.
  • lv_size : taille du volume logique en cours de création. t pour téraoctet, g pour gigaoctet, m pour mégaoctets.
  • fs_type : le type de système de fichiers à utiliser dans le partitionnement LV
  • mount_path : répertoire dans lequel le disque est monté. Il sera créé s’il n’existe pas.

Créez un fichier d'inventaire avec vos serveurs.

$ vim hosts
[myservers]
192.168.1.20
192.168.1.21
192.168.1.22

Exécutez le playbook après l'avoir personnalisé pour créer un volume logique.

$ ansible-playbook -i hosts lvm-partition_data.yml

PLAY [Playbook to create LV, Filesystem and Mount it] ************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************
ok: [192.168.1.20]

TASK [Create Logical Volume for data persistence] ****************************************************************************************************************************************************
changed: [192.168.1.20]

TASK [Create filesystem on LV] ***********************************************************************************************************************************************************************
changed: [192.168.1.20]

TASK [Get LV UUID] ***********************************************************************************************************************************************************************************
changed: [192.168.1.20]

TASK [Mount created filesystem] **********************************************************************************************************************************************************************
changed: [192.168.1.20]

PLAY RECAP *******************************************************************************************************************************************************************************************
192.168.1.20             : ok=5    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

2. Créer un volume physique, un groupe de volumes et un volume logique

Dans cet exemple, nous utilisons des disques bruts pour créer des PV, puis des créations VG et LV.

Les disques bruts utilisés dans cet exemple sont :

  • /dev/vdb
  • /dev/vdc

Vérifiez votre serveur pour voir les périphériques de disque brut disponibles.

$ lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0     7:0    0  63.5M  1 loop /snap/core20/2015
loop1     7:1    0 111.9M  1 loop /snap/lxd/24322
loop2     7:2    0  40.8M  1 loop /snap/snapd/20092
sr0      11:0    1     4M  0 rom
vda     252:0    0    30G  0 disk
├─vda1  252:1    0  29.9G  0 part /
├─vda14 252:14   0     4M  0 part
└─vda15 252:15   0   106M  0 part /boot/efi
vdb     252:16   0    20G  0 disk
vdc     252:32   0    20G  0 disk

Créons un fichier playbook.

vim lvm_pv_vg_lv.yml

Personnalisez le contenu ci-dessous à utiliser dans le playbook ansible.

---
- name: Playbook to create PV, VG, LV, Filesystem and Mount it
  hosts: myservers
  remote_user: ubuntu
  become: yes
  become_method: sudo
  vars:
    pv_disks: /dev/vdb
    #pv_disks: /dev/vdb,/dev/vdc
    vg_name: vg1
    lv_name: container_data
    lv_size: +100%FREE
    #lv_size: 10g
    fs_type: ext4
    mount_path: /data
  tasks:
    - name: Create a volume group
      community.general.lvg:
        vg: "{{ vg_name }}"
        pvs: "{{ pv_disks }}"

    - name: Create Logical Volume for data persistence
      community.general.lvol:
        vg: "{{ vg_name }}"
        lv: "{{ lv_name }}"
        size: "{{ lv_size }}"

    - name: Create filesystem on LV 
      community.general.filesystem:
        fstype: "{{ fs_type }}"
        resizefs: true
        dev:  /dev/mapper/{{ vg_name }}-{{ lv_name }}

    - name: Get LV UUID
      ansible.builtin.command: lsblk /dev/mapper/{{ vg_name }}-{{ lv_name }} -no UUID
      register: lv_uuid

    - name: Mount created filesystem
      ansible.posix.mount:
        path: "{{ mount_path }}"
        src: UUID={{ lv_uuid.stdout }} 
        state: mounted
        fstype: "{{ fs_type }}"

Où :

  • pv_disks : liste d'un ou plusieurs chemins de périphériques de disque brut
  • vg_name : Le nom du groupe de volumes à créer
  • lv_name : Le nom du volume logique à créer
  • lv_size : La taille du volume logique à créer. t pour téraoctet, g pour gigaoctet, m pour mégaoctets.
  • fs_type : le type de système de fichiers à utiliser dans le partitionnement des périphériques
  • mount_path : répertoire dans lequel le disque est monté. Il sera créé s’il n’existe pas.

Une fois terminé, exécutez le Playbook pour créer PV, VG et LV.

$ ansible-playbook -i hosts lvm_pv_vg_lv.yml
PLAY [Playbook to create LV, Filesystem and Mount it] ************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************
ok: [192.168.56.50]

TASK [Create a volume group] *************************************************************************************************************************************************************************
changed: [192.168.56.50] => (item=/dev/vdb)

TASK [Create Logical Volume for data persistence] ****************************************************************************************************************************************************
changed: [192.168.56.50]

TASK [Create filesystem on LV] ***********************************************************************************************************************************************************************
changed: [192.168.56.50]

TASK [Get LV UUID] ***********************************************************************************************************************************************************************************
changed: [192.168.56.50]

TASK [Mount created filesystem] **********************************************************************************************************************************************************************
changed: [192.168.56.50]

PLAY RECAP *******************************************************************************************************************************************************************************************
192.168.56.50              : ok=6    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Confirmez les créations PV, VG et LV.

$ sudo pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/vdb   vg1 lvm2 a--  <20.00g     0

$ sudo vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  vg1   1   1   0 wz--n- <20.00g    0

$ sudo lvs
  LV             VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  container_data vg1 -wi-ao---- <20.00g

$ df -hT /data
Filesystem                     Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg1-container_data ext4   20G   24K   19G   1% /data

$ cat /etc/fstab
LABEL=cloudimg-rootfs	/	 ext4	discard,errors=remount-ro	0 1
LABEL=UEFI	/boot/efi	vfat	umask=0077	0 1
UUID=e7e6a6f6-e85e-46a2-b070-c3ee5fb571f5 /data ext4 defaults 0 0

À partir du résultat des commandes, nous pouvons confirmer que l’exécution du playbook a réussi. Il s'agit d'un exemple d'utilisation de base d'Ansible de la gestion LVM. Vous pouvez consulter les pages de documentation officielles d'Ansible pour plus de conseils sur l'utilisation des modules.

Articles connexes: