Aller au contenu
Administration Linux medium

Migrer et retirer un disque LVM avec pvmove

8 min de lecture

pvmove déplace les données d'un disque LVM vers un autre à chaud, sans démonter ni interrompre le service. C'est la commande qui permet de retirer un disque d'un Volume Group, d'en remplacer un qui faiblit, ou de migrer un stockage vers du matériel plus récent, sans coupure. Ce guide montre comment ajouter un disque, déplacer ses extents avec pvmove, puis le retirer proprement avec vgreduce et pvremove. Pour administrateurs Linux intermédiaires, sur Debian/Ubuntu et RHEL/AlmaLinux. Toutes les sorties proviennent d'un test réel.

  • Ajouter un disque à un Volume Group avec vgextend
  • Déplacer les données d'un disque vers un autre, à chaud, avec pvmove
  • Retirer un disque proprement (vgreduce puis pvremove)
  • Remplacer un disque défaillant
  • Agrandir un PV après extension d'un disque virtuel (pvresize)

Une pile LVM en place (voir le guide LVM) et un second disque disponible pour accueillir les données déplacées. Le Volume Group doit avoir assez d'espace libre sur les autres PV pour recevoir les extents migrés.

Quand un Volume Group manque d'espace, on lui ajoute un disque. On initialise le PV, puis on l'agrège avec vgextend :

Fenêtre de terminal
sudo pvcreate /dev/sdc
sudo vgextend vg_data /dev/sdc

Le VG dispose maintenant de la somme des deux disques. C'est aussi la première étape pour remplacer un disque : on ajoute le neuf avant de vider l'ancien.

pvmove recopie les extents physiques d'un disque vers les autres PV du Volume Group, en ligne. Le service continue de lire et d'écrire pendant l'opération. Partons d'un VG sur deux disques, dont le premier porte un volume de 1 Gio :

Fenêtre de terminal
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg_data lvm2 a-- <2.00g 1020.00m
/dev/sdc vg_data lvm2 a-- <2.00g <2.00g

Le disque /dev/sdb est occupé (il ne reste que 1020 Mio libres sur 2 Gio), /dev/sdc est vide. On vide /dev/sdb vers le reste du VG :

Fenêtre de terminal
sudo pvmove /dev/sdb
/dev/sdb: Moved: 100.00%

Les données ont migré, et pvs confirme l'inversion : /dev/sdb est maintenant vide, /dev/sdc porte le volume.

PV VG Fmt Attr PSize PFree
/dev/sdb vg_data lvm2 a-- <2.00g <2.00g
/dev/sdc vg_data lvm2 a-- <2.00g 1020.00m

pvmove /dev/sdb répartit les extents sur tous les PV disponibles du groupe. Pour viser un disque précis, ajoutez la destination : pvmove /dev/sdb /dev/sdc. Pour ne déplacer qu'une plage d'extents : pvmove /dev/sdb:1000-1999. Et pvmove -b lance l'opération en tâche de fond.

Une fois le disque vidé, on le retire du Volume Group puis on efface son étiquette LVM, dans cet ordre :

  1. Vider le disque (si ce n'est pas déjà fait) :

    Fenêtre de terminal
    sudo pvmove /dev/sdb
  2. Sortir le PV du Volume Group :

    Fenêtre de terminal
    sudo vgreduce vg_data /dev/sdb
    Removed "/dev/sdb" from volume group "vg_data"
  3. Effacer l'étiquette LVM du disque, qui peut alors être débranché :

    Fenêtre de terminal
    sudo pvremove /dev/sdb
    Labels on physical volume "/dev/sdb" successfully wiped.

L'ordre est important : pvremove avant vgreduce exigerait l'option -ff (déconseillée). Toujours retirer du VG d'abord.

Pour remplacer un disque qui faiblit mais fonctionne encore, on combine les étapes : ajouter le neuf, migrer dessus, retirer l'ancien.

Fenêtre de terminal
sudo vgextend vg_data /dev/sdNEUF # 1. ajouter le disque neuf
sudo pvmove /dev/sdANCIEN /dev/sdNEUF # 2. migrer les données vers le neuf
sudo vgreduce vg_data /dev/sdANCIEN # 3. sortir l'ancien du VG
sudo pvremove /dev/sdANCIEN # 4. effacer son étiquette

Quand on agrandit un disque virtuel (VM) ou une partition sous-jacente, LVM ne voit pas le nouvel espace tant qu'on ne le lui signale pas. pvresize met le PV à jour :

Fenêtre de terminal
sudo pvresize /dev/sdb

L'espace ajouté devient alors allouable par le Volume Group, prêt pour un lvextend. C'est le complément naturel de pvmove lors d'une migration vers un disque plus grand.

SymptômeCause probableSolution
pvmove : no extents availablepas assez d'espace libre sur les autres PVajouter un disque (vgextend) avant de migrer
vgreduce refuse de retirer le PVdes extents y sont encore allouéslancer pvmove d'abord pour le vider
pvremove refuse : still in VGPV encore membre du VGvgreduce avant pvremove
Migration interrompue par un rebootnormal, pvmove est reprenablerelancer pvmove sans argument
Espace d'un disque agrandi invisiblePV pas mis à jourpvresize /dev/sdX

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • pvmove déplace les extents d'un disque vers les autres PV du VG, à chaud.
  • Cibler une destination (pvmove /dev/sdb /dev/sdc) ou une plage (pvmove /dev/sdb:0-999).
  • Retirer un disque : pvmove puis vgreduce puis pvremove, dans cet ordre.
  • Remplacer un disque vivant : vgextend (neuf) → pvmovevgreducepvremove (ancien).
  • Disque mort : vgreduce --removemissing --force puis restaurer depuis une sauvegarde.
  • pvmove est lent, intensif en I/O mais reprenable (relancer sans argument). Sauvegarder avant.

FAQ : questions fréquentes sur pvmove et la gestion des disques LVM

Section intitulée « FAQ : questions fréquentes sur pvmove et la gestion des disques LVM »

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn