Czy zmiana rozmiaru dysku online jest możliwa w KVM?

15

Oceniamy wirtualizację KVM dla Linuksa w kilku projektach. Jak dotąd wszystko idzie dobrze. Ale jednym z naszych wymagań jest możliwość dodania miejsca na dysku do działającego gościa bez ponownego uruchamiania lub przełączania go w tryb offline. Czy jest to możliwe dzięki KVM?

Jedyną rzeczą, którą do tej pory znalazłem (ale jeszcze nie testowałem), jest możliwość podłączenia dysków do komputera podczas pracy. Jeśli wybiorę tę trasę, zawsze będę mógł dodać nowy dysk do grupy woluminów LVM na gościu, a następnie rozszerzyć wybrany wolumin logiczny. Największym minusem tego podejścia jest to, że z czasem możemy skończyć z gośćmi o zmiennej liczbie dysków wirtualnych. „Rzeczywista” przestrzeń dyskowa byłaby udostępniana hostowi za pośrednictwem sieci SAN, dzięki czemu zawsze możemy dodać do hosta więcej miejsca.

Eil
źródło
(I „Tak”, to możliwe.)
poige

Odpowiedzi:

4

Myślę, że utkniesz, robiąc to, o czym wspomniałeś, jeśli chcesz to zrobić bez zdejmowania maszyny.

Dlaczego po prostu nie dać LUN-ów maszyn wirtualnych bezpośrednio z SAN i zarządzać tam dostępną przestrzenią? Działa to lepiej, jeśli mimo wszystko chcesz korzystać z funkcji takich jak migracja na żywo.

KVM jest oparty na QEMU, więc cała obsługa formatu obrazu pochodzi z tego projektu. Oto dobry poradnik dotyczący zmiany rozmiaru różnych formatów obsługiwanych przez Qemu / KVM. Ale forum Qemu byłoby dobrym miejscem do zadawania tego pytania, jeśli nie uzyskasz tutaj solidnych odpowiedzi.

Inną opcją, która może nie być idealna, jest użycie naprawdę dużego qcow2 lub innego rzadkiego formatu obrazu dla dysków. Możesz więc dać każdej maszynie mały dysk dla systemu operacyjnego i duży rzadki obraz dla danych w LVM. Pozwoliłoby to przynajmniej utrzymać liczbę wirtualnych napędów / obrazów, którymi musisz zarządzać. Ale to cienkie przydzielanie może być problemem, jeśli zrobisz to na 1000 komputerów i wszyscy zabiorą cię na wolne miejsce, które widzą.

XEN Uważam, że ma obecnie takie same ograniczenia.

3dinfluence
źródło
Przy dalszym rozważaniu, montaż pamięci SAN z poziomu samego gościa, jak wspomniałeś, jest prawdopodobnie dobrym rozwiązaniem. I dzięki za dodatkowe informacje.
Eil
cienkie przydzielanie może być również kosztowne z powodu fragmentacji.
wazoox
15

Wiem, że to stare pytanie, ale znalazłem je podczas szukania rozwiązania i mam nadzieję, że może pomóc komuś innemu.

Na dzień dzisiejszy nie jest możliwe, aby zmienić rozmiar dysku twardego na komputerze. Znalazłem tutaj sposób działania:

https://bugzilla.redhat.com/show_bug.cgi?id=648594

Należy wykonać następujące kroki:

  1. Znajdź nazwę pliku i nazwę urządzenia KVM dysku twardego, którego rozmiar chcesz zmienić:

    root@vhstage02:/data# virsh dumpxml test | xpath -e /domain/devices/disk
    Found 2 nodes in stdin:
    -- NODE --
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" />
      <source file="/data/test.img" />
      <backingStore />
      <target dev="vda" bus="virtio" />
      <alias name="virtio-disk0" />
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
    </disk>
    -- NODE --
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw" />
      <source file="/data/images/debian-8.2.0-amd64-netinst.iso" />
      <backingStore />
      <target dev="hda" bus="ide" />
      <readonly />
      <alias name="ide0-1-1" />
      <address type="drive" controller="0" bus="1" target="0" unit="1" />
    </disk>
    

Interesujący dla nas jest dysk. Powinieneś szukać sourcei aliasbloków. Dla mnie nazwa pliku to test.imgi alias virtio-disk0. Do tej nazwy musisz się przyłączyć, drive-aby uzyskać nazwę dysku qemu.

  1. Teraz faktycznie zmieniamy rozmiar dysku za pomocą monitora qemu:

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    

Zauważ, że nazwa pliku została użyta bez rozszerzenia .img, a dysk został dodany do aliasu dysku. 100G to wynikowy rozmiar dysku, który chcemy mieć

  1. Zaloguj się do urządzenia i sprawdź, czy rzeczywisty rozmiar został zmieniony:

    root@test:~# fdisk -l
    
    Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x7e6e7f71
    
    Device     Boot  Start       End   Sectors  Size Id Type
    /dev/vda1  *      2048    499711    497664  243M 83 Linux
    /dev/vda2       501758 167770111 167268354 79.8G  5 Extended
    /dev/vda5       501760 167770111 167268352 79.8G 8e Linux LVM
    

Otóż ​​to! Teraz możesz tworzyć nowe partycje lub zmieniać rozmiar istniejących.

alexK
źródło
1
Dziękujemy za powrót i dodanie tej odpowiedzi! Sprawia, że ​​rzeczy są o wiele prostsze niż stary sposób robienia tego.
Dave Sherohman
4

AFAIK, nie jest to możliwe - możesz dodać nowe obrazy dysków, a jak zauważyłeś, możesz również dodać nowe obrazy do woluminu LVM, ale aby zmienić rozmiar aktywnego obrazu dysku rozruchowego, musisz móc go zamknąć i edytuj partycje.

Oto dobre wyjaśnienie powiększania obrazu. Chociaż wymaga to wyłączenia, prawdopodobnie możesz uciec z zaledwie kilkoma minutami przestoju, szczególnie jeśli unikniesz opcji --nonsparse image i dodasz dysk partycjonowany do pliku ISO i wcześniej zamontujesz gościa KVM. Mam nadzieję że to pomoże.

nedm
źródło
2
Problem nie jest związany z KVM; w systemie Linux po prostu nie można zmienić rozmiaru dysku, z którego uruchomiono system. Dotyczy to również fizycznych macierzy RAID.
wazoox
3

Możliwe jest przenoszenie systemu Linux między dyskami podczas jego działania. Ograniczeniem jest to, że nie można zmieniać partycji na dysku, który ma używane partycje .

Aby to zrobić, główny system plików musi znajdować się na LVM, co często oznacza, że ​​musisz mieć oddzielny system plików rozruchu (nie jest to jednak konieczne, to po prostu ułatwia)

Po podłączeniu nowego dysku dodajesz go do LVM za pomocą vgextend, użyj pvmove, aby przenieść rootfs na nowy dysk, użyj lvextend i resize2fs, aby odpowiednio powiększyć wolumin logiczny i system plików, a następnie użyj vgreduce, aby usunąć stary dysk z woluminu Grupa. Po usunięciu stary wolumin można odłączyć.

W prostym przypadku masz mały dysk na system plików rozruchowych, którego nigdy nie musisz dotykać. Ale jeśli jest sam, łatwo go odmontować, odłączyć, podłączyć nowy i odbudować dysk rozruchowy bez zatrzymywania systemu. (po prostu nie upaść, gdy to robisz)

Uwaga: resize2fs może również zmniejszać systemy plików.

Robert
źródło
0

Nie jest to możliwe, ale afaik to funkcja w fazie rozwoju. Zamiast tego możesz połączyć się z celem maszyny wirtualnej iSCSI i zarządzać miejscem w tym celu po stronie SAN.

dyasny
źródło
Nie odpowiedziałeś na pytanie odpowiedzią, której może użyć.
Mei
@David: a co sprawia, że ​​tak myślisz, a nawet głosujesz za moją odpowiedzią? W jaki sposób moja odpowiedź nie zawiera obejścia omawianego problemu?
dyasny
Powiedziałeś „Nie jest możliwe bankomat ...”, a następnie powiedziałeś mu o funkcji, która w tej chwili nie jest możliwa. (Teraz, prawie dwa lata później, może być inaczej - ale ta odpowiedź tego nie mówi.)
Mei
1
Więc dwa lata temu powinienem był powiedzieć mu, że „będzie to możliwe za dwa lata”? Czy wyglądam ci jak prorok? W tamtym czasie hotplugging był w fazie rozwoju i dokładnie to powiedziałem. Potem zaproponowałem inne podejście do przyłączenia pamięci do maszyny wirtualnej, które byłoby niezależne od całego zestawu funkcji qemu. Nigdy nie stwierdził, że to jedyne podejście, ale jest sposób.
dyasny
Rozumiem teraz ... Zredagowałem twoją odpowiedź, aby lepiej pokazać twoje zamiary.
Mei