Posts Tagged Wirtualizacja

VirtualBox: zarządzanie uruchamianiem maszyn wirtualnych przy użyciu linii poleceń (VBoxManage)

VirtualBox jest aplikacją, która pozwala na używanie wirtualnych systemów operacyjnych. Standardowo jest dostarczana z przyjaznym interfejsem użytkownika, który pozwala na zarządzanie tymi maszynami. Przy jego użyciu można robić takie rzeczy jak:

  • tworzenie i usuwanie maszyn wirtualnych
  • uruchamianie i zatrzymywanie maszyn wirtualnych
  • modyfikację konfiguracji poszczególnych maszyn wirtualnych
  • inne rzeczy związane z obsługą wirtualnych maszyn

Jest także dostępna możliwość zarządzanie wirtualnymi komputerami przy użyciu linii poleceń za pomocą komendy VBoxManage. Pozwala ono na takie same akcje jak narzędzie graficzne oraz kilka rzeczy, których nie da się za jego pomocą zrobić.

  • lista zarejestrowanych maszyn wirtualnych:
    $ VBoxManage list vms
    Sun VirtualBox Command Line Management Interface Version 3.1.6
    (C) 2005-2010 Sun Microsystems, Inc.
    All rights reserved.

    "ChromeOs" {7ca42bf2-4b33-4b0b-a0f8-669cb3d2703a}
  • uruchomienie wybranej maszyny wirtualnej:
    $ VBoxManage startvm ChromeOs
    Sun VirtualBox Command Line Management Interface Version 3.1.6
    (C) 2005-2010 Sun Microsystems, Inc.
    All rights reserved.

    Waiting for the remote session to open...
    Remote session has been successfully opened.
  • wstrzymanie działania maszyny wirtualnej:
    $ VBoxManage controlvm ChromeOs pause
  • ponowne wznowienie pracy:
    $ VBoxManage controlvm ChromeOs resume
  • wyłączenie maszyny:
    $ VBoxManage controlvm ChromeOs acpipowerbutton
    $ VBoxManage controlvm ChromeOs poweroff
  • zapisanie stanu maszyny i jej wyłączenie
    $ VBoxManage controlvm ChromeOs savestate

To jest podstawowy zestaw komend, który pozwala na zarządzanie procesem uruchamiania i zatrzymywania maszyn wirtualnych. Polecenie to pozwala na dużo więcej, warto zapoznać się zarówno z dokumentacją dostarczaną z VirtualBoxem jak i pomocą wyświetlaną przez aplikację.

Źródła

Tags: , , , ,

Jakiego zarządcę operacji dyskowych wybrać dla maszyn wirtualnych

Dostępni zarządcy kolejkowania operacji I/O

W Linuksie (przynajmniej w RHEL 5) mam do wybory czterech różnych zarządców procesów (będzie po angielsku):

  • Completely Fair Queuing (CFQ)

    CFQ maintains a scalable per-process I/O queue and attempts to distribute the available I/O bandwidth equally among all I/O requests. CFQ is well suited for mid-to-large multi-processor systems and for systems which require balanced I/O performance over multiple LUNs and I/O controllers.

  • Noop

    The NOOP scheduler is a simple FIFO queue and uses the minimal amount of CPU/instructions per I/O to accomplish the basic merging and sorting functionality to complete the I/O. It assumes performance of the I/O has been or will be optimized at the block device (memory-disk) or with an intelligent HBA or externally attached controller.

  • Deadline

    The Deadline elevator uses a deadline algorithm to minimize I/O latency for a given I/O request. The scheduler provides near real-time behavior and uses a round robin policy to attempt to be fair among multiple I/O requests and to avoid process starvation. Using five I/O queues, this scheduler will aggressively re-order requests to improve I/O performance.

  • Anticipatory

    The Anticipatory elevator introduces a controlled delay before dispatching the I/O to attempt to aggregate and/or re-order requests improving locality and reducing disk seek operations. This algorithm is intended to optimize systems with small or slow disk subsystems. One artifact of using the AS scheduler can be higher I/O latency.

    Agorytm zarządcy dyskowego anticipatory został usunięty w nowych wersjach jądra Linuksa. Ciągle jednak jest (i będzie dostępny) w wersji RHEL 5, która zawiera jądro w wersji 2.6.18.

Można to sprawdzić wydając poleceni:

# cat /sys/block/URZADZENIE/queue/scheduler
noop anticipatory deadline [cfq]

Aktualnie wybrany zarządca jest podany w nawiasach kwadratowych.

Zarządca kolejki I/O dla komputera hosta

W większości przypadków najlepsze efekty osiągnie się korzystając z aglgorytmu cfq. Pracuje on równie dobrze przy praktycznie wszelkich obciążeniach. Jeżeli natomiast jest ważniejsze zminimalizowanie opóźnień I/O kosztem ogólnej przepustowości, być może warto rozszerzyć algorytm deadline.

Zarządca kolejki I/O dla gościa

W przypadku systemów wirtualizowanych sytuacja nie jest już taka prosta. W dużej części przypadków opłacalne może być ustawienie zarządcy kolejki I/O jako noop. Jest to spowodowane tym, że nie ma potrzeby kolejkowania zapisów w dwóch warstwach, raz na systemie gościa a drugi raz na systemie gospodarza. Lepiej jest, gdy to gospodarz decyduje kiedy i jak zapisać czy odczytać dane z dysków. To system hosta ma informacje o wszystkich operacjach dyskowych ze wszystkich maszyn oraz posiada informacje o fizycznej charakterystyce dysków twardych.

Istnieją wyjątki od tej zasady wtedy, gdy system gości uzyskują dostęp do dysków poprzez protokół iSCSI lub też mają podłączone bezpośrednio urządzenie fizyczne. Wtedy powinny samodzielnie zarządzać kolejką I/O.

Konfiguracja domyślnego algorytmu kolejkowania

Zmiana algorytmu kolejkowania I/O w trakcie pracy systemu

Zmianę dokonujemy przy użyciu polecenia echo:

# cat /sys/block/URZADZENIE/queue/scheduler
noop anticipatory deadline [cfq]
# echo 'noop' > /sys/block/URZADZENIE/queue/scheduler
# cat /sys/block/URZADZENIE/queue/scheduler
[noop] anticipatory deadline cfq

Nowy algorytm będzie używany od razu, zmiana ta nie przetrwa restartu maszyny. Natomiast umożliwia wprowadzenie innego sposobu kolejkowania dla różnych urządzeń.

Aby zapewnić wprowadzenie tych zmian po restarcie maszyny, można dodać odpowiedni wpis do pliku /etc/rc.local

# echo "echo 'noop' > /sys/block/URZADZENIE/queue/scheduler" >> /etc/rc.local

Zmiana domyślnego algorytmu kolejkowania I/O

Zmiana domyślnego algorytmu kolejkowania I/O dla systemu Linuks polega na przekazania odpowiedniego parametru do jądra. Przypisujemy wartośc parametrowi elevator nazwę domyślnego algorytmu kolejkowania: noop, anticipatory, deadline oraz cfq.

Przykładowy wpis z pliku /boot/grub/grub.conf:

34
35
36
37
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root     (hd0,0)
kernel  /vmlinuz-2.6.18-8.el5 ro root=/dev/vg0/lv0 elevator=noop
initrd   /initrd-2.6.18-8.el5.img

Opis, w jaki sposób można modyfikować konfigurację GRUBa zarówno w dystrybucji RedHat jak i Debian można znaleźć we wpisie Konfiguracja dostępu do maszyny wirtualnej przy użyciu polecenia virsh lub xm.

Źródła

Tags: , , , , , , ,

Konfiguracja dostępu do maszyny wirtualnej przy użyciu polecenia virsh lub xm

Problem: chcemy zalogować się na maszynę wirtualną ale nie możemy użyć aplikacji virt-viewer bądź np. ssh.

Najlepszym rozwiązaniem wtedy powinno być użycie polecenia:

# virsh console maszyna

Tutaj często pojawia się jednak problem, nie jesteśmy w stanie tego zrobić. Rozwiązanie tego problemu wymaga wprowadzenia pewnych modyfikacji po stronie systemu gościa i konfiguracji konsoli podłączonej portu szeregowego.

Krok 1: Dodanie wpisu w pliku /etc/inittab.

Dla systemu Debian:

co:2345:respawn:/sbin/getty -L ttyS0 115200 vt100

Dla systemu RedHat:

co:2345:respawn:/sbin/agetty ttyS0 115200  vt100

Krok 2: Włączenie logowania przy użyciu konsoli szeregowej.

Należy do pliku /etc/securetty dodać nazwę konsoli na którą chcemy się zalogować (jeżeli już nie jest ona tam wymieniona)

ttyS0

Krok 3: Włączenie dostępu do menu startu GRUB 1.

Można jeszcze włączyć możliwość podglądu startu systemu już od momentu uruchomienia Gruba. Aby to zrobić, należy wprowadzić następujące modyfikacje do pliku /boot/grub/menu.lst lub /boot/grub/grub.conf (najczęściej istnieje jeden z plików, a drugi jest linkiem do pierwszego)

1
2
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

Wpis ten powinien znaleźć się powyżej pierwszej dyrektywy title.

Należy także dodać następujący ciąg znaków console=ttyS0,115200 do linii ze ścieżką do jądra systemu. W przypadku RedHata linia taka wyglądałaby podobnie do tej:

1
2
3
4
title Red Hat Enterprise Linux Server (2.6.18-164.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/sda2 rhgb quiet console=ttyS0,115200
initrd /initrd-2.6.18-164.el5.img

Dla Debiana natomiast warto dodać podane instrukcje w linii zaczynającej się tak:

1
# kopt=root=/dev/mapper/eris-root ro

Po modyfikacji linia ta będzie miała taką postać (zwracam uwagę na znak komentarza, jest i powinien zostać):

1
# kopt=root=/dev/mapper/eris-root ro console=ttyS0,115200

Teraz pozostaje tylko uruchomić polecenie update-grub:

1
2
3
4
5
6
7
# update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /vmlinuz-2.6.26-2-amd64
Updating /boot/grub/menu.lst ... done

Powoduje ona aktualizacje wpisów w pliku konfiguracyjnym tak, że będą one wyglądały tak jak poniżej. Także po instalacji nowego jadra systemu odpowiednie wpisy zostaną dodane do konfiguracji jądra.

1
2
3
4
title           Debian GNU/Linux, kernel 2.6.26-2-amd64
root            (hd0,0)
kernel          /vmlinuz-2.6.26-2-amd64 root=/dev/mapper/scope-root ro quiet console=ttyS0,115200
initrd          /initrd.img-2.6.26-2-amd64

Krok 4. Restart maszyny wirtualnej.

Teraz pozostaje tylko zatrzymać maszynę wirtualną i ponownie ją uruchomić.

# virsh shutdown maszyna

A teraz pozostaje nam wystartować maszynę za pomocą polecenia (jeżeli dysponujemy odpowiednio nową wersją komendy virsh, opcja --console jest dostępna przynajmniej od wersji 0.7.0)

# virsh start maszyna --console

W przypadku starszych wersji polecenia virsh należy użyć sekwencji poleceń:

# virsh start maszyna

# virsh console maszyna

Po tych krokach powinniśmy połączyć się z maszyną wirtualną i możemy obserwować zarówno menu GRUB jak i proces startu maszyny wirtualnej.

Także jeżeli używamy do zarządzania maszynami wirtualnymi polecenia xm, wszystko powinno działać. Należy jedynie zmienić polecenia służące do startu i zatrzymywania maszyn wirtualnych.

Tags: , , , , ,