Si vous pouvez faire en sorte que le volume logique se trouve sur un sous-ensemble distinct de volumes physiques du reste du groupe de volumes source (lvconvert sourcevg/sourcelv /dev/pv1 ...
peut aider), vous pouvez utiliser vgsplit
pour diviser le lv en un nouveau vg et vgmerge
pour fusionner le nouveau vg dans le vg cible.
Bien que LVM dispose d'une fonctionnalité de mise en miroir, vous ne pouvez pas (sainement) l'utiliser pour faire une copie entre les groupes de volumes, car les deux jambes 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 copieriez n'importe quel volume sur un autre :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 faire une copie cohérente :prenez d'abord un instantané du lv source avec lvcreate -s
, puis copiez l'instantané.
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmove peut déplacer des données entre des volumes physiques :Guide de l'administrateur LVM
À partir de LVM dans Debian Stretch (9.0), à savoir 2.02.168-2, il est possible de faire une copie d'un volume logique à travers des groupes de volumes en utilisant une combinaison de vgmerge
, lvconvert
, et vgsplit
. Puisqu'un déplacement est une combinaison d'une copie et d'une suppression, cela fonctionnera également pour un déplacement.
Alternativement, vous pouvez utiliser pvmove
pour simplement déplacer le volume.
Une session d'exemple autonome complète utilisant des périphériques de boucle et lvconvert
suit.
Résumé :nous créons le groupe de volumes vg1
avec volume logique lv1
, et vg2
avec lv2
, et faire une copie de lv1
en vg2
.
Créez des fichiers.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Configurez des périphériques de boucle sur les fichiers.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Créez des volumes physiques sur les périphériques en boucle (initialisez les périphériques en boucle pour qu'ils soient utilisés par LVM).
pvcreate /dev/loop1 /dev/loop2
Créer des groupes de volumes vg1
et vg2
sur /dev/loop1
et /dev/loop2
respectivement.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Créer des volumes logiques lv1
et lv2
sur vg1
et vg2
respectivement.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Créer des systèmes de fichiers ext4 sur lv1
et lv2
.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Facultativement, écrivez quelque chose sur lv1
afin que vous puissiez vérifier ultérieurement que la copie a été correctement créée. Faire vg1
inactif.
vgchange -a n vg1
Exécutez la commande de fusion en mode test. Cela fusionne lv1
en 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 lvconvert
. L'argument <> indique lvconvert
pour que le miroir copielv1_copy
sur /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Divisez ensuite 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
Faire vg2
inactif.
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
Sortie résultante :
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) S'il y a une duplication des noms des volumes logiques dans les deux groupes de volumes, vgmerge
refusera de continuer.
3) Lors de la fusion :
Logical volumes in `vg1` must be inactive
Et au split :
Logical volume `vg2/lv1` must be inactive.