Przenieś wolumin logiczny z jednej grupy woluminów do drugiej

18

Czy można przenieść logiczny wolumin z jednej grupy woluminów w całości?

Możliwe jest utworzenie (mniej więcej) pasującego lv i skopiowanie danych, ale czy jest jakiś sposób, aby to zrobić za pomocą samych narzędzi LVM?

Jeśli nie, to czy istnieje powód teoretyczny lub ograniczenie techniczne (rozmiary rozmiarów)?

XTL
źródło

Odpowiedzi:

13

Grupa woluminów składa się z całych woluminów fizycznych. Wolumin fizyczny składa się z wielu zakresów (zwykle jest to 4 MB); każdy zakres może należeć do innego woluminu logicznego. Aby przenieść wolumin logiczny do innej grupy, nie można po prostu przenieść zakresu, ponieważ może to podzielić wolumin fizyczny na źródłowy VG i docelowy VG.

To, co możesz zrobić, to przenieść jeden lub więcej PV ze źródłowego VG do docelowego VG za pomocą vgsplitpolecenia. Możesz określić, które PV chcesz przesłać lub które LV (ale tylko pojedynczo). Jeśli podasz LV, on i inne LV w źródłowym VG muszą znajdować się na osobnych PV. Docelowy VG zostanie utworzony, jeśli nie ma VG o podanej nazwie.

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

Być może będziesz musiał użyć pvmovenajpierw, aby ustawić logiczne woluminy, które chcesz przenieść, na osobne PV.

Jeśli chciałeś zachować fizyczne granice VG i przenieść dane, nie ma wbudowanego narzędzia, ale możesz zrobić kopię lustrzaną, a następnie usunąć oryginał .

Gilles „SO- przestań być zły”
źródło
Wygląda na to, że grupa docelowa może być wcześniej istniejącą?
XTL,
8

Począwszy od LVM w odcinku Debiana (9.0), a mianowicie 2.02.168-2, jest możliwe do wykonania kopii objętości logicznego w grupach objętości za pomocą kombinacji vgmerge, lvconverti vgsplit. Ponieważ przeniesienie jest kombinacją kopii i usunięcia, zadziała to również w przypadku przeniesienia.

Możesz też użyć pvmovedo przeniesienia głośności.

Kompletna, samodzielna przykładowa sesja z wykorzystaniem urządzeń pętlowych i lvconvertnastępnych.

Podsumowanie: tworzymy grupę woluminów vg1z woluminem logicznym lv1oraz za vg2pomocą lv2i tworzymy kopię lv1w vg2.

Utwórz pliki.

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

Skonfiguruj urządzenia pętlowe na plikach.

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

Utwórz woluminy fizyczne na urządzeniach pętli (zainicjuj urządzenia pętli do użytku przez LVM).

pvcreate /dev/loop1 /dev/loop2

Utwórz grupy woluminów vg1 i vg2 odpowiednio w / dev / loop1 i / dev / loop2.

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

Utwórz woluminy logiczne lv1 i lv2 odpowiednio w wersjach vg1 i vg2.

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

Twórz systemy plików ext4 na poziomach 1 i 2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

Opcjonalnie napisz coś na lv1, aby później sprawdzić, czy kopia została poprawnie utworzona. Uaktywnij vg1.

vgchange -a n vg1

Uruchom polecenie scalania w trybie testowym. Łączy to vg1 z vg2.

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

A potem naprawdę.

vgmerge -A y -l -v vg2 vg1

Następnie utwórz parę kopii RAID 1 lv1przy użyciu lvconvert. dest-pvArgumentem opowiada lvconvertzrobić kopię lustrzaną na /dev/loop2.

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

Następnie podziel lustro. Nowa LV jest teraz lv1_copy.

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

Dokonaj vg2/lv1nieaktywna.

lvchange -a n /dev/vg2/lv1

Następnie (tryb testowy)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Na serio

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

Wynikowy wynik:

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

UWAGI:

1) Większość tych poleceń będzie musiała być uruchomiona jako root.

2) W przypadku jakiegokolwiek powielenia nazw woluminów logicznych w dwóch grupach woluminów vgmergeodmówi kontynuowania.

3) Podczas scalania woluminy logiczne vg1muszą być nieaktywne. A przy podziale vg2przynależność do woluminów logicznych vg1musi być nieaktywna. W naszym przypadku tak jest lv1.

Faheem Mitha
źródło
2

Oferuję własne:

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/

jeśli wszystko jest w porządku, usuń źródło

lvremove vgsource/lv0
Conan
źródło
Jest to w zasadzie przeciwieństwo pytania. Chodzi o to, aby przenieść wolumin zamiast kopiować dane do nowego.
XTL,