Jeśli chcesz uruchamiać maszyny wirtualne na systemie Linux, prawdopodobnie będziesz korzystać z libvirt. Używam go regularnie, zwłaszcza do testowania tych postów na blogu w czystym środowisku. libvirt zapewnia wspólny interfejs dla różnych narzędzi do zarządzania maszynami wirtualnymi. Oferuje nie tylko funkcje zarządzania gośćmi, ale także zarządzanie siecią i pamięcią masową. Standardowy schemat XML czyni konfigurację mocną i wszechstronną. Na Linuxie libvirt zazwyczaj wykorzystuje KVM, warstwę wirtualizacji w jądrze, oraz QEMU, emulator maszyn i wirtualizator.
Poradnik
Ten poradnik opisuje kroki niezbędne do sprawdzenia, czy system obsługuje wirtualizację sprzętową, oraz instalacji libvirt na systemie elementary OS 7.1. Większość tych kroków jest taka sama dla Ubuntu 20.04. Uwzględnia on specjalne kwestie dotyczące systemów korzystających z systemu plików Btrfs. Znajdziesz tu również krótki rozdział o instalacji interfejsu graficznego do libvirt, virt-manager. Zakłada się, że potrafisz instalować oprogramowanie na Ubuntu, korzystać z wiersza poleceń i systemu plików Btrfs.
Sprawdzanie systemu
- Sprawdź, czy system obsługuje wirtualizację sprzętową:
egrep -c '(vmx|svm)' /proc/cpuinfo
Jeśli wynik jest większy od zera, Twój procesor obsługuje wirtualizację.
- Zainstaluj narzędzie do sprawdzania zgodności procesora z KVM:
sudo apt -y install cpu-checker
- Zweryfikuj, czy system obsługuje KVM:
kvm-ok
Jeśli wszystkie kontrole zakończyły się pomyślnie, możesz przejść do instalacji libvirt. W przeciwnym razie musisz zmienić sprzęt na zgodny z KVM.
Instalacja libvirt
- Aby uzyskać bardziej aktualny stos wirtualizacji, dodaj PPA wirtualizacji do systemu:
sudo apt -y install software-properties-common sudo add-apt-repository -uy ppa:jacob/virtualisation
- Zainstaluj libvirt:
sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- Dodaj bieżącego użytkownika do grup kvm i libvirt:
sudo usermod -aG kvm,libvirt $USER
- Odśwież przypisania grup dla bieżącego użytkownika:
newgrp -
Greeter
W elementary OS 7.1 może wystąpić problem z nowym użytkownikiem libvirt-qemu pojawiającym się jako opcja logowania w Greeter. Nie powinno się to zdarzyć, ale istnieje obejście. Kroki te ukrywają login libvirt-qemu w Greeter.
- Ustaw konto użytkownika libvirt-qemu jako konto systemowe dla pakietu accountsservices, aby ukryć je w menu logowania:
printf "[User]\nSystemAccount=true\n" | sudo tee /var/lib/AccountsService/users/libvirt-qemu
- Zrestartuj usługę kont:
sudo systemctl restart accounts-daemon.service
Btrfs
Jeśli używasz Btrfs na swoim systemie, powinieneś unikać CoW na CoW podczas korzystania z obrazów dysków maszyn wirtualnych. Używanie domyślnego formatu CoW qcow2 dla obrazów dysków wirtualnych na systemie plików Btrfs może powodować problemy. Poniżej przedstawiono różne sposoby wyłączenia CoW dla obrazów dysków wirtualnych na systemach plików Btrfs. Jeśli robisz migawki swojego systemu, umieść obrazy dysków w podwoluminie wykluczonym z migawek. Migawki dla obrazów dysków wirtualnych powinny być obsługiwane w samym obrazie dysku, jak ma to miejsce w przypadku formatu qcow2.
qemu-img
Tworząc obraz qcow2 bezpośrednio za pomocą qemu-img, można użyć opcji nocow, aby wyłączyć CoW dla tego pliku. Poniższe polecenie tworzy 25-gigabajtowy obraz qcow2 o nazwie my-vm-image.qcow2 z wyłączonym CoW:
qemu-img create -o nocow my-vm-image.qcow2 25G
Funkcje puli pamięci libvirt
W wersji libvirt 6.6.0 wprowadzono funkcje puli pamięci, w tym funkcję CoW. Ta wersja libvirt domyślnie wyłączała CoW na systemach plików Btrfs. Ta funkcjonalność została jednak szybko wycofana w libvirt 6.7.0, która ponownie włączyła CoW domyślnie. Decyzja o wyłączeniu CoW została pozostawiona administratorom systemów. Jeśli masz szczęście korzystać z libvirt 6.6.0 lub nowszej, możesz skorzystać z tej funkcji.
elementary OS 7.1 i Ubuntu 20.04 mają dostęp do libvirt w wersji 6.0.0. Nawet jeśli używasz PPA wirtualizacji, zawiera ono tylko wersję 6.4.0 dla Ubuntu 20.04. Aby uzyskać nowszą wersję, musisz skorzystać z zewnętrznych źródeł lub użyć nowszej wersji Ubuntu.
libvirt używa koncepcji pul pamięci do abstrakcji złożoności związanych z zarządzaniem obrazami dysków maszyn wirtualnych w różnych sytuacjach. Nie będę się tutaj zagłębiał w szczegóły. Odnieś się do dokumentacji Zarządzania Pamięcią, aby uzyskać więcej informacji. Na potrzeby tego posta powinieneś wiedzieć, że domyślnym katalogiem libvirt dla obrazów dysków jest domyślna pula pamięci. Ta pula jest prostą pulą katalogów. libvirt przechowuje prawie wszystkie konfiguracje w plikach XML. Dotyczy to również pul pamięci, a XML można przeglądać i edytować za pomocą narzędzia virsh. Poniższe kroki przedstawiają, jak wyłączyć CoW w domyślnej puli pamięci.
- Wylistuj pule pamięci za pomocą podpolecenia pool-list. Domyślna pula nazywa się default.
virsh pool-list
- Aby wyświetlić XML puli, użyj podpolecenia pool-dumpxml, podając nazwę puli. Poniżej znajduje się konfiguracja XML domyślnej puli, gdzie widać, że ścieżka to /var/lib/libvirt/images.
virsh pool-dumpxml default
- Edytuj konfigurację puli za pomocą podpolecenia pool-edit. Aby zmodyfikować XML domyślnej puli, użyj poniższego polecenia:
virsh pool-edit default
- Aby wyłączyć CoW, ustaw funkcję cow z atrybutem state='no' w XML puli. Poniżej znajduje się fragment XML wyłączający CoW:
<features> <cow state='no'/> </features>
- Dla domyślnej puli pamięci, wynikowy XML wyłączający CoW może wyglądać tak:
<pool type='dir'> <name>default</name> <uuid>4f779eae-e312-4e4d-bf9f-fafe0e334f63</uuid> <capacity unit='bytes'>1999372288000</capacity> <allocation unit='bytes'>191017480192</allocation> <available unit='bytes'>1808354807808</available> <features> <cow state='no'/> </features> <source> </source> <target> <path>/var/lib/libvirt/images</path> <permissions> <mode>0755</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
chattr
Najprostszym sposobem na wyłączenie CoW dla konkretnego katalogu lub pliku jest użycie chattr, jak opisano w artykule Can copy-on-write be turned off for data blocks?. Aby to zrobić, dodaj atrybut no copy on write za pomocą opcji +C. Poniższe polecenie wyłącza CoW w katalogu z obrazami libvirt:
sudo chattr +C /var/lib/libvirt/images
Podwolumin w płaskim układzie
Dedykowany podwolumin Btrfs dla katalogu /var/lib/libvirt/images jest prawdopodobnie najlepszą opcją, ponieważ wyklucza obrazy dysków z migawek. Podwolumin może mieć wyłączony CoW za pomocą chattr, ale CoW można również wyłączyć za pomocą opcji montowania nodatacow podczas korzystania z podwoluminu w płaskim układzie. Poniższe kroki tworzą dedykowany podwolumin dla katalogu z obrazami dysków libvirt i montują go z wyłączonym CoW.
- Montuj główny system plików Btrfs, aby utworzyć podwolumin:
sudo mount $(df --output=source / | tail -n 1) /mnt
- Utwórz dedykowany podwolumin Btrfs dla obrazów dysków wirtualnych libvirt:
sudo btrfs subvolume create /mnt/var-lib-libvirt-images
- Dodaj podwolumin do fstab:
echo $(df --output=source / | tail -n 1)" /var/lib/libvirt/images btrfs defaults,nodatacow,noatime,subvol=var-lib-libvirt-images 0 0" | sudo tee -a /etc/fstab
- Zweryfikuj, czy nie ma błędów w fstab:
sudo findmnt --verify --verbose
- Teraz zamontuj podwolumin zgodnie z regułą dodaną do fstab:
sudo mount /var/lib/libvirt/images
- Nie zapomnij odmontować /mnt:
sudo umount /mnt
To wszystko! Domyślna pula pamięci libvirt będzie przechowywać obrazy dysków w tym podwoluminie.
virt-manager
virt-manager to aplikacja do zarządzania maszynami wirtualnymi z libvirt za pomocą interfejsu graficznego. Jest to przydatne narzędzie, chociaż niektórzy mogą preferować prostotę Boxes.
Zainstaluj virt-manager:
sudo apt -y install virt-manager
Jeśli nie wylogowałeś się i ponownie nie zalogowałeś po zainstalowaniu libvirt, musisz to zrobić przed uruchomieniem virt-manager.
Podsumowanie
Powinieneś teraz być w stanie uruchomić maszyny wirtualne bez problemów. Teraz, gdy masz wszystkie komponenty potrzebne do wirtualizacji, dlaczego nie ułatwić sobie życia z Boxes? W nadchodzącym poście omówię szczegóły instalacji Flatpak GNOME Boxes na systemie Btrfs, więc bądź na bieżąco!