Rozwój technologi spowodował, że wydajność procesorów gwałtownie się zwiększyła. Zjawisko to pociągnęło za sobą szybki rozwój technik wirtualizacji. Na naszych komputerach możemy z powodzeniem uruchamiać kilka systemów operacyjnych oraz łączyć je w sieć bez konieczności inwestowania w sprzęt. Niejednokrotnie wirtualne systemy działają z porównywalną wydajnością, do systemów zainstalowanych na osobnych maszynach. Programów, które służą wirtualizacji jest pełno. Jednym z najbardziej rozwijających się projektów tego typu jest QEMU.

QEMU jest szybkim emulatorem napisanym przez Fabrice Bellarda i dostępnym jako otwarte oprogramowanie. QEMU umożliwia uruchomienie kilku systemów operacyjnych jednocześnie na jednej maszynie. Jest podobny do takich projektów jak Bochs czy PearPC, jednak ma kilka cech (np. większą szybkość i obsługę wielu architektur CPU), dzięki którym wyprzedza swoich konkurentów.

QEMU

QEMU wydawane jest na licencjach GPL/LPGL. Większość aplikacji oparta jest o licencję LGPL, lecz sam moduł emulujący wydawany jest na licencji GNU GPL. Z dniem 6 lutego 2007 roku został udostępniony na licencji GNU GPL moduł KQEMU. Moduł ten 5-krotnie przyśpiesza działanie samego QEMU. Wcześniej moduł ten był darmowy, ale autor nie chciał udostępnić kodu źródłowego, dopóki nie uzyska bliżej nieokreślonej finansowej rekompensaty. Równolegle do projektu KQEMU rozwijał się projekt qvm86. Na początku roku 2007 został on zamknięty w związku z wydaniem na licencji GNU GPL takiego projektu jak VirtualBox.

QEMU umożliwia emulację wielu architektur CPU. Sama aplikacja może działać w dwóch trybach:

  • użytkownika – może uruchamiać procesy systemu Linux skompilowane na innym typie procesora niż bieżący. Dzięki temu możemy uruchamiać aplikacje 64 bitowe posiadając procesor 32 bitowy.
  • systemu – emulowany jest cały system, łącznie z różnymi urządzeniami peryferyjnymi. Umożliwia to łatwiejsze testowanie i odpluskwianie kodu.

Drugi tryb tworzy maszynę wirtualną wraz z procesorem, dyskiem twardym oraz odpowiednimi urządzeniami peryferyjnymi. Dzięki temu możemy zainstalować system na wirtualnym sprzęcie i przetestować jego działanie – podobnie jak robi to oprogramowanie typu VMWare czy Xen. Dzięki temu możemy uruchamiać i instalować systemy operacyjne na różne architektury jakie potrafi emulować QEMU. Są to między innymi: x86, x86_64, ARM, SPARC, SPARC64, PowerPC, PowerPC64, MIPS, m68k (Coldfire), SH-4, Alpha, CRIS.

Szczegółową listę architektur na jakiej może zostać uruchomione QEMU oraz jaka może być emulowana można obejrzeć pod adresem fabrice.bellard.free.fr. Dostępna jest również lista systemów jakie można uruchamiać pod QEMU wraz z oznaczeniem, który system jest w pełni wspierany. Dostępne są również zrzuty ekranu takiego systemu uruchomione pod kontrolą QEMU.

Tworzenie wirtualnych dysków

Przed rozpoczęciem prac z emulatorem, warto jest przygotować sobie wirtualny dysk twardy, na którym będą instalowane systemy operacyjne. Wykorzystamy do tego celu polecenie dd. Polecenie to służy do kopiowania pliku z przekształcaniem i formatowaniem zgodnie z argumentami. Wydajemy polecenie:

dd of=disk.img bs=1024 seek=10000000 count=0

Zostanie stworzony plik o rozmiarze 9,6G i nazwie disk.img. Znacznie prostszą metodą tworzenia wirtualnych dysków dla QEMU jest skorzystanie z dołączonego programu qemu-img. Polecenie to służy do tworzenia obrazów dysków w różnych formatach. Wspierane są takie formaty jak:

  • RAW – domyślny i najprostszy format dysków.
  • QCOW2 – ulepszony format dysków QEMU. Wspiera szyfrowanie AES oraz kompresję zlib.
  • QCOW – stary format dysków QEMU. Zachowane dla wstecznej kompatybilności.
  • COW – format Copy On Write. Nie działa na systemach win32.
  • VMDK – pliki dysków kompatybilne z VMware 3 oraz 4.
  • CLOOP – obraz Linux Compressed Loop.

Aby stworzyć dysk wystarczy wydać polecenie:

qemu-img create -f qcow disk.img 9,6G

Polecenie to stworzy nam wirtualny dysk o wielkości 9,6G w formacie QCOW.

Używanie QEMU

Korzystanie z QEMU jest bardzo proste. Za pomocą odpowiednich parametrów możemy uruchomić naszą maszynę wirtualną i rozpocząć instalować na niej system operacyjny. Wydajemy polecenie:

qemu -hda disk.img -m 256 -cdrom /dev/cdrom -boot d

Odpowiednie parametry informują QEMU jaka ma być maszyna wirtualna, jakie ma posiadać urządzenia peryferyjne.

  • -hda disk.img – wskazujemy plik, który zostanie wykorzystany jaki wirtualny dysk twardy.
  • -m 256 – opcja ta ustala wielkość pamięci w MB, domyślnie 128. Należy pamiętać, że QEMU może zajmować tyle fizycznej pamięci w naszym systemie.
  • -cdrom /dev/cdrom – określa położenie pożądanego przez nas napędu CD-ROM.
  • -boot d – określa wybór urządzenie, z którego zostanie zabootowany system. Do wyboru mamy opcje: a – bootowanie z napędu dyskietek, c – bootowanie z dysku twardego, d – bootowanie z napędu CD-ROM, n – bootowanie z sieci.

Możemy również wykorzystać plik ISO jako obraz płyty CD. W ten sposób nie musimy wypalać krążka, aby zainstalować z niego system. Wystarczy zmienić fragment /dev/cdrom na ścieżkę do obrazu ISO np:

qemu -cdrom knoppix.iso -boot d

Windows XP

Jeżeli będziemy chcieli zainstalować system Windows 2000 zalecane jest skorzystanie z parametru -win2k-hack. Możliwe jest również uruchomienie już zainstalowanego systemu Windows, który znajduje się na naszym fizycznym dysku. Wystarczy wydać polecenie, wskazując na jakiej partycji znajduje się system:

qemu -hda /dev/hdb4

Niestety tak uruchomiony system Windows może nie działać poprawnie, że względu na różnicę sprzętową. Polecenie to musimy wydać jako użytkownik root.

Praca w QEMU

W trakcie działania programu możemy przełączać się między specjalnymi konsolami QEMU. Dostępne są do tego specjalne kombinacje klawiszy:

  • [CTRL] + [ALT] + [F] – przełącza maszynę w tryb pełnoerkanowy / okienko.
  • [CTRL] + [ALT] – uwalnia myszkę.
  • [CTRL] + [ALT] + [1] – przełącza do głównego okna QEMU.
  • [CTRL] + [ALT] + [2] – przełącza do konsoli monitorującej. Możemy w niej sprawdzić, czy działa np. kqemu (info kqemu), załadować lub zapisać stan całej maszyny wirtualnej (savevm, loadvm). Pełną listę poleceń uzyskamy poprzez komendę help.

KQEMU

W normalnym trybie pracy wirtualny system działa około trzy razy wolniej od komputera macierzystego. Mimo takiego spowolnienia można z powodzeniem pracować na takiej maszynie. Istnieje jednak możliwość uruchomienia wirtualnej maszyny w taki sposób, aby działała prawie tak samo jak system, na którym uruchamiamy QEMU. Wykorzystać należy w tym celu akcelerator KQEMU, który wspierany jest zarówno przez platformy 32-bitowe, jak również przez 64-bitowe, oraz jądra w wersji 2.4 i 2.6. Wymaga on QEMU w wersji co najmniej 0.8.1.

Instalując KQEMU instalujemy również moduł do jądra Linuksa. Aby sprawdzić, czy moduł został załadowany wydajemy polecenie:

root@hell:/home/paszczak000# lsmod | grep kqemu
kqemu                 124452  0

Jeżeli moduł nie został załadowany (powyższe polecenie nic nam nie wyświetliło), musimy załadować moduł ręcznie poleceniem:

modprobe kqemu

Aby skorzystać z akceleratora musimy do składni polecenia uruchamiającego wirtualną maszynę dopisać opcję -kernel-kqemu. Dzięki temu nasz wirtualny system znacząco przyspieszy, co pozwoli na bezproblemową pracę. Niestety nie każdy system zadziała w trybie pełnej wirtualizacji. Obecnie KQEMU zadziała nam do emulacji Linuksa z jądrem 2.4 i 2.6 oraz Windowsa 2000 i XP. Przy czym ważne jest aby instalację systemów Windows przeprowadzać bez włączonej akceleracji. Należy ją włączyć dopiero przy uruchomieniu zainstalowanego systemu. Dla pewności warto dodać opcję -no-kqemu do składni QEMU.

QEMU Launcher

QEMU Launcher jest nakładką graficzną opartą o bibliotekę Gtk+. Aplikacja służy do zarządzania emulatorem komputera – QEMU. Program został napisany przez dwie osoby: Erik Meitner oraz Linas Žvirblis.

QEMU Launcher jest graficznym interfejsem napisanym w Perlu służącym do łatwej obsługi QEMU. Program potrafi tworzyć oraz konwertować wirtualne dyski, uruchamiać maszynę wirtualną z różną konfiguracją sprzętową. Dzięki przejrzystemu interfejsowi graficznemu obsługa QEMU staje się prosta i szybka.

Dzięki tej aplikacji możemy w łatwy sposób uruchamiać wirtualną maszynę ze wspomaganiem kqemu. Za pomocą interfejsu graficznego ustawiamy wszystie opcje przyszłej maszyny wirtualnej takie jak wielkość pamięci RAM (max 64 GB), wirtualne dyski twarde, napędy CD / DVD, stacje dyskietek. Aplikacja pozwala również na ustawienie ilość procesorów (maksymalnie 255), architekturę procesora.

Do poprawnego działania wymagane są:

  • Perl
  • Gtk2 Perl
  • Gtk2::GladeXML Perl
  • Locale::gettext Perl

QtEmu

QtEmu jest graficzną nakładka na program QEMU napisaną w QT4. Pozwala na zarządzanie wirtualnymi maszynami za pomocą ładnego i prostego interfejsu. Przy pomocy prostego kreatora w szybki sposób możemy stworzyć wirtualny system i testować na nim dowolne systemy operacyjne.

Qemulator

Qemulator to pełnowartościowy pakiet emulacyjny dla silnika QEMU, z kontrolą zadań na żądanie. Został napisany w Pythonie przy użyciu GTK+/Glade2. Qemulator zapewnia łatwe i szybkie w użyciu zarządzanie urządzeniami, listę “Moich maszyn” oraz interaktywną kontrolę zadań.

Dostarczony jest wraz z listą wszystkich uruchomionych zadań skąd można uruchomić panel kontrolny dla każdego zadania i przeprowadzić akcje na żądanie. Zapewnione są: pełna interakcja dla zamontowanych wolumenów, urządzeń USB, interakcja z myszką i klawiaturą, zrzuty ekranu, przechwytywanie dźwięku i zachowaniem, odtwarzanie stanu maszyn oraz otwieranie klienta VNC.

qemudo

Qemudo jest webowym interfejsem dla aplikacji QEMU. Pozwala ono na zarządzanie wirtualnymi maszynami z poziomu przeglądarki WWW. Wykorzystuje w tym celu aplet VNC napisany w JAVIE. Qemudo pozwala na resetowanie, uruchamianie wirtualnych maszyn oraz kontrolowanie ich za pomocą myszki lub klawiatury. Do poprawnego działania wymagane jest QEMU w wersji conamniej 0.8.1.

qemudo

Bibliografia

  • rgabrysiak

    Ciekawy artykuł, z qemu korzystam już od dawna ale nie słyszałem o

    trybie użytkownika (czyli uruchamianiu aplikacji 64-b na platformie 32-b)

    Jeśli ktoś mógłby powiedzieć na ten temat nieco więcej, z góry dziękuję.

  • jos

    qemu -cpu ?

    x86 qemu32

    x86 486

    x86 pentium

    x86 pentium2

    x86 pentium3

    Jakoś nie widzę tutaj 64 bit…

    Ktoś może rozwinąć temat, jak na 32 bitach uruchomić system 64 bitowy?

    pozdrawiam

  • Normalnie :)

    Ja odpalam tak:

    <pre>/usr/bin/qemu-system-x86_64 -boot d -m 128 -cdrom '/dev/cdrom' -net nic,vlan=0 -net user,vlan=0 -localtime &</pre>

  • jos

    heh, działa ;)

    dzięki!

    Próbowałem to skonfigurować i uruchomić przy pomocy qtemu, a tam nie było takich opcji ;)

  • Spox :) Ja zawsze korzystam z Qemu-Launcher bo jest prosty i szybki. To polecenie on mi wygenerował właśnie ;-)

  • Pingback: NetSecL 2.6 | thecamels.org()

  • Pingback: QEMU – emulator procesora | thecamels.org | systemy operacyjne()

  • Pingback: QEMU 0.13 | thecamels.org()

  • Pharmc231

    Hello! bkbdack interesting bkbdack site! I’m really like it! Very, very bkbdack good!

  • Pingback: NetSecL 2.6 | OSWorld.pl()