web-dev-qa-db-fra.com

Existe-t-il un moyen simple de déplacer / copier un volume logique d'un groupe de volumes à un autre? (LVM2)

Je réarrange chez moi un groupe de disques sur mon serveur et je me trouve dans la position de vouloir déplacer un groupe de volumes logiques LVM vers un autre groupe de volumes. Y a-t-il un moyen simple de faire cela? J'ai vu la mention d'une commande cplv, mais il semble que ce soit un élément ancien ou non existant pour Linux.

14
jkp

Si vous pouvez organiser le volume logique sur un sous-ensemble séparé de volumes physiques du reste du groupe de volumes source (lvconvert sourcevg/sourcelv /dev/pv1 ... peut aider), vous pouvez utiliser vgsplit pour scinder le lv en une nouvelle vg et vgmerge pour fusionner le nouveau. vg dans la cible vg.

Bien que LVM ait une fonction de mise en miroir, vous ne pouvez pas (en toute sécurité) l’utiliser pour faire une copie entre groupes de volumes, car les deux branches du miroir doivent vivre sur le même vg et l’association ne peut pas être rompue =.

Vous pouvez copier un volume LVM sur un autre comme vous le feriez avec n'importe quel volume: créez un lv cible de la taille appropriée, puis copiez le contenu avec dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Si le volume source est actif, vous pouvez utiliser LVM pour en faire une copie cohérente: commencez par prendre un instantané du lv source avec lvcreate -s, puis copiez-le.

19
Gilles
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove peut déplacer des données entre des volumes physiques: Guide de l'administrateur LVM

2
milan

À partir de la version LVM dans Debian (9.0), à savoir 2.02.168-2, il est possible de copier un volume logique sur plusieurs groupes de volumes en utilisant une combinaison de vgmergename__, lvconvertet de vgsplitname__. Comme un déplacement est une combinaison d'une copie et d'une suppression, cela fonctionnera également pour un déplacement.

Vous pouvez également utiliser pvmovepour déplacer simplement le volume.

Un exemple complet de session autonome utilisant des unités de boucle et lvconvertsuit.

Récapitulatif: nous créons le groupe de volumes vg1 avec le volume logique lv1 et vg2 avec lv2, et faisons une copie de lv1 dans vg2.

Créer des fichiers.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Configurez des périphériques en boucle sur des fichiers.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Créez des volumes physiques sur des périphériques en boucle (initialisez des périphériques en boucle à utiliser par LVM).

pvcreate /dev/loop1 /dev/loop2

Créez les groupes de volumes vg1 et vg2 respectivement sur /dev/loop1 et /dev/loop2.

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Créez des volumes logiques lv1 et lv2 respectivement sur vg1 et vg2.

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Créez des systèmes de fichiers ext4 sur lv1 et lv2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

Éventuellement, écrivez quelque chose sur lv1 afin de pouvoir vérifier ultérieurement que la copie a été créée correctement. Désactivez vg1.

vgchange -a n vg1

Exécutez la commande de fusion en mode test. Ceci fusionne lv1 dans lv2.

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

Et puis pour de vrai.

vgmerge -A y -l -v vg2 vg1

Créez ensuite une paire de miroirs RAID 1 à partir de lv1 en utilisant lvconvertname__. L'argument <> indique à lvconvertde créer la copie miroir lv1_copy sur /dev/loop2.

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Puis divisez le miroir. Le nouveau LV est maintenant lv1_copy.

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Désactivez vg2.

vgchange -a n vg2

Puis (mode test)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Pour de vrai

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Résultat obtenu:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

REMARQUES:

1) La plupart de ces commandes devront être exécutées en tant que root.

2) En cas de duplication des noms des volumes logiques dans les deux groupes de volumes, vgmergerefusera de continuer.

3) en fusion:

Logical volumes in `vg1` must be inactive

Et en split:

Logical volume `vg2/lv1` must be inactive.
1
Faheem Mitha