Existe-t-il un moyen simple de déplacer / copier un volume logique d'un groupe de volumes vers un autre? (LVM2)
15
Je réorganise un tas de disques sur mon serveur à la maison et je me retrouve dans la position de vouloir déplacer un tas de volumes logiques LVM vers un autre groupe de volumes. Existe-t-il un moyen simple de procéder? J'ai vu la mention d'une cplvcommande, mais cela semble être ancien ou pas quelque chose qui ait jamais été disponible pour Linux.
Si vous pouvez arranger le volume logique 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 vgsplitpour diviser le lv en un nouveau vg et vgmergepour fusionner le nouveau vg dans le cible vg.
Bien que LVM ait une fonction 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 le feriez pour 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 effectuer une copie cohérente: prenez d'abord un instantané du lv source avec lvcreate -s, puis copiez l'instantané.
Brilliant Gilles .... vgsplit / vgmerge sera probablement très bien: je peux utiliser pvmove après cela pour déplacer les extensions physiques vers le nouveau disque, puis supprimer l'ancien volume du VG.
jkp
Dommage, cela n'a pas fonctionné pour moi à la fin en raison des tailles d'étendue différentes. Si ce n'est pas un problème pour vous, je suggère que cette méthode soit plus simple.
jkp
Après dd(si vous n'êtes pas pressé de supprimer les anciens volumes), n'oubliez pas de changer l'UUID des nouveaux systèmes de fichiers: tune2fs -U random / dev / targetvg / targetlv
Je répète: cela ne fonctionne pas pour deux groupes de volumes séparés
kissgyorgy
D'abord vgextendvg1 avec un nouveau pv, puis pvmovevotre lv vers le nouveau pv, vgsplitun vg temporaire que vous vgmergedans vg2. Puis à pvmovenouveau le lv à vg2 pv d'origine, vgreducevg2 pour obtenir la lecture du pv intermédiaire. Ou pour éviter la copie intermédiaire, vous pouvez tout d'abord fusionner vg1 en vg2, pvmovelv1 et à vgsplitnouveau vg1 de vg2. Cela devrait répondre aux objections de @ MattBianco et @kissgyorgy et équivaut à la solution de @Gilles mais en remplaçant l'instantané et le bas niveau ddpar unpvmove
marcz
1
À la LVM dans Debian tronçon (9.0), à savoir 2.02.168-2, il est possible de faire une copie d'un volume logique pour les groupes de volumes 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 pvmovepour simplement déplacer le volume.
Un exemple de session complète et autonome utilisant des périphériques en boucle et
lvconvertsuit.
Résumé: nous créons un groupe de volumes vg1avec un volume logique lv1, et vg2avec lv2, et faisons une copie de lv1in vg2.
dd
(si vous n'êtes pas pressé de supprimer les anciens volumes), n'oubliez pas de changer l'UUID des nouveaux systèmes de fichiers: tune2fs -U random / dev / targetvg / targetlvpvmove peut déplacer des données entre des volumes physiques: Guide de l'administrateur LVM
la source
vgextend
vg1 avec un nouveau pv, puispvmove
votre lv vers le nouveau pv,vgsplit
un vg temporaire que vousvgmerge
dans vg2. Puis àpvmove
nouveau le lv à vg2 pv d'origine,vgreduce
vg2 pour obtenir la lecture du pv intermédiaire. Ou pour éviter la copie intermédiaire, vous pouvez tout d'abord fusionner vg1 en vg2,pvmove
lv1 et àvgsplit
nouveau vg1 de vg2. Cela devrait répondre aux objections de @ MattBianco et @kissgyorgy et équivaut à la solution de @Gilles mais en remplaçant l'instantané et le bas niveaudd
par unpvmove
À la LVM dans Debian tronçon (9.0), à savoir 2.02.168-2, il est possible de faire une copie d'un volume logique pour les groupes de volumes utilisant une combinaison de
vgmerge
,lvconvert
, etvgsplit
. 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.Un exemple de session complète et autonome utilisant des périphériques en boucle et
lvconvert
suit.Résumé: nous créons un groupe de volumes
vg1
avec un volume logiquelv1
, etvg2
aveclv2
, et faisons une copie delv1
invg2
.Créez des fichiers.
Configurez des périphériques de boucle sur des fichiers.
Créez des volumes physiques sur les périphériques de boucle (initialisez les périphériques de boucle pour une utilisation par LVM).
Créez des groupes de volumes
vg1
etvg2
sur/dev/loop1
et/dev/loop2
respectivement.Créez des volumes logiques
lv1
etlv2
survg1
etvg2
respectivement.Créez des systèmes de fichiers ext4 sur
lv1
etlv2
.Vous pouvez éventuellement écrire quelque chose
lv1
pour pouvoir vérifier ultérieurement que la copie a été correctement créée. Rendezvg1
inactif.Exécutez la commande de fusion en mode test. Fusionne
lv1
danslv2
.Et puis pour de vrai.
Créez ensuite une paire de miroirs RAID 1 à l'
lv1
aide delvconvert
. L'argument <> ditlvconvert
de faire la copie miroirlv1_copy
sur/dev/loop2
.Ensuite, divisez le miroir. Le nouveau LV est maintenant
lv1_copy
.Rendez
vg2
inactif.Ensuite (mode test)
Pour de vrai
Sortie résultante:
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) Lors de la fusion:
Et sur split:
la source