Narzędzia użytkownika

Narzędzia witryny


wiki:kvm

Virsh / KVM / qemu

Fizyczny interfejs sieciowy dla wirtualki

  • potrzebna jest jedna maszyna wirtualna o nazwie tulipan na hoście z Fedorą 34,
  • trzeba to zrobić jak najprościej,
  • wirtualka ma być w tej samej sieci (192.168.2.0/24), co host,
  • należy wydzielić osobny interfejs sieciowy dla wirtualki.

Instalacja potrzebnego (oraz trochę nadmiarowego, na wszelki wypadek) oprogramowania związanego z kvm oraz qemu dla Fedory

# dnf install libvirt-bash-completion libvirt-libs libvirt-client python3-libvirt libvirt-daemon libvirt-daemon-driver-qemu libvirt-daemon-driver-storage-core libvirt-daemon-driver-network libvirt-daemon-driver-storage-disk libvirt-daemon-driver-storage-scsi libvirt-daemon-driver-interface libvirt-daemon-config-network libvirt-daemon-driver-storage-iscsi-direct libvirt-daemon-driver-storage-gluster libvirt-daemon-driver-nodedev libvirt-daemon-driver-storage-mpath libvirt-daemon-driver-storage-logical libvirt-daemon-driver-storage-iscsi libvirt-daemon-driver-secret libvirt-daemon-driver-nwfilter libvirt-daemon-driver-storage-sheepdog libvirt-daemon-driver-storage-zfs libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage libvirt-daemon-kvm qemu-img libvirt-daemon-driver-qemu ipxe-roms-qemu qemu-common qemu-ui-opengl qemu-ui-egl-headless qemu-ui-sdl qemu-audio-alsa qemu-audio-oss qemu-audio-pa qemu-audio-sdl qemu-block-curl qemu-block-dmg qemu-block-gluster qemu-block-iscsi qemu-block-nfs qemu-block-ssh qemu-char-baum qemu-device-display-virtio-gpu qemu-device-display-virtio-gpu-pci qemu-device-display-virtio-vga qemu-device-usb-redirect qemu-device-usb-smartcard qemu-ui-curses qemu-ui-gtk qemu-ui-spice-core qemu-char-spice qemu-ui-spice-app qemu-audio-spice qemu-device-display-qxl qemu-system-x86-core qemu-block-rbd qemu-system-x86 qemu-kvm virt-install

W CentOS 9 wystarczą pakiety:

# dnf install qemu-kvm libvirt virt-install

oraz ich zależności.

Otwarcie portu 5901 w sieci lokalnej, z dodaną siecią w sources:

# firewall-cmd --permanent --zone=home --add-port=5901/tcp

Pobranie pliku iso z instalatorem (nie musi to być Fedora):

# cd /var/lib/libvirt/images
# wget -c https://download.fedoraproject.org/pub/fedora/linux/releases/34/Server/x86_64/iso/Fedora-Server-dvd-x86_64-34-1.2.iso

Przygotowanie fizycznego interfejsu eno2 dla maszyny wirtualnej (uuid należy pozostawić takie, jakie jest). Gniazdo interfejsu sieciowego musi być połączone kablem ze switchem/routerem. Ważne: tryb passthrough nie pozwala na uruchomienie kilku serwerów wirtualnych na tym samym interfejsie sieciowym.

# virsh net-edit default
<network>
  <name>default</name>
  <uuid>9d2343ed-4896-43fc-922e-a7b4a2f902da</uuid>
  <forward dev='eno2' mode='passthrough'>
    <interface dev='eno2'/>
  </forward>
</network>

Utworzenie i uruchomienie maszyny wirtualnej:

# virt-install --name tulipan --description 'Tulipan - adres IP 192.168.2.51' --ram 16384 --vcpus 8 --connect qemu:///system --disk size=70 --os-type fedora34 --network network=default --graphics vnc,listen=0.0.0.0,port=5901 --cdrom /var/lib/libvirt/images/Fedora-Server-dvd-x86_64-34-1.2.iso --noautoconsole

Do konsoli (w której jest instalator) można podłączyć się graficznym programem Remmina pod adresem:

vnc://ip.serwera.fizycznego.hosta:5901 

Po zakończeniu pracy instalatora wirtualny serwer nie uruchomi się ponownie, ponieważ nie ma ustawionego autostartu:

# virsh list --all
 Id   Name          State
------------------------------
 -    tulipan   shut off

Uruchomienie serwera wirtualnego po instalacji:

# virsh start --domain tulipan

W tej chwili na serwer można dostać się przez vnc, lub ssh.


br0 dla wirtualek

Ustawienie interfejsu br0, współdzielonego przez fizyczną maszynę oraz wirtualki.

# nmcli connection add type bridge ifname virt-br0
# nmcli connection modify bridge-virt-br0 bridge.stp no
# nmcli con modify bridge-virt-br0 ipv4.method manual ipv4.address "192.168.200.20/24" ipv4.gateway "192.168.200.1"  ipv4.dns "192.168.200.5" ipv4.dns-search ping.local
# nmcli connection modify bridge-virt-br0 autoconnect yes
# nmcli connection add type bridge-slave ifname eno1 master virt-br0
# nmcli connection modify bridge-slave-eno1 autoconnect yes

A teraz konfiguracja virsha:

# cat virsh-br0.xml 
<network>
  <name>br0</name>
  <forward mode='bridge'/>
  <bridge name='virt-br0'/>
</network>

# virsh net-create virsh-br0.xml
# virsh net-autostart br0
# virsh net-start br0

I tworzenie wirtualki:

# virt-install --name wirtualka.ping.local --description 'wirtualka.ping.local 192.168.200.50' --ram 8192 --vcpus 4 --connect qemu:///system --disk size=20 --network network=br0 --graphics vnc,listen=0.0.0.0,port=5901 --cdrom /var/lib/libvirt/images/CentOS-Stream-8-x86_64-latest-dvd1.iso --noautoconsole

Migracja VK-ki na inny host

Zakładam, że obydwa serwery są podobnie skonfigurowane, to znaczy mają pliki qcow w tym samym katalogu oraz mają takie same interfejsy sieciowe dla wirtualek. Na źródle:

cd /var/lib/libvirt/images
scp vmka.qcow nowy_host:/var/lib/libvirt/images/
virsh dumpxml vmka

Należy skopiować kod xml do schowka. Na nowym serwerze:

vim /tmp/vmka.xml

i wkleić tam kod xml. Potem:

virsh define /tmp/vmka.xml
rm /tmp/vmka.xml
virsh start --domain vmka

Można potem jeszcze poprawić vmkę poprzez:

virsh edit vmka

i poprawić jej port vnc na nieużywany przez inne maszyny.


Kompresja obrazu dysku

Pliki qcow2 z czasem stają się większe. Wynika to ze zwykłego na zapisywania plików przez wirtualkę oraz tworzenia i usuwania snapshotów. Należy zatrzymać wirtualkę i skompresować obraz.

qemu-img convert -O qcow2 -c maria.qcow2 maria2.qcow2
rm maria.qcow2
mv maria2.qcow2 maria.qcow2

Dodanie dysku do maszyny wirtualnej

cd /var/lib/libvirt/images
qemu-img create -f qcow2 vmka-data.qcow2 110G -o preallocation=metadata
virsh attach-disk vmka --source /var/lib/libvirt/images/vmka-data.qcow2 --target vdb --cache none --persistent

W pliku konfiguracyjnym maszyny wirtualnej nowy dysk doda się wpis o nowych dysku z formatem raw, co uniemożliwia wykonanie kopii migawkowej. Należy zmienić linijkę opisującą nowy dysk z

<driver name='qemu' type='raw' cache='none'/>

na

<driver name='qemu' type='qcow2' cache='none'/>

net-autortart

W przypadku błędu:

# virsh net-autostart br0
error: failed to mark network br0 as autostarted
error: Requested operation is not valid: cannot set autostart for transient network

należy

# virsh net-edit br0

dodać pustą linię na końcu oraz zapisać, a potem

# virsh net-autostart br0
Network br0 marked as autostarted

Uruchomienie wirtualki z płyty

Scenariusz: maszyna wirtualna testowycentos9 się nie uruchamia, ponieważ system plików na partycji root jest uszkodzony. Należy wyłączyć wirtualkę i naprawić system plików za pomocą xfs_repair.

virsh destroy --domain testowycentos9
virsh edit --domain testowycentos9

Trzeba poprawić sekcję os:

<os>
  <type arch='x86_64' machine='pc-q35-rhel8.6.0'>hvm</type>
  <boot dev='hd'/>
</os>

na

<os>
  <type arch='x86_64' machine='pc-q35-rhel8.6.0'>hvm</type>
  <boot dev='cdrom'/>
</os>

Trzeba również umieścić „płytkę” w napędzie cd. Poprawić:

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <target dev='sda' bus='sata'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

na (przykładowo, ponieważ ścieżka do pliku iso może być inna):

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <target dev='sda' bus='sata'/>
  <source file='/var/lib/libvirt/images/CentOS-Stream-9-latest-x86_64-dvd1.iso'/>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

Zapisać plik oraz uruchomić wirtualkę.

virsh start --domain testowycentos9

Teraz wystarczy się połączyć z konsolą przez vnc, wybrać tryb ratunkowy w instalatorze CentOS-a, a w nim tryb numer 3, żeby po prostu uruchomić basha. Potem trzeba wykryć i aktywować LVM oraz użyć xfs_repair na uszkodzonym woluminie. Można potem spróbować wyłączyć system za pomocą „shutdown -h now”, ale nie zawsze się to udaje. Jeżeli wirtualka będzie nadal działać, można ją wyłączyć za pomocą nadzorcy:

virsh destroy --domain testowycentos9

Trzeba teraz wyedytować konfigurację wirtualki i poprawić cdrom na hd w sekcji os. Po jej ponownym starcie:

virsh start --domain testowycentos9

uruchomi się poprawnie.

wiki/kvm.txt · ostatnio zmienione: 2024/02/10 10:02 przez lukasz

Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki