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.22Exé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=02. 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 diskCréons un fichier playbook.
vim lvm_pv_vg_lv.ymlPersonnalisez 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.