Wenn Sie dafür sorgen können, dass sich der logische Datenträger auf einer separaten Teilmenge physischer Datenträger vom Rest der Quell-Datenträgergruppe befindet (lvconvert sourcevg/sourcelv /dev/pv1 ...
kann helfen), können Sie vgsplit
verwenden um das lv in ein neues vg und vgmerge
abzuspalten um die neue vg mit der Ziel-vg zu verschmelzen.
Obwohl LVM eine Spiegelungsfunktion hat, können Sie sie nicht (vernünftigerweise) verwenden, um eine Kopie zwischen Datenträgergruppen zu erstellen, da beide Zweige des Spiegels auf derselben vg leben müssen und die Zuordnung nicht unterbrochen werden kann.
Sie können ein LVM-Volume auf ein anderes kopieren, wie Sie jedes andere Volume auf ein anderes kopieren würden:Erstellen Sie ein Ziel-LV der entsprechenden Größe und kopieren Sie dann den Inhalt mit dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M
. Wenn das Quellvolume aktiv ist, können Sie LVM nutzen, um eine konsistente Kopie zu erstellen:Erstellen Sie zuerst mit lvcreate -s
einen Snapshot des Quell-Lv , kopieren Sie dann den Snapshot.
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmove kann Daten zwischen physischen Volumes verschieben:LVM Administrator's Guide
Ab LVM in Debian Stretch (9.0), nämlich 2.02.168-2, ist es möglich, eine Kopie eines logischen Volumes über Volume-Gruppen hinweg zu erstellen, indem eine Kombination aus vgmerge
verwendet wird , lvconvert
, und vgsplit
. Da ein Verschieben eine Kombination aus Kopieren und Löschen ist, funktioniert dies auch für ein Verschieben.
Alternativ können Sie pvmove
verwenden um einfach die Lautstärke zu verschieben.
Eine vollständige, in sich geschlossene Beispielsitzung mit Loop-Geräten und lvconvert
folgt.
Zusammenfassung:Wir erstellen die Volumengruppe vg1
mit logischem Volume lv1
, und vg2
mit lv2
, und erstellen Sie eine Kopie von lv1
in vg2
.
Dateien erstellen.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Loop-Geräte für Dateien einrichten.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Erstellen Sie physische Volumes auf Loop-Geräten (initialisieren Sie Loop-Geräte zur Verwendung durch LVM).
pvcreate /dev/loop1 /dev/loop2
Erstellen Sie Volumengruppen vg1
und vg2
auf /dev/loop1
und /dev/loop2
bzw..
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Erstellen Sie logische Volumes lv1
und lv2
auf vg1
und vg2
bzw..
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Erstellen Sie ext4-Dateisysteme auf lv1
und lv2
.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Optional schreiben Sie etwas auf lv1
damit Sie später überprüfen können, ob die Kopie korrekt erstellt wurde. Machen Sie vg1
inaktiv.
vgchange -a n vg1
Führen Sie den Merge-Befehl im Testmodus aus. Dadurch wird lv1
zusammengeführt in lv2
.
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
Und dann wirklich.
vgmerge -A y -l -v vg2 vg1
Erstellen Sie dann ein RAID 1-Spiegelpaar aus lv1
mit lvconvert
. Das <> Argument teilt lvconvert
mit um die Spiegelkopie anzufertigenlv1_copy
auf /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Dann den Spiegel teilen. Der neue LV ist jetzt lv1_copy
.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Machen Sie vg2
inaktiv.
vgchange -a n vg2
Dann (Testmodus)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
Echt
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Ergebnisausgabe:
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
HINWEISE:
1) Die meisten dieser Befehle müssen als root ausgeführt werden.
2) Wenn die Namen der logischen Datenträger in den beiden Datenträgergruppen doppelt vorhanden sind, vgmerge
wird sich weigern fortzufahren.
3) Beim Zusammenführen:
Logical volumes in `vg1` must be inactive
Und bei Split:
Logical volume `vg2/lv1` must be inactive.