Czy istnieje prosty sposób przenoszenia / kopiowania woluminu logicznego z jednej grupy woluminów do drugiej? (LVM2)

15

W domu przestawiam kilka dysków na swoim serwerze i mogę przenieść kilka woluminów logicznych LVM do innej grupy woluminów. Czy istnieje prosty sposób to zrobić? Widziałem wzmiankę o cplvpoleceniu, ale wydaje się, że jest albo stare, albo nie jest to coś, co kiedykolwiek było dostępne dla Linuksa.

jkp
źródło

Odpowiedzi:

20

Jeśli możesz ustawić wolumin logiczny na oddzielnym podzbiorze woluminów fizycznych od reszty źródłowej grupy woluminów ( lvconvert sourcevg/sourcelv /dev/pv1 ...może to pomóc), możesz użyć, vgsplitaby podzielić lv na nową vg i vgmergepołączyć nową vg z cel vg.

Chociaż LVM ma funkcję kopii lustrzanej, nie możesz (zdrowo) użyć jej do wykonania kopii między grupami woluminów, ponieważ obie nogi kopii lustrzanej muszą żyć na tej samej vg i powiązanie nie może zostać zerwane .

Możesz skopiować wolumin LVM do innego w sposób, w jaki kopiujesz dowolny wolumin do innego: utwórz docelową wartość LV o odpowiednim rozmiarze, a następnie skopiuj zawartość za pomocą dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Jeśli wolumin źródłowy jest aktywny, możesz użyć LVM, aby utworzyć spójną kopię: najpierw wykonaj migawkę źródła lv za pomocą lvcreate -s, a następnie skopiuj migawkę.

Gilles „SO- przestań być zły”
źródło
1
Brilliant Gilles .... vgsplit / vgmerge prawdopodobnie będzie w porządku: po tym mogę użyć pvmove, aby przenieść fizyczne zakresy na nowy dysk, a następnie usunąć stary wolumin z VG.
jkp
Szkoda, że ​​to ostatecznie nie działało ze względu na różne rozmiary zasięgu. Jeśli nie jest to dla ciebie problemem, sugeruję, że ta metoda byłaby najłatwiejsza.
jkp
Po dd(jeśli nie spieszysz się ze zrzuceniem starych woluminów), nie zapomnij zmienić UUID nowych systemów plików: tune2fs -U random / dev / targetvg / targetlv
środa
2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove może przenosić dane między woluminami fizycznymi: Podręcznik administratora LVM

Mediolan
źródło
10
Ale nie między grupami woluminów.
MattBianco,
Powtarzam: to nie działa dla dwóch osobnych grup tomów
kissgyorgy
Najpierw vgextendvg1 z nowym pv, a następnie pvmovelv do nowego pv, vgsplittymczasowe vg, które masz vgmergew vg2. Następnie pvmoveponownie lv na vg2 oryginalny pv, vgreducevg2, aby odczytać pośredni pv. Lub, aby uniknąć pośredniej kopii, możesz po prostu najpierw połączyć vg1 z vg2, pvmovelv1 i vgsplitponownie vg1 z vg2. To powinno odpowiedzieć na zarzuty @ MattBianco i @kissgyorgy i jest równoważne rozwiązaniu @Gilles, ale zastępuje migawkę i niski poziom ddprzezpvmove
marcz
1

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.

Alternatywnie możesz użyć pvmovedo przeniesienia głośności.

Kompletna, samodzielna przykładowa sesja z wykorzystaniem urządzeń pętli 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

Tworzenie grup woluminów vg1i vg2na /dev/loop1i /dev/loop2 odpowiednio.

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

Tworzenie woluminów logicznych lv1i lv2na vg1i vg2odpowiednio.

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

Twórz systemy plików ext4 na lv1i lv2.

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

Opcjonalnie napisz coś, lv1aby później sprawdzić, czy kopia została poprawnie utworzona. Dokonaj vg1nieaktywna.

vgchange -a n vg1

Uruchom polecenie scalania w trybie testowym. To łączy się lv1w lv2.

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. Argument <> mówi, lvconvertaby kopia lustrzana była lv1_copywłączona /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 vg2nieaktywna.

vgchange -a n vg2

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) Po scaleniu:

Logical volumes in `vg1` must be inactive

I przy podziale:

Logical volume `vg2/lv1` must be inactive.
Faheem Mitha
źródło