En gros, je veux déplacer/copier plusieurs volumes logiques (lv) dans un nouveau groupe de volumes (vg). Le nouveau groupe de volumes réside sur un nouvel ensemble de volumes physiques. Est-ce que quelqu'un sait comment le faire en toute sécurité sans endommager les données à l'intérieur de ces volumes logiques?
Il n'y a aucune raison de le copier d'abord dans un fichier .img, il suffit de faire le lvcreate d'abord, puis de le copier directement:
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
D'accord, j'ai pu gérer la situation à ma manière. Voici les étapes que j'ai prises:
1) Prenez un instantané du volume logique de ciblage.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
Remarque: la taille de l'instantané peut être aussi grande ou aussi petite que vous le souhaitez. Ce qui compte, c’est de disposer de suffisamment d’espace pour enregistrer les modifications en cours d’instantané.
2) Créez une copie image du contenu de l'instantané en utilisant dd
dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img
3) Créez un nouveau volume logique de taille suffisante dans le groupe de volumes de ciblage (nouveau).
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
4) Écrivez les données sur le nouveau volume logique à partir de la sauvegarde d'image en utilisant dd
dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume
5) supprimez la sauvegarde d'image instantanée et d'image en utilisant lvremove
et rm
respectivement.
C'est tout le monde ... J'espère que ça aide quelqu'un :)
À 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 vgmerge
name__, lvconvert
et de vgsplit
name__. 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 pvmove
pour déplacer simplement le volume.
Un exemple complet de session autonome utilisant des unités de boucle et lvconvert
suit.
Résumé: 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 pour une utilisation par LVM).
pvcreate /dev/loop1 /dev/loop2
Créez des groupes de volumes vg1 et vg2 sur/dev/loop1 et/dev/loop2 respectivement.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Créez les volumes logiques lv1 et lv2 sur vg1 et vg2 respectivement.
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. Rendre vg1 inactif.
vgchange -a n vg1
Exécutez la commande de fusion en mode test. Cela 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 lvconvert
name__. L'argument <> indique à lvconvert
de 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
Rendre 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
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, vgmerge
refusera de continuer.
3) en fusion:
Logical volumes in `vg1` must be inactive
Et en split:
Logical volume `vg2/lv1` must be inactive.
Je vais offrir le mien:
umount /somedir/
lvdisplay /dev/vgsource/lv0 --units b
lvcreate -L 12345b -n lv0 vgtarget
dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress
mount /dev/vgtarget/lv0 /somedir/
si tout va bien, supprimez la source
lvremove vgsource/lv0
Les 4 réponses jusqu'à présent manquent toutes que la taille exacte du volume n'est souvent pas connue. lvdisplay
n'affiche que les valeurs arrondies à 2 décimales et man lvdisplay
ne pointe que vers d'autres commandes pour les options disponibles. Ce qui suit sélectionne MiB, qui est suffisamment précis avec la taille de bloc LVM par défaut de 4 MiB:
lvdisplay --units m
MiB est également l’unité par défaut pour --size
of lvcreate
. En cas de doute, vérifiez une nouvelle fois la taille correcte avec lvdisplay
après avoir créé le volume cible. Ensuite, continuez comme dans les autres réponses pour en faire une copie. De plus, je recommanderais de vérifier la copie, par exemple avec cmp
.
Voici pourquoi un instantané est utilisé et ce qu’il protège et ne protège pas:
Le cliché est créé de sorte que toutes les données soient copiées telles quelles au moment de la création du cliché. Les activités sur le volume source pendant le processus de copie ne seront pas reflétées dans la copie.
L'instantané protège également le volume source contre les erreurs humaines dans la ligne de commande dd
. Si vous écrivez accidentellement sur l'instantané, seules les données de l'instantané seront endommagées. Vous pouvez simplement supprimer l'instantané et recommencer.
Le volume cible n'est pas protégé pendant les processus de copie. Si un autre administrateur (ou un processus automatique tel que le système os-prober de dracut
) monte le volume incomplet, le montage peut tout gâcher. (Même un montage en lecture seule peut toujours écrire des entrées de journal sur le volume.)