Verschieben eines logischen Volumes von einer Volume-Gruppe in eine andere

Verschieben eines logischen Volumes von einer Volume-Gruppe in eine andere

Ist es möglich, ein logisches Volume komplett 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 nur mit LVM-Tools zu tun?

Wenn nicht, gibt es einen theoretischen Grund oder eine technische Einschränkung (Ausdehnungsgrößen)?

Antwort1

Eine Volume-Gruppe besteht aus ganzen physischen Volumes. Ein physisches Volume besteht aus vielen Extents (ein Extent ist normalerweise 4 MB groß); jeder Extent kann zu einem anderen logischen Volume gehören. Um ein logisches Volume in eine andere Gruppe zu übertragen, können Sie nicht einfach Extents übertragen, da dies das physische Volume zwischen dem Quell-VG und dem Ziel-VG aufteilen könnte.

Was Sie tun können, ist, ein oder mehrere PVs von der Quell-VG zur Ziel-VG zu übertragen, mit demvgsplitBefehl. Sie können angeben, welche PVs oder LVs Sie übertragen möchten (aber immer nur eines auf einmal). Wenn Sie ein LV angeben, müssen sich dieses und die anderen LVs in der Quell-VG auf separaten PVs befinden. Die Ziel-VG wird erstellt, wenn keine VG mit dem angegebenen Namen vorhanden ist.

vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99

Möglicherweise müssen SiepvmoveSorgen Sie zunächst dafür, dass sich die logischen Datenträger, die Sie verschieben möchten, auf separaten PVs befinden.

Wenn Sie die physischen Grenzen des VG beibehalten und die Daten verschieben möchten, gibt es kein integriertes Tool. Sie könnten jedochMachen Sie einen Spiegel und entfernen Sie dann das Original.

Antwort2

Ab LVM in Debian Stretch (9.0), nämlich 2.02.168-2, ist es möglich, eine Kopie eines logischen Datenträgers über Datenträgergruppen hinweg zu erstellen, indem eine Kombination aus vgmerge, lvconvert, und vgsplitverwendet wird. Da eine Verschiebung eine Kombination aus Kopieren und Löschen ist, funktioniert dies auch für eine Verschiebung.

Alternativ können Sie pvmovestattdessen auch verwenden, um die physischen Ausdehnungen zu verschieben. Um zu zitierenU&L: Zweck der physischen Ausdehnungen:

Ein einzelner physischer Extent ist die kleinste Einheit an Speicherplatz, die von LVM individuell verwaltet werden kann.

Eine vollständige, in sich geschlossene Beispielsitzung mit Loop-Geräten und lvconvertFollows.

Zusammenfassung: Wir erstellen eine Datenträgergruppe vg1mit dem logischen Datenträger lv1und vg2mit lv2und erstellen eine Kopie von lv1in vg2.

Dateien erstellen.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Richten Sie Loop-Geräte für Dateien ein.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Erstellen Sie physische Datenträger auf Loop-Geräten (initialisieren Sie Loop-Geräte zur Verwendung durch LVM).

pvcreate /dev/loop1 /dev/loop2

Erstellen Sie die Volume-Gruppen vg1 und vg2 auf /dev/loop1 bzw. /dev/loop2.

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Erstellen Sie die logischen Datenträger lv1 und lv2 jeweils auf vg1 und vg2.

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Erstellen Sie ext4-Dateisysteme auf Level 1 und Level 2.

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. Machen Sie vg1 inaktiv.

vgchange -a n vg1

Führen Sie den Merge-Befehl im Testmodus aus. Dadurch wird vg1 mit vg2 zusammengeführt.

# 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 lv1mithilfe von lvconvert. Das dest-pvArgument weist darauf hin lvconvert, dass die Spiegelkopie auf erstellt werden soll /dev/loop2.

# lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Anschließend den Spiegel teilen. Das neue LV ist nun lv1_copy.

# lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Inaktiv machen vg2/lv1.

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

Wirklich

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Resultierende Ausgabe:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

ANMERKUNGEN:

  1. Die meisten dieser Befehle müssen als Root ausgeführt werden. Das #vor einigen Befehlen zeigt an, dass es sich um einen Kommentar handelt. Es stellt nicht die Root-Eingabeaufforderung dar.

  2. Wenn es eine Duplizierung der Namen der logischen Datenträger in den beiden Datenträgergruppen gibt, vgmergewird die Fortsetzung abgelehnt.

  3. Beim Zusammenführen vg1müssen die logischen Datenträger in inaktiv sein. Und beim Teilen müssen die logischen Datenträger in , vg2die zu gehören, vg1inaktiv sein. In unserem Fall ist dies lv1.

Antwort3

Ich werde mein eigenes anbieten:

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/

Wenn alles in Ordnung ist, entfernen Sie die Quelle

lvremove vgsource/lv0

Antwort4

Angenommen, Sie haben ein Volume mit dem Namens0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

Ich möchte umziehen /dev/sdbund /dev/sdc1auf eine neue psychische Festplatte/dev/sdd1

Erstellen Sie ein physisches Volume auf sdd1

$ pvcreate /dev/sdd1

Sie können nun Ihre Volume-Gruppe s0mit der neuen Festplatte erweitern

$ vgextend s0 /dev/sdd1

Sie können jetzt mit dem Verschieben von Daten beginnen

$ pvmove /dev/sdb /dev/sdd1

Warten Sie, bis der Vorgang abgeschlossen ist

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

Überprüfen

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

Jetzt können Sie sich /dev/sdbaus der s0Gruppe entfernen

$ vgreduce s0 /dev/sdb

Befolgen Sie die gleichen Schritte für/dev/sdc1

verwandte Informationen