Przenoszenie maszyn wirtualnych między hiperwizorami to częste zadanie w pracy administratora i pasjonata systemów Unix/Linux. W tym poradniku przejdziemy przez kompletny proces: od migracji dysku .vdi (VirtualBox) do QEMU, przez konfigurację sieci we FreeBSD, aż po bezproblemowe rozszerzanie przestrzeni dyskowej na systemach plików UFS oraz ZFS.
1. Migracja obrazu dysku VDI do formatu QEMU
Choć QEMU teoretycznie potrafi bezpośrednio odczytać format .vdi, praca na nim bywa niestabilna i mało wydajna. Najlepszą praktyką jest konwersja do natywnego formatu qcow2.
Do wykonania operacji potrzebne jest narzędzie qemu-img zainstalowane na systemie-gospodarzu (hostu).
bash
qemu-img convert -f vdi -O qcow2 freebsd.vdi freebsd.qcow2
- -f vdi – określa format wejściowy.
- -O qcow2 – określa format wyjściowy (zoptymalizowany dla QEMU).
Podstawowe uruchomienie maszyny
Po konwersji system można uruchomić poniższym poleceniem. Zawiera ono podstawową konfigurację pamięci, procesora oraz sieci typu NAT:
bash
qemu-system-x86_64 \
-m 2G \
-smp 2 \
-cpu host \
-enable-kvm \
-drive file=freebsd.qcow2,if=virtio \
-net nic,model=virtio \
-net user
Uwaga dla użytkowników macOS: Akcelerację -enable-kvm należy zastąpić parametrem -accel hvf.
2. Rozwiązywanie problemów z siecią (Brak internetu)
Częstym problemem po uruchomieniu czystego FreeBSD w QEMU jest brak konfiguracji sieciowej. Zazwyczaj wynika to z braku aktywacji interfejsu lub niewłaściwego sterownika karty.
Krok 1: Identyfikacja interfejsu
Zaloguj się jako root i sprawdź dostępne karty sieciowe:
bash
ifconfig
W zależności od konfiguracji QEMU, szukaj interfejsów takich jak vtnet0 (dla VirtIO) lub em0 / wm0 (dla emulacji kart Intel).
Krok 2: Podniesienie interfejsu i konfiguracja DHCP
W celu przetestowania połączenia, uruchom klienta DHCP ręcznie (w tym przykładzie dla karty vtnet0):
bash
dhclient vtnet0
Krok 3: Automatyzacja przy starcie systemu
Aby sieć działała po każdym restarcie, dopisz regułę do pliku /etc/rc.conf:
bash
ee /etc/rc.conf
Dodaj linię:
text
ifconfig_vtnet0="DHCP"
Co zrobić, jeśli ifconfig pokazuje tylko lo0?
Jeśli system w ogóle nie wykrywa karty VirtIO, masz dwa wyjścia:
- Zmiana modelu karty w QEMU: Zmień parametr w skrypcie startowym QEMU na klasycznego Intela, który jest wspierany natywnie:
bash
-net nic,model=e1000 -net user
- We FreeBSD karta pojawi się jako em0. Dopisz wtedy ifconfig_em0=”DHCP” do /etc/rc.conf.
- Włączenie modułów VirtIO: Jeśli wolisz wydajniejsze VirtIO, wymuś ładowanie modułów jądra w /boot/loader.conf:
text
if_vtnet_load="YES"
virtio_load="YES"
virtio_pci_load="YES"
3. Zwiększanie przestrzeni dyskowej maszyny wirtualnej
Gdy podczas aktualizacji systemu (np. przez freebsd-update) zabraknie miejsca, konieczne jest rozszerzenie dysku. Operacja ta składa się z dwóch etapów: fizycznego powiększenia pliku na hoście oraz modyfikacji partycji wewnątrz gościa.
Krok 1: Powiększenie pliku dysku (na hoście)
Wyłącz maszynę wirtualną i wykonaj polecenie resize (przykład dodaje 20 GB wolnego miejsca):
bash
qemu-img resize freebsd.qcow2 +20G
Krok 2: Modyfikacja partycji wewnątrz FreeBSD
Uruchom system ponownie i zaloguj się jako root. Wyświetl układ partycji:
bash
gpart show
System zasygnalizuje błąd komunikatem [CORRUPT] na dole tabeli – oznacza to jedynie, że zapasowa tablica partycji nie znajduje się na fizycznym końcu nowego dysku. Napraw to poleceniem:
bash
gpart recover vtblk0
(W miejsce vtblk0 wstaw nazwę swojego dysku).
Dalsze kroki zależą od tego, jakiego systemu plików używa Twoja instalacja FreeBSD.
Scenariusz A: Rozszerzanie tradycyjnego systemu plików UFS
- Powiększenie partycji systemowej: Sprawdź numer indeksu partycji freebsd-ufs (najczęściej jest to 2) i wykonaj:
bash
gpart resize -i 2 vtblk0
- Rozszerzenie systemu plików w locie:
bash
growfs /dev/vtblk0p2
- Potwierdź operację wpisując yes.
Scenariusz B: Rozszerzanie nowoczesnego systemu plików ZFS
ZFS radzi sobie z zarządzaniem przestrzenią znacznie sprawniej i wykonuje operacje całkowicie w locie.
- Powiększenie partycji ZFS: Zlokalizuj indeks partycji freebsd-zfs (np. 3) i rozszerz ją:
bash
gpart resize -i 3 vtblk0
- Włączenie autoexpand w puli: Sprawdź nazwę puli za pomocą zpool list (domyślnie zroot) i zezwól na automatyczne rozszerzanie:
bash
zpool set autoexpand=on zroot
- Wymuszenie odświeżenia geometrii dysku w puli:
bash
zpool online -e zroot vtblk0p3
- Gdzie zroot to nazwa puli, a vtblk0p3 to pełna nazwa powiększonej partycji.
Weryfikację poprawności wykonania operacji w obu przypadkach można przeprowadzić za pomocą poleceń df -h lub zpool list. Przestrzeń zostanie zaktualizowana natychmiast, bez konieczności ponownego uruchamiania maszyny wirtualnej.