Nie jestem do końca pewien, jak sformułować to pytanie (stąd kiepski tytuł), dlatego podaję przykład tego, co próbuję zrobić.
Na moim (starym) hoście Xen jestem w stanie przedstawić systemy plików LVM bezpośrednio każdemu gościowi. Te systemy plików są w rzeczywistości tworzone i formatowane na hoście i przekazywane bezpośrednio przez. Np. Dla jednego z moich hostów używających osobnych partycji tmp i swap definiuję pamięć masową w następujący sposób:
disk = [
'phy: / dev / vg1 / guest1-swap, sda1, w',
'phy: / dev / vg1 / guest1-disk, sda2, w',
'phy: / dev / vg1 / guest1-tmp, sda3 , w ',
]
Tak więc guest1-swap jest sformatowany jako partycja wymiany, guest1-disk i guest1-tmp są sformatowane przy pomocy ext4, a z perspektywy gościa po prostu widzi je jako trzy sformatowane partycje w / dev / sda.
(Może to zabrzmieć dużo pracy, ale istnieją skrypty obsługi, takie jak niesamowite narzędzia xen , które zautomatyzowały prawie wszystko).
Zapewnia to kilka naprawdę przydatnych funkcji, z których dwa jestem szczególnie zainteresowany opracowaniem KVM:
Podłącz systemy plików gościa z systemu operacyjnego hosta . Mogę wykonać montaż tylko do odczytu dowolnego systemu plików gościa w dowolnym momencie, nawet gdy gość jest uruchomiony. Ma to tę zaletę, że pozwala mi tworzyć migawki LVM dowolnego istniejącego woluminu podczas działania gościa. W ten sposób mogę centralnie wykonać kopię zapasową wszystkich moich gości podczas pracy z hosta.
Zmiana rozmiaru woluminu online . Ponieważ woluminy zawierają standardowe systemy plików Linuksa, mogę użyć kombinacji lvextend i resize2fs, aby rozwinąć systemy plików gości ponownie, gdy są one online.
Obecnie konfiguruję host KVM, który zastąpi host Xen. Podobnie do konfiguracji Xen wykorzystuję LVM, aby zapewnić bezpośredni dostęp do systemu plików, ale KVM / qemu zachowuje się inaczej, ponieważ zawsze tworzy plik obrazu dla gości, nawet na wolumenie LVM. Z punktu widzenia gościa traktuje to jako dysk niepodzielony na partycje i to od gościa można zastosować etykietę partycji, a następnie utworzyć partycje i systemy plików.
Z perspektywy gościa to w porządku, ale z perspektywy serwera / zarządzania wydaje się być znacznie mniej elastyczne niż konfiguracja Xen, którą opisałem. Nadal jestem nowy w KVM, więc mogę (mam nadzieję) coś przegapić.
Natknąłem się na ten problem, gdy próbowałem ponownie wdrożyć moje poprzednie rozwiązanie do tworzenia kopii zapasowych na hoście KVM, a polecenie mount zostało zablokowane, gdy próbowałem zamontować jeden z systemów plików gościa. Zajmowanie się tym jest moim aktualnym problemem, ale wzbudziło mnie również zaniepokojenie zmianą rozmiaru, ponieważ jestem pewien, że problem pojawi się w pewnym momencie.
Oto moje pytania:
Czy jest jakiś sposób, aby kvm / qemu korzystał bezpośrednio z systemów plików woluminu LVM, tak jak to opisano w mojej konfiguracji Xen? Używam libvirt do zarządzania, jeśli to robi różnicę.
Jeśli nie, co mogę zrobić, aby uzyskać podobną funkcjonalność montażu / tworzenia kopii zapasowych w KVM? Widziałem dyskusje na temat korzystania z libguestfs w / FUSE, aby to zrobić, ale czy to naprawdę najlepsza opcja? Wolałbym trzymać się natywnego montowania systemu plików, jeśli to w ogóle możliwe.
Jeśli nie, to czy można zmienić rozmiar systemu plików online w KVM? Znalazłem kilka dyskusji / poradników na ten temat, ale odpowiedzi wydają się być wszędzie, bez jasnych i zdecydowanie nieskomplikowanych rozwiązań.
Przepraszam za długi post, chciałem się tylko upewnić, że to jasne. Daj mi znać, czy mogę podać inne informacje, które byłyby pomocne. Czekamy na dyskusję. :-)
źródło
Odpowiedzi:
virt-*
narzędzi) może zapewnić dostęp do systemów plików gości w czystszy sposób niż cokolwiek, co ponownie podłączasz bezpośrednio do hosta, chociaż oba są możliwe.resize2fs
będzie działać na maszynie wirtualnej, podobnie jak na fizycznym sprzęcie, jedynym problemem jest ponowne wykrywanie zmian przez gościa. Spróbujvirt-resize
jako standardowe narzędzie, alelvresize
iqemu-img
mogą być łatwo wykorzystane (choć w trybie offline, co wymaga ponownego uruchomienia gość zazwyczaj).Myślę,
lvresize
zeresize2fs
faktycznie działają bez restartu gości, ale nie próbowałem tego jeszczeźródło
virsh
ale dość łatwyvirt-manager
. Bardziej poważne systemy, takie jak RHEV / oVirt, używają LVM przez cały czas do przechowywania danych w oparciu o FC / iSCSIattach-disk
do dynamicznego połączenia, ale nie jest to trwałe i nie mogę zmusić go do pracy dla /. Czy możesz wskazać na to dokumentację lub podać konkretne wskazówki? Dzięki!Korzystam z qemu-kvm + libvirt z dokładnie taką konfiguracją, o jaką pytasz, z podanych powodów, ale dodatkowo, ponieważ uzyskuję znacznie lepszą wydajność bez warstwy systemu plików hosta KVM w zakresie. Jeśli dodasz VG jako „pulę pamięci” w virt-manager, możesz tworzyć takie maszyny wirtualne za pomocą przyjaznego dla użytkownika kreatora. (Ale teraz piszę XML ręcznie, używając istniejącej maszyny wirtualnej jako szablonu).
Oto zdezynfekowane wyjście „virsh dumpxml” dla jednego z moich gości:
Kolejna myśl (niezwiązana z pytaniem, ale może pomóc): jeśli możesz, upewnij się, że używasz sterowników „parawirtualizowanych”, blokowych, losowych, zegarowych itp. - są one znacznie szybsze niż w pełni zwirtualizowane. To jest powyższe „model = virtio”. Musisz załadować moduły sterowników do jądra hosta, takie jak virtio_net.
Oto wynik „virsh pool-dumpxml vg1”:
źródło
virsh pool-dumpxml mypool
Nie znam sposobu na dokładne odtworzenie opisywanego zachowania Xen. Można jednak użyć
kpartx
do ujawnienia partycji w LV, która zawiera obraz całego dysku jako urządzenia blokowe na hoście, które można następnie zamontować itp.źródło
Zobacz moją odpowiedź na moje pytanie na ten temat w KVM uruchamiającym jądro poza obrazem i istniejącą partycję . Krótko mówiąc, uzyskanie virt-install do utworzenia konfiguracji jest dość proste, biorąc pod uwagę niewielką modyfikację guest / etc / fstab.
źródło