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ć.
Jak zatwierdzę zmiany, scalając je z powrotem w oryginalną partycję?
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?
Czy możliwe jest tworzenie migawek tylko niektórych katalogów na partycji, czy jest to operacja obejmująca całą partycję?
dmsetup targets
powinien pokazywać scalanie migawek, jeśli tak jest w przypadku polecenia scalania zastosowanego do migawki-lv powróci do stanu, w którym wykonano migawkę.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):
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
Jeśli chcesz usunąć aktualizację, po prostu uruchom (ze starego systemu)
Jeśli chcesz zatwierdzić zmiany, po prostu uruchom (ze starego systemu)
lub z nowego systemu
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.
źródło
Ok, myślę, że wymyśliłem to po ponownym przeczytaniu HOWTO 3.8.
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:
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:
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.
źródło
lvconvert --merge <snapshot-name>
„przywróci” oryginalny dysk do tej migawki i usunie tę migawkę. Możesz oczywiście go szybko przywrócić.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.
źródło
lvconvert --merge <snapshot name>
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
źródło
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!
źródło