KVM Jak zwiększyć / zmniejszyć rozmiar dysku maszyny wirtualnej?

W tym artykule porozmawiamy o zmianie rozmiaru dysków maszyny wirtualnej KVM, rozważmy użyte formaty dysków wirtualnych. Pokażemy, jak prawidłowo zwiększyć dysk maszyny wirtualnej w hiperwizorze KVM w systemie Linux bez utraty danych, a także omówimy opcje zmniejszania rozmiarów dysków.

Treść

  • Zwiększenie napędu wirtualnej maszyny KVM
  • Jak zmniejszyć rozmiar dysku wirtualnego w KVM?

Zwiększenie napędu wirtualnej maszyny KVM

Rozszerzenie dysku wirtualnego KVM

Aby pracować z dyskiem, maszyna wirtualna musi być wyłączona, w przeciwnym razie nie będziemy w stanie nic zrobić. Rozważ przykład wzrostu dysku, którego pierwotny rozmiar wynosił 20 GB.

Aby wyświetlić parametry dysku maszyny wirtualnej KVM, użyj polecenia:

qemu-img info / drive_path

Dane wyjściowe polecenia będą wyglądać mniej więcej tak:

Widzimy, że mamy dwa pola wskazujące rozmiar, są to rozmiar_wirtualny i rozmiar_dysku:

  • rozmiar_wirtualny - rozmiar dysku wirtualnego określony podczas tworzenia lub rozszerzania dysku (w tym przykładzie maksymalny rozmiar dysku to 20 GB);
  • disk_size - aktualny rozmiar pliku dysku, tj. ile miejsca na dysku jest aktualnie zajęte na fizycznym serwerze (dotyczy tylko formatu qcow). W naszym przykładzie dysk wirtualny zajmuje tylko 1,6 GB przestrzeni dyskowej.

I od razu o formatach. Podczas tworzenia maszyn wirtualnych na KVM zalecam używanie formatu dysku qcow2 zamiast surowego. Później wyjaśnię dlaczego.

Następnym krokiem jest rozszerzenie dysku maszyny wirtualnej o 5 Gb (w celu prawidłowego rozszerzenia dysku maszyna wirtualna nie powinna mieć migawek!).
# qemu-img zmiana rozmiaru / ścieżka dysku + 5G

Obraz został przeskalowany.

Jeśli natychmiast sprawdzimy dane wyjściowe informacji o obrazie dysku, zobaczymy, że został on rozszerzony:

# qemu-img info / drive_path

image: / ścieżka_dysku format pliku: qcow2 rozmiar wirtualny: 25G (26843545600 bajtów) rozmiar dysku: 1,6G rozmiar_klastra: 65536 Informacje specyficzne dla formatu: zgodność: 0,10 bitów przeliczeniowych: 16 

Wykonaliśmy część pracy, ale wymaga ona również pracy z maszyny wirtualnej w systemie-gościu. Następnie pokażemy, jak zwiększyć rozmiar dysku w gościu CentOS 7 i Windows Server 2012..

Jeśli planujesz dodać dodatkowy dysk wirtualny dla maszyn wirtualnych w hiperwizorze KVM, używane są qemu-img i virsh.

Rozszerzenie partycji na maszynie wirtualnej Linux CentOS

Po rozszerzeniu dysku od strony serwera musisz uruchomić maszynę wirtualną i połączyć się z nią przez ssh. Wszystkie prace zostaną przeprowadzone przy użyciu narzędzia do zarządzania partycjami dysku twardego. fdisk.

Po połączeniu z serwerem sprawdzamy dostępność naszego dodatkowo podłączonego miejsca:

df -h
fdisk -l

Zrzut ekranu pokazuje, że sekcja / dev / vda2 ma rozmiar 20 GB i mamy więcej dostępnego miejsca na dysku.

Naprawmy ten moment i rozwiń sekcję / dev / vda2 do maksymalnego rozmiaru:

# fdisk / dev / vda

Witamy w fdisk (util-linux 2.23.2). Zmiany pozostaną tylko w pamięci, dopóki nie zdecydujesz się ich zapisać. Zachowaj ostrożność przed użyciem polecenia zapisu. Polecenie (m dla pomocy): d Numer partycji (1,2, domyślnie 2): Partycja 2 zostaje usunięta Polecenie (m dla pomocy): n Typ partycji: p główny (1 podstawowy, 0 rozszerzony, 3 wolny) e rozszerzony Wybierz (domyślnie p): p Numer partycji (2-4, domyślnie 2): Pierwszy sektor (1050624-52428799, domyślnie 1050624): Używanie wartości domyślnej 1050624 Ostatni sektor, + sektory lub + rozmiar K, M, G (1050624-52428799, domyślnie 52428799): Przy użyciu wartości domyślnej 52428799 Dla partycji 2 typu Linux i rozmiaru 24,5 GiB ustawiono polecenie (m dla pomocy): w Tabela partycji została zmieniona! Wywołanie ioctl () w celu ponownego odczytania tablicy partycji. OSTRZEŻENIE: Ponowne czytanie tabeli partycji nie powiodło się z powodu błędu 16: Urządzenie lub zasób zajęte. Jądro nadal korzysta ze starej tabeli. Nowa tabela będzie używana przy następnym restarcie lub po uruchomieniu partprobe (8) lub kpartx (8) Synchronizowanie dysków. 

Następnie musimy zrestartować maszynę wirtualną i wykonać polecenie, aby zastosować rozszerzenie dysku:

# xfs_growfs / dev / vda2

metadane = / dev / vda2 isize = 512 agcount = 4, agsize = 1277888 blks = sektsz = 512 attr = 2, projid32bit = 1 = crc = 1 finobt = 0 spinodes = 0 data = bsize = 4096 bloków = 5111552, imaxpct = 25 = sunit = 0 swidth = 0 nazywania blks = wersja 2 bsize = 4096 ascii-ci = 0 ftype = 1 log = wewnętrzny bsize = 4096 bloków = 2560, wersja = 2 = sektsz = 512 sunit = 0 blks, leniwa liczba = 1 w czasie rzeczywistym = brak extsz = 4096 bloków = 0, rtextents = 0 bloków danych zmieniono z 5111552 na 6422272 

# df -h

Używany system plików Dostępny Wykorzystanie% Zamontowany na devtmpfs 485M 0 485M 0% / dev tmpfs 496M 0 496M 0% / dev / shm tmpfs 496M 6,6M 489M 2% / run tmpfs 496M 0 496M 0% / sys / fs / cgroup / dev / vda2 25G 1.3G 24G 6% / / dev / vda1 488M 100M 353M 23% / boot tmpfs 100M 0 100M 0% / run / user / 0 

W rezultacie otrzymaliśmy partycję rozszerzoną / dev / vda2. Teraz, co dokładnie zrobiliśmy:

  • fdisk / dev / vda - uruchomiłem narzędzie fdisk, łącząc się z sekcją / dev / vda
  • / d - usuń sekcję, domyślnie potrzebujemy sekcji 2, więc w następnym akapicie po prostu naciśnij Enter
  • / n - utwórz nową sekcję, w następnym akapicie po prostu naciśnij Enter lub wpisz p, Następnie wprowadź, ponieważ utworzona sekcja będzie domyślnie ustawiona na 2.
  • Podczas określania pierwszego i ostatniego sektora, po prostu naciśnij Enter, jeśli chcemy rozwinąć sekcję do maksimum, jeśli chcesz określić konkretny rozmiar, w ostatnim sektorze określ rozmiar dysku, jak wskazano w menu + rozmiar K, M, G Rozmiar nie może być mniej niż wcześniej!
  • / w - zastosuj nasze ustawienia.

Po ponownym uruchomieniu sprawdź dysk za pomocą polecenia:

xfs_growfs / dev / vda2

Niektóre źródła wskazują polecenie wykonania tej procedury:

resize2fs / dev / vda2

Ale to nie działa z systemem plików XFS!

Prace związane z rozszerzaniem dysku na maszynie wirtualnej CentOS 7 zostały zakończone.

Rozszerzenie dysku w systemie Windows Server gościa

Łączymy się z maszyną wirtualną za pomocą rdp lub VNC i wykonujemy prace nad rozszerzeniem dysku.

  1. Otwórz Menedżera serwera -> Narzędzia -> Zarządzanie komputerem;
  2. W oknie, które zostanie otwarte, wybierz z menu Zarządzanie dyskami, po czym powinieneś zobaczyć wszystkie dyski i nieprzydzielone miejsce, które dodaliśmy z hiperwizora KVM;
  3. Wybierz żądany dysk i kliknij Extended Volume;
  4. Domyślnie całe dostępne miejsce będzie oferowane w celu zwiększenia rozmiaru dysku;
  5. Kliknij „Dalej” i uzupełnij rozszerzenie. Po tej procedurze Twoja sekcja w systemie będzie musiała się rozwinąć;

Chciałbym dodać, że przed procedurą rozszerzenia dysku dla maszyny wirtualnej radzę wykonać kopię zapasową samego dysku. Zatrzymaj maszynę wirtualną i skopiuj obraz dysku do katalogu kopii zapasowej lub do dowolnego katalogu, w którym jest wolne miejsce. Jeśli podczas pracy coś pójdzie nie tak, zawsze możesz zwrócić obraz dysku wirtualnego z kopii zapasowej.

Jak zmniejszyć rozmiar dysku wirtualnego w KVM?

W mojej pracy wcześniej często napotykałem ten problem, ale niestety nie można bezpiecznie zmniejszyć dysku na maszynie wirtualnej w KVM! Jedynym dopuszczalnym rozmiarem zmniejszenia rozmiaru dysku maszyny wirtualnej KVM w pamięci fizycznej jest kompresja poprzez konwersję.

Istnieje wiele artykułów w Internecie, które prawdopodobnie pozwalają zmniejszyć rozmiar dysku na maszynie wirtualnej, ale to nie działa.

Podam kilka przykładów, na które natknąłem się i które osobiście sprawdziłem.

Zmniejszanie dysku KVM za pomocą narzędzia qemu

Wiele zasobów opisuje czynności wykonywane przy użyciu narzędzia qemu. Sugerują zmniejszenie rozmiaru dysku maszyny wirtualnej za pomocą polecenia:

qemu-img resize / drive_path -5G - zmniejsz dysk o 5G

Lub ta opcja o określonym rozmiarze:

qemu-img resize / 25G drive_path - wskaż rozmiar dysku w 25G

Co dzieje się po wykonaniu tego polecenia? Uruchamiamy serwer i oczywiście system nie uruchamia się:

Próbowałem najpierw zmniejszyć partycję spod systemu za pomocą narzędzia fdisk, ale w tym przypadku system również przestaje się ładować, nawet jeśli pominiesz krok zmniejszania dysku z serwera fizycznego i jest to logiczne. Sekcja, którą redukujemy, system i odpowiednio system operacyjny, przestaje się ładować, ponieważ gdy dysk zostanie zmniejszony, informacje są najwyraźniej zniszczone.

Zmniejszanie wirtualnego dysku z zastępowaniem obrazu

Już nie taka powszechna opcja w instrukcjach - zmniejsza to dysk, zastępując stary. Oznacza to, że tworzysz nową maszynę wirtualną o wymaganym rozmiarze dysku. Następnie zastąp stary obraz dysku nowym obrazem i to na podstawie opisu artykułów z różnych źródeł. Zrobiłem również sprawdzenie i to zepsuło system plików, podobnie jak w pierwszej wersji. Dam przykładowe polecenie:

virt-resize / old_drive_ image / new_drive_image

Podano również opcje, konwertując dysk z formatu raw na format qcow2, ALE początkowo tworzę maszyny w tym formacie i wyjaśniam, dlaczego.

Formaty dysków KVM i kompresja dysku w formacie qcow2

Na samym początku artykułu wspomniałem o tych dwóch formatach.

surowy - przetłumaczone jako „surowe”. Zaleta formatu, maksymalna wydajność, wszechstronność formatu. Wady masy, główne to:

  • Dysk zajmuje całe miejsce na fizycznym serwerze, który został mu przydzielony;
  • Nie można tworzyć migawek.

Qcow2 - Jest to natywny format hypervisor QEMU, a także QEMU-KVM. Jest to najwygodniejszy format dysku wirtualnego ze wszystkich obsługiwanych w KVM. Obraz dysku zwiększa się w miarę gromadzenia danych na maszynie wirtualnej, obsługiwane są migawki.

Do czego służy format qcow2? Zasadniczo nie trzeba zmniejszać rozmiaru dysku wirtualnego, ponieważ dysk zajmuje serwer, dokładnie tyle miejsca jest tam zajmowane. Jeśli twoje dane na serwerze są ciągle nadpisywane i czasami zdarza się, że dysk jest „spuchnięty”, możesz go łatwo skompresować. Rozważ tę opcję. Wyzeruję trochę miejsca na dysku, a następnie usunę plik:

dd if = / dev / zero of = / mytempfile
rm -rf / mytempfile

Podczas sprawdzania z serwera obraz dysku ważył najpierw 2,4G, a następnie rozszerzył do 5,9G:

# du -sh / ścieżka_obrazu

2.4G *****

# du -sh / ścieżka_obrazu

5,9G *****

Oznacza to, że po usunięciu informacji z maszyny wirtualnej dysk nie został ponownie skompresowany. Aby plik dysku uzyskał rzeczywisty rozmiar, używam następującej metody:

Wykonujemy kopię zapasową pliku dysku, zatrzymujemy maszynę wirtualną, a następnie wykonujemy następujące czynności:

qemu-img convert -O qcow2 / old_image / new_image

Następnie możesz sprawdzić rozmiary dwóch dysków:

# du -sh / new_drive

1,6G / ****

# du -sh / old_disk

5,8G / ****

Jak widać, rozmiar skompresowanego dysku wynosi 1,6G. Zmień nazwę nowego obrazu dysku na potrzebny nam i uruchom maszynę wirtualną:

# df -h

Używany system plików Dostępny Wykorzystanie% Zamontowany na devtmpfs 485M 0 485M 0% / dev tmpfs 496M 0 496M 0% / dev / shm tmpfs 496M 6,6M 489M 2% / run tmpfs 496M 0 496M 0% / sys / fs / cgroup / dev / vda2 25G 1.3G 24G 6% / / dev / vda1 488M 100M 353M 23% / boot tmpfs 100M 0 100M 0% / run / user / 0 

Weryfikacja z serwera:

# du -sh / obraz dysku

1,6G / ****

Metoda działa. Przez cały czas użytkowania system plików na maszynie wirtualnej nigdy nie umarł. Ale zdecydowanie zalecamy, aby przed taką pracą utworzyć kopię dysku, jeśli nie chcesz stracić danych.

To wszystko, co chciałem powiedzieć w tym artykule. Jeśli jeden z odwiedzających witrynę ma działający sposób na zmniejszenie dysku w KVM, a mianowicie redukcję (bez kompresji) i działający, zaoferuj własne opcje, a ja na pewno je przetestuję.