Note d’Erwan: Cet article a été publié initialement sur mon ancien blog, le site étant amené à disparaitre et le contenu me semblant toujours pertinent, je le reproduis ici.

Je vous propose de détailler le fonctionnement de la commande pvmove qui permet, comme son nom l’indique, de déplacer des données d’un volume physique (PV) à un autre. Cette méthode a le grand avantage de pouvoir s’exécuter à chaud. Les cas d’usages possibles sont par exemple de faciliter le remplacement d’un disque ou bien déplacer les données d’une baie SAN à une autre.

Avant de commencer à jouer avec des données de production je vous conseille fortement de réaliser des tests pour être complètement à l’aise avec les commandes LVM. Faire une sauvegarde pourrait être aussi une bonne idée !

Vous aurez deviné que la commande pvmove n’est utilisable que si votre stockage est géré par LVM. Si vous n’êtes pas famillier avec ces notions, il existe une multitude d’articles sur le sujet.

Configuration du serveur de test

Pour les besoins de la démonstration j’utilise une machine virtuelle sur laquelle j’ai installé une CentOS 7.1. Les données sont stockées sur le device /dev/sdb qui fait partie du VG vgtest. Le but de l’opération est de tout déplacer vers un nouveau device /dev/sdc puis de supprimer /dev/sdb.

Méthodologie

Un (bon) schéma étant souvent plus parlant qu’un long texte, j’ai résumé les différentes étapes dans l’image ci-dessous:

 

Migrer-Donnees-LVM-01

Liste des commandes

Découverte du nouveau device cible:
# for x in `ls /sys/class/scsi_host/`; do echo "- - -" > /sys/class/scsi_host/$x/scan ; done
Création d’un PV sur le nouveau device (/dev/sdc):
# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
Ajout du nouveau device dans le VG:
# vgextend vgtest /dev/sdc
  Volume group "vgtest" successfully extended
Déplacement des données de /dev/sdb vers /dev/sdc:

L’argument -b permet d’exécuter la commande en tâche de fond.

# pvmove -b /dev/sdb /dev/sdc
Suivi de l’évolution de la copie des données:

La colonne Cpy%Sync indique le pourcentage des données déjà déplacées.

# watch lvs -a -o+devices
LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move     Log Cpy%Sync Convert Devices
root      centos -wi-ao---- 13.91g                                                         /dev/sda2(410)
swap      centos -wi-ao----  1.60g                                                         /dev/sda2(0)
lvtest    vgtest -wI-ao---- 10.00g                                                         pvmove0(0)
[pvmove0] vgtest p-C-aom--- 10.00g                           /dev/sdb     7.89             /dev/sdb(0),/dev/sdc(0)
Suppression de l’ancien device /dev/sdb du VG:
# vgreduce vgtest /dev/sdb
  Removed "/dev/sdb" from volume group "vgtest"
Suppression du PV du device /dev/sdb:
# pvremove /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped
Suppression du device /dev/sdb:
# echo 1 > /sys/block/sdb/device/delete
Erwan Quelin

Rédigé par

Erwan Quelin

Erwan Quélin est depuis 7 ans Ingénieur Systèmes chez Cheops Technology. Ses interventions sont multiples et auprès de clients très diversifiés dans la région Ouest. Spécialisé dans la virtualisation autour des produits VMware et dans le stockage autour des gammes VNX, Unity et VPLEX de Dell EMC, Erwan est certifié VMware Certified Professional – Datacenter virtualization 4, 5 et 6 ainsi que EMC Implementation Engineer – VNX et Unity et vient d’intégrer les programmes VMware vExpert et Dell EMC Elect pour l’année 2017.

Lorsqu’il lui reste un peu de temps libre, Erwan développe des projets open sources ayant pour sujet principal l’automatisation d’infrastructures.