
Le module community.general.parted crée, supprime, et inspecte des partitions disque Linux (MBR ou GPT) en idempotent. C'est le prérequis brut avant tout filesystem ou lvg — vous ne pouvez pas formater un disque sans partition (sauf cas particuliers de PV directs sur disque). Public visé : intermédiaires Ansible sur RHEL/Debian/Ubuntu, candidats RHCSA. Cette page couvre la création standard (partition primaire alignée), la gestion des labels (MBR vs GPT), les flags (lvm, boot), et les pièges classiques (idempotence sur partitions existantes, mauvaise unité).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer une partition primaire sur un disque vierge.
- Choisir entre MBR (msdos) et GPT selon le contexte.
- Spécifier la taille en GiB, MiB ou en pourcentage.
- Poser des flags sur une partition (
lvm,boot,esp). - Supprimer une partition existante.
- Diagnostiquer les pièges d'idempotence.
Prérequis
Section intitulée « Prérequis »-
Module disponible — la collection
community.generaldoit être installée :Fenêtre de terminal ansible-galaxy collection install community.general -
Nœud cible Linux avec
partedbinaire installé (présent par défaut sur RHEL/Debian). -
Un disque cible non monté (sinon les modifications échouent ou risquent de corrompre).
-
Privilèges root (
become: true).
Création d'une partition primaire (cas le plus simple)
Section intitulée « Création d'une partition primaire (cas le plus simple) »- name: Créer une partition primaire de 100 GiB sur /dev/vdb (GPT) community.general.parted: device: /dev/vdb number: 1 state: present label: gpt part_start: "0%" part_end: "100GiB" name: "data"Comportement :
- Si
/dev/vdbn'a pas de label de partition → un label GPT est créé. - Si la partition n°1 n'existe pas → elle est créée selon
part_startetpart_end. - Si la partition existe avec ces mêmes paramètres → task
ok(idempotent). - Si la partition existe avec paramètres différents → task
changedmais sans recréer (parted ne peut pas redimensionner sans risque) — l'opération réelle dépend du flagresize.
part_start: "0%" = début de la zone allouable (alignement automatique 1 MiB). C'est la valeur recommandée pour aligner sur les secteurs 4 KiB des disques modernes.
MBR vs GPT — quel label choisir
Section intitulée « MBR vs GPT — quel label choisir »| Label | Limites | Quand l'utiliser |
|---|---|---|
msdos (MBR) | 4 partitions primaires max, 2 TiB par partition max | Compatibilité legacy uniquement (BIOS sans UEFI) |
gpt | 128 partitions, 9.4 ZiB max, GUID unique par partition | Toujours en 2026 sauf cas legacy explicite |
Sur un système moderne (RHEL 9+, Ubuntu 22.04+), utiliser GPT par défaut. MBR n'a quasiment plus de raison d'être hors compatibilité Windows XP / vieux BIOS.
# Standard moderne — toujours GPT- community.general.parted: device: /dev/vdb number: 1 state: present label: gpt part_start: "0%" part_end: "100%"part_end: "100%" = utilise tout le disque restant pour cette partition.
Plusieurs partitions sur le même disque
Section intitulée « Plusieurs partitions sur le même disque »Le pattern classique RHCSA — découper un disque en 3 partitions :
- name: Partition 1 — boot 1 GiB community.general.parted: device: /dev/vdb number: 1 state: present label: gpt part_start: "0%" part_end: "1GiB" flags: [boot, esp] name: "boot"
- name: Partition 2 — system 50 GiB community.general.parted: device: /dev/vdb number: 2 state: present part_start: "1GiB" part_end: "51GiB" name: "system"
- name: Partition 3 — data (reste du disque) community.general.parted: device: /dev/vdb number: 3 state: present part_start: "51GiB" part_end: "100%" flags: [lvm] name: "data-lvm"Notes :
number:est l'identifiant de partition (/dev/vdb1,/dev/vdb2…). Ne pas réutiliser un numéro pour plusieurs partitions différentes.label: gptseulement sur la 1re tâche (création du label) ; les suivantes héritent.flags= liste de drapeaux.lvmpour un PV LVM,boot+esppour la partition EFI,swappour swap.- Les
part_start/part_enddoivent se suivre sans chevauchement — parted refuse silencieusement sinon.
Préparer une partition pour LVM
Section intitulée « Préparer une partition pour LVM »Cas typique : créer une partition lvm qui servira de PV (Physical Volume) pour LVM.
- name: Partition entière en LVM community.general.parted: device: /dev/vdc number: 1 state: present label: gpt part_start: "0%" part_end: "100%" flags: [lvm]
- name: Créer le PV LVM community.general.lvg: vg: vg_data pvs: /dev/vdc1 state: present
- name: Créer un LV de 50 GiB dans le VG community.general.lvol: vg: vg_data lv: lv_app size: 50g state: presentC'est la chaîne partition → PV → VG → LV qui couvre l'objectif RHCSA « gérer le stockage logique ». Voir aussi la page LVM avec Ansible pour le détail.
Supprimer une partition
Section intitulée « Supprimer une partition »- name: Supprimer /dev/vdb2 community.general.parted: device: /dev/vdb number: 2 state: absentAvant de supprimer :
- Démonter le filesystem si monté (
ansible.posix.mountavecstate: unmounted). - Détruire le LV/VG/PV si la partition était un PV (
lvol,lvg). - Vérifier que rien n'utilise la partition (lsof, fuser).
parted ne fait aucune de ces vérifications — il supprime brutalement.
Récupérer l'info d'une partition existante
Section intitulée « Récupérer l'info d'une partition existante »Pour des conditions ou des debug, le module peut inspecter sans modifier :
- name: Inspecter /dev/vdb community.general.parted: device: /dev/vdb register: vdb_info
- name: Afficher le table de partitions ansible.builtin.debug: var: vdb_info.partitionsvdb_info.partitions est une liste de dicts avec num, begin, end, size, fstype, flags pour chaque partition existante. Utile pour des conditions du genre « créer la partition 3 uniquement si elle n'existe pas déjà ».
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Solution |
|---|---|---|
Error: Partition number already in use | number réutilisé | Utiliser un numéro libre ou supprimer l'ancienne d'abord |
WARNING: You requested a partition from X to Y | Alignement non optimal | Utiliser part_start: "0%" plutôt qu'une valeur en MiB |
| Partition créée mais filesystem absent au reboot | Pas de filesystem créé après partition | Enchaîner avec community.general.filesystem |
Partition existe mais task failed | Disque monté quelque part | Démonter d'abord avec ansible.posix.mount: state=unmounted |
Unable to read partition table | Disque trop petit ou table corrompue | Vérifier parted -l côté CLI |
Idempotence cassée — task changed à chaque run | part_end calculé différemment | Utiliser des valeurs explicites en GiB plutôt que % qui varie |
| Modifications ignorées sans erreur | become: true manquant | Ajouter become: true au play |
À retenir
Section intitulée « À retenir »community.general.partedcrée et supprime des partitions — pas des filesystems (utiliserfilesystemaprès).- Toujours
label: gpten 2026, sauf compatibilité legacy explicite. part_start: "0%"assure l'alignement automatique sur 1 MiB.flags: [lvm]pour préparer un PV LVM ;flags: [boot, esp]pour partition EFI.number:ne doit pas être réutilisé — il identifie la partition (vdb1, vdb2…).- Démonter avant toute suppression de partition contenant un filesystem.
- Tester sur VM jetable — pas de dry-run, les opérations sont destructives.
Pratiquer dans le lab
Section intitulée « Pratiquer dans le lab »Cette page a un lab d'accompagnement : labs/modules-rhel/parted/ dans stephrobert/ansible-training.
Challenge — sur db1.lab, avec un disque secondaire /dev/vdb (recommandé) ou un loopback :
- Créer une table GPT sur le disque cible.
- Créer une partition n°1 de 0 % à 50 % (nom
boot). - Créer une partition n°2 de 50 % à 100 % (nom
data). - Inspecter le résultat via le module sans modification (registre +
debug).
Validation pytest+testinfra :
ansible-playbook labs/modules-rhel/parted/challenge/solution.ymlansible-playbook labs/modules-rhel/parted/challenge/solution.yml # 2e run = changed=0pytest -v labs/modules-rhel/parted/challenge/tests/Les tests vérifient l'existence de /dev/vdb1 et /dev/vdb2 (ou /dev/loop0p1/p2), la taille approximative, et l'idempotence. Le module a un bug connu sur loopback (bascule en msdos) : utiliser un vrai disque pour valider l'idempotence stricte.