GNU/Linux >> Tutoriels Linux >  >> Linux

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

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.

Linux
  1. Comment déplacer tous les fichiers (y compris cachés) d'un répertoire à un autre ?

  2. Comment copier les paramètres d'une machine à une autre ?

  3. Copier les dernières N-lignes d'un fichier à un autre ?

  4. CentOS / RHEL :Comment déplacer un groupe de volumes d'un système à un autre

  5. Comment copier une table d'une base de données mysql vers une autre base de données mysql

Comment copier des éléments d'une table DynamoDB vers une autre table DynamoDB à l'aide de Python sur AWS

Reptyr - Déplacer un processus en cours d'exécution d'un terminal à un autre sans le fermer

Comment copier un fichier d'un autre répertoire vers celui en cours ?

CentOS / RHEL :déplacer un volume physique d'un groupe de volumes existant vers un autre groupe de volumes

Comment copier des commits d'un dépôt Git à un autre ?

Quel est le moyen le plus rapide de déplacer un million d'images d'un répertoire à un autre sous Linux ?