Aller au contenu
Infrastructure as Code medium

Module Ansible parted : créer une partition disque sur Linux

10 min de lecture

Logo Ansible

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é).

  • 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.
  • Module disponible — la collection community.general doit être installée :

    Fenêtre de terminal
    ansible-galaxy collection install community.general
  • Nœud cible Linux avec parted binaire 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/vdb n'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_start et part_end.
  • Si la partition existe avec ces mêmes paramètrestask ok (idempotent).
  • Si la partition existe avec paramètres différentstask changed mais sans recréer (parted ne peut pas redimensionner sans risque) — l'opération réelle dépend du flag resize.

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.

LabelLimitesQuand l'utiliser
msdos (MBR)4 partitions primaires max, 2 TiB par partition maxCompatibilité legacy uniquement (BIOS sans UEFI)
gpt128 partitions, 9.4 ZiB max, GUID unique par partitionToujours 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.

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: gpt seulement sur la 1re tâche (création du label) ; les suivantes héritent.
  • flags = liste de drapeaux. lvm pour un PV LVM, boot+esp pour la partition EFI, swap pour swap.
  • Les part_start/part_end doivent se suivre sans chevauchement — parted refuse silencieusement sinon.

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: present

C'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.

- name: Supprimer /dev/vdb2
community.general.parted:
device: /dev/vdb
number: 2
state: absent

Avant de supprimer :

  1. Démonter le filesystem si monté (ansible.posix.mount avec state: unmounted).
  2. Détruire le LV/VG/PV si la partition était un PV (lvol, lvg).
  3. Vérifier que rien n'utilise la partition (lsof, fuser).

parted ne fait aucune de ces vérifications — il supprime brutalement.

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.partitions

vdb_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à ».

SymptômeCauseSolution
Error: Partition number already in usenumber réutiliséUtiliser un numéro libre ou supprimer l'ancienne d'abord
WARNING: You requested a partition from X to YAlignement non optimalUtiliser part_start: "0%" plutôt qu'une valeur en MiB
Partition créée mais filesystem absent au rebootPas de filesystem créé après partitionEnchaîner avec community.general.filesystem
Partition existe mais task failedDisque monté quelque partDémonter d'abord avec ansible.posix.mount: state=unmounted
Unable to read partition tableDisque trop petit ou table corrompueVérifier parted -l côté CLI
Idempotence cassée — task changed à chaque runpart_end calculé différemmentUtiliser des valeurs explicites en GiB plutôt que % qui varie
Modifications ignorées sans erreurbecome: true manquantAjouter become: true au play
  • community.general.parted crée et supprime des partitions — pas des filesystems (utiliser filesystem après).
  • Toujours label: gpt en 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.

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 :

  1. Créer une table GPT sur le disque cible.
  2. Créer une partition n°1 de 0 % à 50 % (nom boot).
  3. Créer une partition n°2 de 50 % à 100 % (nom data).
  4. Inspecter le résultat via le module sans modification (registre + debug).

Validation pytest+testinfra :

Fenêtre de terminal
ansible-playbook labs/modules-rhel/parted/challenge/solution.yml
ansible-playbook labs/modules-rhel/parted/challenge/solution.yml # 2e run = changed=0
pytest -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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn