Zarządzanie migawkami LVM w LVM2

migawki LVM

zaczniemy teraz przyglądać się bardziej zaawansowanym tematom LVM2, a pierwszym z nich jest zarządzanie migawkami LVM. W następnym blogu przyjrzymy się Thin Provisioning w LVM. Migawki LVM są punktowymi kopiami woluminów logicznych LVM w czasie. Są one efektywne w przestrzeni, ponieważ zaczynają przechowywania żadnych danych, ale jak dane są chenged na źródle LV dane orignal jest zapisywany do objętości migawki LVM. Przypadki użycia obejmują:

  • kopie zapasowe: Same migawki LVM nie są wydajną kopią zapasową, ponieważ muszą być przechowywane w tej samej grupie woluminów. Migawki mogą być jednak używane do powiększania kopii zapasowych. Wystarczy utworzyć migawkę woluminu docelowego, a następnie wykonać kopię zapasową woluminu migawki, aby rozwiązać wszelkie problemy związane z współbieżnością plików podczas tworzenia kopii zapasowej. Migawka może zostać usunięta po zakończeniu procesu tworzenia kopii zapasowej
  • testuj i niszcz: migawki LVM są kopią do odczytu / zapisu oryginalnego LV. Możesz utworzyć migawki LVM z LV, które zawierają złożone Skrypty, zmienić ansd przetestować je tyle, ile chcesz, a następnie zniszczyć dane po zakończeniu. Wszystko bez wpływu na oryginalne Skrypty.
  • testowanie nowych wdrożeń oprogramowania: Instalacja nowej wersji oprogramowania może zawierać setki plików znajdujących się w wielu katalogach oprogramowania. Jeśli docelowa lokalizacja całego oprogramowania znajduje się na jednym woluminie logicznym LVM, możemy utworzyć migawkę przed aktualizacją oprogramowania. Jeśli po przetestowaniu oprogramowanie nie działa w pożądany sposób. Przywrócenie oryginalnego LV do migawki jest prostym zadaniem. Migawka, oczywiście, przechowuje kopię oryginalnego woluminu źródłowego w momencie, gdy migawka została wykonana.

kliknij poniższy link, aby pobrać “kompletny przewodnik po LVM2 w Linuksie”, kosztujący tylko £1.99! Po pobraniu ebooka można go wydrukować w razie potrzeby.

pobierz eBook

przygotowanie do utworzenia migawek LVM

migawka LVM musi zostać utworzona w tej samej grupie woluminów co źródłowa LV. Przy użyciu technologii Cow (Copy on Write) podstawowa pamięć masowa musi być taka sama. Umożliwienie odczytu niezmienionych danych w migawce z oryginalnego źródła LV. Nasza grupa woluminów jest pełna, więc usuniemy istniejący wolumin logiczny i odtworzymy go o mniejszy rozmiar. Będziemy również używać dwóch punktów montowania, / mnt / original i/mnt / snap.

po tej całej pracy wracamy do sytuacji, w której mamy nowo sformatowany wolumin logiczny, który nazwaliśmy lv1. Jest teraz zamontowany do /mnt / original w celu demonstracji. Stworzyliśmy lv1 przy 600 MiB pozostawiając 392 MiB wolnego miejsca w grupie woluminów vg1. Pamiętaj, że zajmujemy się tylko wolną przestrzenią w tej samej grupie woluminów co nasze woluminy logiczne. Migawkę należy utworzyć w tej samej grupie woluminów co źródłowy LV. jeśli sprawdzimy wyjście z polecenia vgs zobaczymy dostępną wolną przestrzeń:

# vgs VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 992.00m 392.00m vg2 2 0 0 wz--n- 192.00m 192.00m

to polecenie, jak widzieliśmy wcześniej, jest świetnym sposobem podsumowania grup woluminów. Aby móc utworzyć migawkę punktu w czasie woluminu logicznego, lv1, będziemy musieli dodać pewne dane. Po prostu skopiujemy plik / etc / services do/mnt / original.

 # cp /etc/services /mnt/original/ # wc -l /mnt/original/services 612 /mnt/original/services

możemy również zobaczyć, że ten plik, na moim serwerze Ubuntu, ma 612 linii. Teraz mamy dane, więc zaczynajmy.

tworzenie migawek LVM w LVM2

migawki LVM są w istocie prostymi woluminami logicznymi z dodatkowymi dodatkami. Tak więc, są one tworzone przy użyciu polecenia lvcreate i opcji-S. Musimy również określić wolumin źródłowy podczas tworzenia migawki.

 # lvcreate -L 12m -s /dev/vg1/lv1 -n lv1_snap Logical volume "lv1_snap" created.

z opcji polecenia widzimy, że najpierw określamy rozmiar na 12 MiB. Potrzebujemy tylko wystarczająco dużo miejsca, aby przechowywać zmiany, które wprowadzamy do źródła. Moglibyśmy wypełnić źródło LV z 600 MiB danych, ale jeśli tylko 12 MiB może się zmienić, to potrzebujemy tylko woluminu migawki 12 MiB. Rozmiar migawki dopasowujemy do rozmiaru zmian, które nastąpią. Opcja-S lub-snapshot określa wolumin źródłowy do migawki. Tak jak poprzednio opcja-N ustawia nazwę tworzonego przez nas LV.Migawka jest Odczyt / Zapis, więc można ją zamontować. Montujmy go do katalogu / mnt / snap:

# mount /dev/vg1/lv1_snap /mnt/snap/

będziemy mogli zobaczyć tę samą zawartość w obu katalogach, nawet jeśli nie nastąpiły żadne zmiany. LVM snapshots łączy się z oryginalnymi danymi, dopóki nie zostaną zmienione.

gdy spojrzymy na szczegóły zarówno źródła, jak i woluminu migawek, będzie to wyglądać nieco inaczej. Po pierwsze, wolumin lv1_snap. Migawka LV.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.36% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

możemy sobie przypomnieć, mam nadzieję, że tak, że stworzyliśmy to z rozmiarem 12 MiB. Rozmiar LV pokazuje jednak 600 MiB. Rozmiar, który widzimy, jest z oryginału lub źródła LV. rozmiar migawki pokazuje w wielkości tabeli krów. Kopiowanie przy zapisie następuje, gdy dane są zmieniane w źródle, a oryginalne dane są kopiowane na wolumin migawki. Wolumin migawek zawsze wyświetli oryginalne pliki migawek bez względu na to, czy zostały zmienione, czy nie. Podczas tworzenia migawki nie ma zmian krów do przechowywania, więc przydzielona wartość jest bardzo niska, aby rozpocząć i będzie rosła wraz ze zmianami w danych źródłowych. Kiedy spojrzymy na szczegóły wyświetlacza teraz dla lv1 LV, to też będzie trochę inaczej:

# lvdisplay /dev/vg1/lv1 --- Logical volume --- LV Path /dev/vg1/lv1 LV Name lv1 VG Name vg1 LV UUID dmVaWm-kA9V-xouM-OZBR-b7Id-aMUh-EWymB0 LV Write Access read/write LV Creation host, time yogi, 2017-08-21 18:51:57 +0000 LV snapshot status source of lv1_snap LV Status available # open 1 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0

widzimy, że jest to źródło migawki dla lv1_snap.

Zmiana danych migawki LVM

jeśli teraz dokonamy zmiany danych w woluminie źródłowym, zaczniemy dostrzegać różnicę w danych w woluminie migawki. Wolumin migawki będzie zawierał oryginalne dane, podczas gdy źródło LV będzie zawierało zmiany. Najpierw dodamy nowy plik do woluminu źródłowego:

# cp /etc/hosts /mnt/original/

możemy teraz zobaczyć, że zawartość różni się od źródła do woluminów snaphota

możemy również zobaczyć, że zaczynamy zużywać więcej miejsca w woluminie logicznym. Wracając do lvdisplay dla lv1_snap zobaczymy procent przypisany do migawki rosnący.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.98% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

mimo, że nie zmieniliśmy istniejących danych, dodanie nowych danych również wpłynie na migawkę, ponieważ wolumin migawki musi pokazywać dane tak, jak to było w momencie zrobienia migawki. Jeśli to konieczne, powinniśmy być w stanie przywrócić oryginał do danych snapshotted.

następnie nadpiszemy oryginalny plik / etc / services:

# > /mnt/original/services

plik / mnt / original / services będzie teraz pusty. Jeśli jednak sprawdzimy plik migawki, nadal będzie zawierał dane. Za pomocą polecenia wc możemy policzyć ilość wierszy w każdym pliku:

 # wc -l /mnt/original/services /mnt/snap/services 0 /mnt/original/services 612 /mnt/snap/services 612 total

oczywiście ponowne sprawdzenie wyjścia lvdisplay dla lv1_snap pokaże, że procent przypisany do migawki wzrósł wraz ze zmianą:

Allocated to snapshot 1.17%

zmiany woluminów dla migawek LVM

atrybuty zarówno dla źródeł, jak i migawek LVs ulegną zmianie po utworzeniu migawki. Możemy to zobaczyć szczegółowo za pomocą polecenia lvdisplay, ale jest lepiej podsumowane poleceniem lvs:

Istnieje 10 atrybutów, które czytamy od lewej do prawej:

dla lv1 atrybuty odczytane są od lewej do prawej:

:

  • Typ Woluminu: Pochodzenie. Źródło migawki
  • uprawnienia: zapisywalne
  • Polityka alokacji: dziedziczona z grupy woluminów
  • nie jest ustawiona stała liczba podrzędna
  • stan: jest oznaczony jako aktywny
  • urządzenie: jest otwarte lub zamontowane
  • typ docelowy: Migawka, tzn. 1844>

dla Lv1_snap odczytano atrybuty:

  • Typ woluminu: Migawka wolumin
  • uprawnienia: zapisywalne
  • zasady alokacji: Odziedziczony z grupy woluminów
  • nie jest ustawiony stały numer podrzędny
  • stan: jest oznaczony jako aktywny
  • urządzenie: jest otwarte lub zamontowane
  • typ docelowy: Migawka, tzn. bierze udział w migawce

Oryginalne i docelowe LV muszą znajdować się w tej samej grupie woluminów, o której już wspomnieliśmy, ale wygrały niekoniecznie współdzielić te same urządzenia w ramach tych grup woluminów. Jest to zwykle pobierane od nas, ale możemy dodać opcję do komendy lvs:

dodanie opcji-o dla options i + devices pokaże podstawowe urządzenia, które tworzą LV. widzimy, że lv1 jest większy niż /dev/sdc1 lub /dev/sdc2 i jest rozciągnięty na oba. Natomiast vg1_snap może wykorzystać pozostałą przestrzeń w /dev / sdc2. Liczba w nawiasach po nazwie urządzenia wskazuje fizyczny numer zakresu, od którego LV rozpoczyna się od urządzenia. Widzimy, że lv1 zaczyna się od zakresu 0 dla /dev/sdc1 i /dev/sdc2, a lv1_snap zaczyna się od zakresu 26 dla /dev/sdc2. Aby zobaczyć wszystkie dostępne opcje z opcją –o, użyj polecenia:

# lvs -o help

ponieważ lista jest obszerna, nie uwzględniliśmy wyjścia.

oprócz bezpośredniego przeglądania woluminów logicznych możemy również użyć polecenia lsblk. Tutaj zobaczymy więcej zmian, niż być może myślisz:

 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 100M 0 loop sdb 8:16 0 256M 0 disk loop0 7:0 0 100M 0 loop sdc 8:32 0 1000M 0 disk ├─sdc2 8:34 0 500M 0 part │ ├─vg1-lv1-real 252:1 0 600M 0 lvm │ │ ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original │ │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap │ └─vg1-lv1_snap-cow 252:2 0 12M 0 lvm │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap └─sdc1 8:33 0 499M 0 part └─vg1-lv1-real 252:1 0 600M 0 lvm ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap sda 8:0 0 9.8G 0 disk /

znamy już urządzenie vg1-lv1 i urządzenia VG1-lv1_snap. To były podstawowe LV, z którymi pracowaliśmy. Główny numer jądra lub sterownik używany z LVM2 to 252. Widzimy to dla wszystkich LVs, które mamy na miejscu. Pierwszym LV był vg1-lv1, więc to ma mniejszą liczbę 0. Kiedy jednak spojrzymy na vg1-lv1_snap, ma to niewielką liczbę 3, co oznacza, że jest to 4. LV, a nie 2., Jak możemy się spodziewać. Zamiast tego dla migawki tworzone są dwa LV wrapper, vg1-lv1-real i vg1-lv1_snap-cow. Są one zarządzane wewnętrznie i nie angażujemy się w te obiekty, których LVM2 używa do zarządzania procesem snapshottingu. Każdy LV, który tutaj widzimy, ma również odpowiednie urządzenie devmapper. Jeśli podamy katalog / dev i filer na dm – * możemy je pokazać.

# ls /dev/dm-* /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3

ponownie. widzimy 4 urządzenia, a nie tylko 2, których mogliśmy się spodziewać. Tak więc w tle LVM2 dużo za nas zarządza i daje nam dostęp tylko do tych elementów, których potrzebujemy.

Przywracanie woluminu do migawki

scenariusz odzyskiwania z migawkami LVM pozwala nam powrócić do migawki.Jeśli okaże się, że musimy przywrócić oryginalny LV do punktu w migawce czasu, możemy to zrobić. Pamiętaj, że migawka będzie reprezentacją oryginalnego woluminu w momencie migawki. Możemy to zrobić po przetestowaniu aktualizacji oprogramowania i podjęciu decyzji o przywróceniu migawki, która powinna zostać podjęta przed procesem aktualizacji oprogramowania. Aby upewnić się, że widzimy to w czasie rzeczywistym, najpierw odmontujemy oba LV:

# umount /mnt/{original,snap}

jeśli nie zamkniemy urządzeń, będziemy musieli poczekać, aż oryginalny LV, vg1 zostanie następnie aktywowany. Często jest to po ponownym uruchomieniu. Gdy woluminy logiczne są teraz odmontowane i zamknięte, używamy polecenia lvconvert, aby scalić migawkę z rodzicem lub źródłem. Spowoduje to przywrócenie woluminu logicznego źródłowego do zawartości migawki. Migawka jest automatycznie usuwana po zakończeniu procesu.

# lvconvert --merge /dev/vg1/lv1_snap Merging of volume lv1_snap started. lv1: Merged: 99.2% lv1: Merged: 100.0%

w zależności od wielkości scalanych danych i szybkości dysków możliwe jest, że może to zająć trochę czasu. Użyj opcji-b, aby wykonać tło procesu.

jeśli teraz montujemy lv1 ponownie i sprawdzamy zawartość. Będzie nam brakować pliku hosts, który został dodany po zrobieniu migawki. Plik usług mamy teraz zawartość, którą nadrobiliśmy.

 # mount /dev/vg1/lv1 /mnt/original/ # ls /mnt/original/ lost+found services # wc -l /mnt/original/services 612 /mnt/original/services

Testowanie i rozwój

innym zastosowaniem migawek LVM jest środowisko testowe. Jeśli wolisz pracować bezpośrednio z danymi snapshotted, możesz to zrobić. Po zakończeniu wystarczy odmontować migawkę LV i usunąć ją. Pierwotny LV pozostaje niezmieniony. Jest to świetne miejsce, w którym chcesz pracować nad skryptami bez wpływania na oryginalne Skrypty produkcyjne.

Proces jest prawie taki sam, ale pracujemy teraz tylko z katalogiem /mnt/snap. Poniżej zestawienie komend:

rozszerzenie rozmiaru migawki

kiedy tworzymy wolumin migawki, powinniśmy ustawić rozmiar, który uważamy za odpowiedni do przechowywania wszystkich zmian wprowadzonych w oryginalnym LV, gdy migawka jest na miejscu. W razie potrzeby możliwe jest jednak automatyczne rozszerzenie woluminu migawek.

ważne jest, aby pamiętać, że jeśli migawka wypełnia się całkowicie, migawka jest automatycznie usuwana.

domyślne ustawienia nie pozwalają automatycznie powiększać migawek. Musimy to umożliwić. Konfiguracja LVM2 znajduje się w/etc/LVM / lvm.conf. Jeśli szukamy skutecznych ustawień za pomocą grep:

 # grep -E '^\s*snapshot_auto' /etc/lvm/lvm.conf snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20

ustawienie snapshot_autoextend_threshold na 100% oznacza, że migawka nigdy nie będzie rosła. Jak tylko osiągniemy próg 100% migawka jest usuwana. Jeśli chcemy włączyć autoextend, rozważ ustawienie tego na coś w rodzaju 70. W takim przypadku, gdy migawka stanie się pełna o 70%, Rozmiar zostanie zwiększony. Wielkość wzrostu kontrolowanego przez snapshot_autoexend_percent. Wartość domyślna jest ustawiona na 20%, co oznacza, że rozmiar będzie zwiększał się o 20% bieżącego rozmiaru za każdym razem, gdy wymagany jest wzrost.

Write a Comment

Twój adres e-mail nie zostanie opublikowany.