Jak na Linux uruchomić i skonfigurować FreeBSD na QEMU z obrazu VDI (VirtualBox)

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:

  1. 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
  1. We FreeBSD karta pojawi się jako em0. Dopisz wtedy ifconfig_em0=”DHCP” do /etc/rc.conf.
  2. 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

  1. Powiększenie partycji systemowej: Sprawdź numer indeksu partycji freebsd-ufs (najczęściej jest to 2) i wykonaj:
    bash

gpart resize -i 2 vtblk0
  1. Rozszerzenie systemu plików w locie:
    bash

growfs /dev/vtblk0p2
  1. 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.

  1. Powiększenie partycji ZFS: Zlokalizuj indeks partycji freebsd-zfs (np. 3) i rozszerz ją:
    bash

gpart resize -i 3 vtblk0
  1. 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
  1. Wymuszenie odświeżenia geometrii dysku w puli:
    bash

zpool online -e zroot vtblk0p3
  1. 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.

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.