Ist es möglich, ein logisches Volume als Ganzes von einer Volume-Gruppe in eine andere zu verschieben?
Es ist möglich, ein (mehr oder weniger) passendes lv zu erstellen und die Daten zu kopieren, aber gibt es eine Möglichkeit, dies allein mit LVM-Tools zu tun?
Wenn nicht, gibt es einen theoretischen Grund oder eine technische Einschränkung (Umfangsgrößen)?
Akzeptierte Antwort:
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 von vgmerge
, 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 Schleifengerä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 für
die Verwendung durch LVM).
pvcreate /dev/loop1 /dev/loop2
Erstellen Sie Volumengruppen vg1 und vg2 auf /dev/loop1 bzw. /dev/loop2
.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Erstellen Sie die logischen Volumes lv1 und lv2 auf vg1 bzw. vg2.
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
Schreiben Sie optional etwas auf lv1, damit Sie später überprüfen können, ob die Kopie
korrekt erstellt wurde. vg1 deaktivieren.
vgchange -a n vg1
Führen Sie den Merge-Befehl im Testmodus aus. Dies verschmilzt vg1 mit vg2.
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 von lv1
mit lvconvert
. Die dest-pv
Argument teilt lvconvert
mit um die Spiegelkopie
auf /dev/loop2
zu erstellen .
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Dann den Spiegel teilen. Das 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/lv1
inaktiv.
lvchange -a n /dev/vg2/lv1
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 Volumes in
den beiden Volume-Gruppen doppelt vorhanden sind, vgmerge
wird sich weigern fortzufahren.
3) Beim Zusammenführen logische Volumes in vg1
muss inaktiv sein. Und auf geteilten logischen Volumes in vg2
Zugehörigkeit zu vg1
muss inaktiv sein. In unserem Fall ist dies lv1
.