Czy zatwierdzić lub przywrócić migawkę LVM systemu Linux?

16

Zaraz przeprowadzę eksperymentalną aktualizację na moim serwerze CentOS 5. Jeśli aktualizacja się nie powiedzie, chcę móc cofnąć zmiany w systemie plików. Ten scenariusz wydaje się podobny do przykładu w Sekcji 3.8 LVM HOWTO dla migawek LVM2 do odczytu i zapisu - ale w przykładzie brakuje raczej tego, jak to zrobić.

  1. Jak zatwierdzę zmiany, scalając je z powrotem w oryginalną partycję?

  2. Jak przywrócić zmiany, przywracając system plików do pierwotnego stanu? Czy powinienem założyć, że będę musiał zrestartować kilka usług, jeśli nie całkowity restart?

  3. Czy możliwe jest tworzenie migawek tylko niektórych katalogów na partycji, czy jest to operacja obejmująca całą partycję?

Shewfig
źródło

Odpowiedzi:

11

Funkcja scalania migawek LVM2 / mapowania urządzeń jest dostępna, jeśli używasz Linuksa 2.6.33+ i używasz LVM 2.0.58+:

lvconvert --merge

Zobacz ten post: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

Odwołuje się do http://kernelnewbies.org/Linux_2_6_33 (patrz sekcja 5, MD / DM) i dziennika zmian LVM w wersji 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Ale nie mogę ci jeszcze powiedzieć, jak prawidłowo z niego korzystać ;-)

Bertrand Mathieu
źródło
dmsetup targetspowinien pokazywać scalanie migawek, jeśli tak jest w przypadku polecenia scalania zastosowanego do migawki-lv powróci do stanu, w którym wykonano migawkę.
Nils
OP wydaje się zdezorientowany co do dokonywania zmian za pomocą pewnego rodzaju kroku scalania. Zmiany są wprowadzane w miarę powiększania się migawki. Migawka (zmian) jest niezbędną informacją do wykonania kopii zapasowej za pomocą lvconvert --merge. Jeśli OP jest zadowolony ze swoich zmian, może usunąć migawkę za pomocą lvremove.
Vince
21

Właśnie próbowałem uaktualnienia opartego na migawkach z Ubuntu. I tak, musiałem kilka razy uruchomić się ponownie. Najpierw zmień nazwę oryginalnego root-lv na coś innego, abyś mógł nadać migawce oryginalną nazwę (ponieważ aktualizacja powoduje wiele zmian, a zmiany są szybsze w migawce niż w oryginale):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

Rozmiar powinien być odpowiednio dobrany. Następnie uruchom ponownie, aby „nowy” lvm / ubuntu został zamontowany jako root i możesz wykonać aktualizację. Teraz możesz przetestować nową wersję, a nawet przejść do starego systemu przez

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

Jeśli chcesz usunąć aktualizację, po prostu uruchom (ze starego systemu)

# lvremove lvm/root-new

Jeśli chcesz zatwierdzić zmiany, po prostu uruchom (ze starego systemu)

# lvconvert --merge lvm/root-new

lub z nowego systemu

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

następnie następuje restart. System odmówi natychmiastowego scalenia, ponieważ woluminy są otwarte. Tak więc scalanie rozpocznie się podczas rozruchu i będzie kontynuowane, dopóki będziesz już mógł pracować z systemem.

A tak przy okazji: przy zmianie systemu pamiętaj, aby używać odpowiedniego jądra. Ponieważ / boot nie jest częścią lvm, stare i nowe jądra byłyby tam umieszczone obok siebie.

Viktor Dick
źródło
Dziękuję za odpowiedź. Właśnie odtworzyłem twoją procedurę na maszynie wirtualnej CentOS 7 i działała jak urok. Po zresetowaniu mojej maszyny wirtualnej w trakcie procesu łączenia podsystem LVM wznowił ją, gdy system nadal uzyskiwał dostęp do zaktualizowanych plików.
Anderson Medeiros Gomes
Część tej odpowiedzi wydaje się sugerować dokonywanie zmian za pomocą lvconvert --merge. Gdy migawka powiększa się, zmiany są również zatwierdzane. Lvconvert --merge przywraca (wycofuje) zmiany za pomocą informacji migawki.
Vince
10

Ok, myślę, że wymyśliłem to po ponownym przeczytaniu HOWTO 3.8.

  • Migawki tylko do odczytu (jak LVM1) zawierają różnice na poziomie bloków po utworzeniu migawki - oryginał nadal ulega zmianie, ale migawka zachowuje reprezentację oryginału. Czytanie z tych migawek prezentuje dane wyglądał w tym czasie.
  • Migawki do odczytu i zapisu (domyślnie w LVM2) można zapisać na: są rozwidleniem oryginalnej partycji. Pisząc do tej migawce nie zmienia oryginalnego.

Sposób działania migawki to zestaw zmian na poziomie bloku w stosunku do oryginału. Tak więc, kiedy oryginał jest zapisywany, zdarzają się następujące rzeczy:

  1. Coś próbuje napisać do oryginału.
  2. Oryginał zostanie odczytany, a bloki z oryginału zostaną skopiowane do migawki.
  3. Oryginał ulega zmianie.
  4. Migawka zawiera „odwrotne różnice” - zmiany, które sprawiają, że oryginał wyglądał tak, jak podczas tworzenia migawki.

Tak więc wyrzucenie migawki w ogóle nie wpłynie na oryginał - ponieważ oryginał został zmieniony, a migawka zawierała tylko listę tych zmian.

Odpowiadając na moje pytanie:

Utwórz nową migawkę za pomocą LVM. Jeśli aktualizację można skonfigurować do zapisu w punkcie montowania migawki, użyj migawki R / W. W przeciwnym razie wystarczy RO lub R / W.

Następnie:

  • Jeśli zapisujesz do punktu montowania migawki R / W , zatwierdz , pisząc migawkę do oryginału, i cofnij , odrzucając migawkę.
  • Jeśli piszesz do pierwotnego punktu montowania, zatwierdzaj , wyrzucając migawkę, i powróć , pisząc z migawki do oryginału.

Nadal nie znalazłem narzędzia specjalnie do wykonania tego scalania - a biorąc pod uwagę, że mój scenariusz nie jest dokładnie zamierzonym zastosowaniem migawek, może nie być takiego. Brzmi jak praca dla rdiff.

Shewfig
źródło
Nie ma jeszcze dostępnego narzędzia do scalania LVM. To było w pracy, ale nie wierzę, że jest kompletne.
Ignacio Vazquez-Abrams
narzędzie do scalania już istnieje (przynajmniej w Ubuntu Trusty) - lvconvert --merge <snapshot-name>„przywróci” oryginalny dysk do tej migawki i usunie tę migawkę. Możesz oczywiście go szybko przywrócić.
dpb
3

LVM działa na poziomie bloku. Nawet „nie wie”, czym jest system plików. Nie można więc wykonywać migawek tylko niektórych katalogów, chyba że zamontowany jest tam system plików z innego wolumenu LVM.

Kiedy tworzysz migawkę LVM, faktycznie żądasz „kopiowania przy zapisie” duplikatu woluminu. Każdy blok, który zostałby zmieniony w migawkowym woluminie, zostanie najpierw zapisany w postaci niezmodyfikowanej. Aby więc „zatwierdzić zmiany”, nie trzeba nic robić. Wystarczy usunąć wolumin migawki.

Nie do końca wiem, jaki jest zalecany sposób „przywracania zmian”, ponieważ nigdy nie korzystałem z LVM w takim scenariuszu, ale wydaje mi się, że dobrze to gdzieś opisano w dokumentacji LVM. Cokolwiek to będzie, prawdopodobnie będziesz musiał ponownie uruchomić wszystko, co zostało zmienione, ponowne uruchomienie może być dobrym pomysłem.

Jacek Konieczny
źródło
2
  1. Nie ma powodu, aby niektóre łączyć . Wystarczy usunąć migawkę, źródło LV pozostanie zmienione
  2. Scalenie potrzebne do przywrócenia zmian lvconvert --merge <snapshot name>
  3. LVM współpracuje z urządzeniami blokowymi. Wszelkie zmiany związane z FS powinny być wykonywane przez specjalne narzędzia (xfs_growfs, e2fsck, ...) zgodnie z typem FS

Migawka „zamraża” oryginalny stan LV. Usuń migawkę oznacza zapomnienie tego stanu. Migawka scalania oznacza powrót do tego stanu

Ale w LVM zapisuje przepisane dane w migawce: upewnij się, że rozmiar migawki odpowiada oczekiwanej ilości zmian w LV i migawce

deman_killer
źródło
W rzeczywistości migawka niczego nie zamraża. Rejestruje zmiany w dodatkowym miejscu, aby można je było później przywrócić w razie potrzeby.
Vince
0

Dokumentacja jest myląca. Wydaje mi się, że lvcreate - micge oznacza cofnięcie wszystkich zmian, a lvremove oznacza zatwierdzenie zmian. Różnica polega na sposobie korzystania z niego.

W większości przypadków po prostu używasz migawki jako tylko do odczytu zamrożonej kopii woluminu na żywo, a wolumin na żywo ciągle się zmienia. W takim przypadku, jeśli scalisz, logicznie oznaczałoby to, że zamierzasz zastąpić wolumin na żywo zamrożoną kopią, lub innymi słowy, scalenie oznacza wycofanie zmian, a usunięcie oznacza zatwierdzenie zmian.

Jeśli piszesz do migawki (nowa opcja z LVM2), co wydaje się nie być zachowaniem domyślnym i prawdopodobnie wymaga zmiany konfiguracji gdzie indziej, aby aplikacje zapisywały migawkę zamiast oryginalnego woluminu, wówczas odwrotność byłaby prawdą.

Zachowaj ostrożność podczas obchodzenia się z migawkami, ponieważ niektóre osoby zakładają, że masz zamiar użyć ich w jeden sposób, i udzielają ci instrukcji, które mogą zniszczyć twój system, jeśli działasz z odwrotnym założeniem!

RedScourge
źródło
Piszesz do migawki po prostu montując migawkę; co jest montowane tam, gdzie ma niewiele wspólnego z domyślnymi ustawieniami LVM - nie przejmuje się tym, co dokładnie robisz z każdym woluminem logicznym, niezależnie od tego, czy jest to migawka, czy nie, po prostu śledzi, czy jest otwarty, czy nie.
Josip Rodin