Wiele osób chciałoby mieć możliwość pracy z różnymi aplikacjami tak, aby nie wpływały one na ich system operacyjny i inne programy. Jak tego dokonać ? Najwyższy czas poznać maszyny wirtualne.
Marcin Wiącek
Udostępnij
Jakie rozwiązania są dostępne?
Po dłuższym używaniu komputera wielu użytkowników dochodzi do wniosku, że chciałoby mieć możliwość przetestowania czy używania jakichś programów "w odosobnieniu". Dzieje się tak niezależnie od tego czy pracują z Windows, jakąś dystrybucją Linuksa, czy innym systemem operacyjnym. Jak tego dokonać ?
W artykule przedstawione zostały wady i zalety przykładowych darmowych rozwiązań. Została też podjęta próba oceny tego, jak bardzo spowalniają one aplikacje.
Podstawowe funkcje kontroli udostępniane są przez praktycznie każdy współczesny system operacyjny - mamy choćby możliwość ustawiania uprawnień w obecnych systemach plików. Najczęściej jest to niestety tylko kontrola na poziomie użytkowników.
Lukę tę wypełniają tzw. piaskownice. Działają między systemem operacyjnym oraz uruchomionym programem i pozwalają dokładnie określić, co może zrobić ten ostatni. Ich charakterystyczną cechą jest możliwość "oszukiwania" programów tak, że przy próbie zapisywania pliki w jakiejś lokalizacji robią to fizycznie w innej (np. zamiast katalogu z systemem używany jest wskazany w konfiguacji).
Jedną z najpopularniejszych aplikacji tego typu jest SandBoxie (darmowa do zastosowań niekomercyjnych). Podobną funkcjonalność mają coraz częściej pakiety zabezpieczające Internet Security (np. Safe Run w Kaspersky Internet Security). Rozwiązania tego typu przenikają nie tylko do jądra linuksowego, ale są również fabrycznie wbudowane w "okienka" Microsoftu. Można przyjąć, że pewną formą implementacji tej koncepcji jest np. Protected Mode w Internet Explorerze w systemach Vista/7.
Istnieją też maszyny wirtualne. Są uruchamiane w praktycznie niezmodyfikowanym systemie operacyjnym rzeczywistej maszyny (tzw. gospodarza czy hosta). Pozwalają stworzyć cały "oddzielny" komputer - nazywany często gościem - w którym instaluje się system operacyjny, a w nim uruchamia programy.
Maszyny wirtualne często dają możliwość skorzystania np. z podłączonych do gospodarza urządzeń USB, oczywiście poprzez dodane sterowniki. Niektóre z nich pozwalają stworzyć systemy zaliczane do innej platformy sprzętowej - dzieje się tak gdy naśladowane jest również działanie procesora - czasem mówi się wtedy o emulatorze. Wiele z opisywanych dalej rozwiązań pozwala również na działanie 64-bitowych systemów operacyjnych gościa w sytuacji, gdy system gospodarza jest 32-bitowy.
Można jeszcze spotkać rozwiązania parawirtualizacyjne, takie jak darmowy Xen albo komercyjny Hyper-V. Zawierają przede wszystkim tzw. hypervisor, który w wielkim uproszczeniu jest systemem operacyjnym uruchamianym na rzeczywistym sprzęcie, i który dostarcza pewnych narzędzi do tworzenia maszyn i obsługi sprzętu. Pod jego kontrolą działa zawsze jeden system mający bezpośredni dostęp do zasobów (w Xen mówimy o tzw. domenie 0, spotyka się też określenie partycji nadrzędnej) oraz inne systemy operacyjne bez takich uprawnień - najczęściej odpowiednio zmodyfikowane.
Dalsze opisy związane będą przede wszystkim z platformą x86 (PC) i darmowymi maszynami wirtualnymi dostępnymi w Windows i Ubuntu - sprawdzone zostanie ich współdziałanie z Ubuntu 10.04 (uwagi te też praktycznie w całości będą odnosić się również do Mint 9). Będzie też kilka słów o DOS, Windows XP i Windows 7. Artykuł można potraktować jako uzupełnienie wcześniejszego tekstu autora o wspomnianych dystrybucjach linuksowych.
Bezpieczeństwo i sprzęt
Niektóre maszyny wirtualne, jak i hypervisory, mogą potrzebować odpowiedniego wsparcia sprzętowego. W przypadku x86 wymagane jest spełnienie dwóch warunków:
Procesor musi mieć wbudowaną obsługę technologii AMD-V lub Intel VT-x.
Wspomniane technologie muszą być uaktywnione przez BIOS/EFI (dokonuje się tego przez przestawienie jednej z opcji).
Ustawienia te są zazwyczaj domyślnie wyłączone, dodatkowo przez dłuższy czas wielu producentów płyt głównych czy komputerów wzbraniało się przed ich udostępnianiem. Dlaczego?
Rozwiązania wirtualizacyjne (szczególnie te wspierane sprzętowo) rodzą bowiem pewne obawy z co najmniej dwóch przyczyn:
Doskonała wirtualizacja (do której się poniekąd dąży) powinna powodować, że oprogramowanie nie będzie mieć możliwości sprawdzenia, że nie działa na rzeczywistym sprzęcie.
W przypadku uzyskania kontroli przez złośliwy kod nad systemem operacyjnym i uruchomieniu go pod kontrolą hypervisora może być niezwykle trudno wykryć fakt wystąpienia ataku (z powodu opisanego w poprzednim punkcie) i jemu przeciwdziałać.
Nie ma tutaj niestety jednoznacznej odpowiedzi. Każda kolejna warstwa zabezpieczająca może skutecznie zniechęcić potencjalnego włamywacza i to jest duża zaleta stosowania tego typu rozwiązań. Dodatkowo wsparcie sprzętowe można najczęściej wyłączyć i wiele z opisywanych dalej aplikacji będzie działać bez niego.
Tylko że dalej jest jedno małe "ale" - mogą one nawet wtedy zawierać potencjalne luki i potencjalnie wpływać na system operacyjny gospodarza, choćby przez dołączane do niego sterowniki.
Z ciekawostek - w Ubuntu mamy dostępną aplikację imvirt, która pokazuje czy jest uruchomiona w maszynie wirtualnej czy nie.
Oprogramowanie dostępne jest w wersji pełnej i Open Source (OSE). W tej drugiej ze względów licencyjnych brak np. obsługi USB, jest ona natomiast dostępna standardowo w Ubuntu, w Centrum Oprogramowania Ubuntu, co jest zgodne z zasadami tworzenia tej dystrybucji. W celu jej instalacji uruchamiamy Centrum, w nim w polu wyszukiwania wpisujemy "virtualbox" i naciskamy Enter.
Wybieramy VirtualBox OSE i klikamy przycisk Zainstaluj. Możemy zostać wtedy poproszeni o wpisanie hasła administratora.
Po pobrana aplikacja zostanie zainstalowana, w menu systemowym w Akcesoria zobaczymy wtedy ikonkę VirtualBox OSE.
Poniżej widać ekran główny programu - na liście widać stworzone maszyny, informację o ich ustawieniach (zakładka Szczegóły), zapisane przez nas ich stany w danym momencie (np. z załadowanymi konkretnymi aplikacjami - zakładka Migawki) oraz podany przez nas opis (zakładka Opis). W menu głównym czy też menu dostępnym pod prawym klawiszem myszy mamy dostępne okno z ustawieniami.
W celu stworzenia nowej maszyny należy kliknąć przycisk Nowa - zostanie wtedy uruchomiony kreator jak na obrazku poniżej.
Klikamy przycisk Dalej, na kolejnym ekranie wpisujemy nazwę naszej maszyny i wybieramy system operacyjny, który będziemy chcieli tam zainstalować.
Po naciśnięciu Dalej wskazujemy wielkość pamięci RAM przydzielonej symulowanej maszynie.
Następnie w kreatorze możemy stworzyć nowy dysk (zostanie otwarty opisany dalej kreator) albo wybrać jeden z istniejących (wtedy zobaczymy przedstawiony niżej menedżer dysków).
Kolejny krok związany jest z potwierdzeniem parametrów maszyny.
VirtualBox ma łatwe w użyciu okno do wyboru plików z dyskami twardymi, obrazami płyt albo dyskietek. Kliknięcie przycisku Dodaj pozwala wybrać odpowiedni zbiór, natomiast Nowy otwiera odpowiedni kreator. Obsługiwane są tutaj formaty VMDK firmy VmWare (używamy m.in. przez opisywanego dalej VmWare Playera), VHD promowany m.in. przez Microsoft, własny VDI oraz Parallers znany z komercyjnych produktów firmy o tej nazwie.
Po otwarciu kreatora do tworzenia nowego dysku zobaczymy ekran jak na rysunku. Klikamy Dalej.
Wybieramy teraz typ dysku - podajemy, czy jego wielkość na fizycznym nośniku ma od razu odpowiadać zadeklarowanej przez nas czy też ma być możliwie mała (rosnąć w miarę potrzeb maksymalnie do podanej wielkości).
Kolejny krok to wskazanie wielkości dysku.
Na końcu potwierdzamy wybrane wcześniej ustawienia.
Po wejściu w opcję ustawień maszyny wirtualnej możemy zobaczyć bardziej rozbudowane opcje, wybrana ich część została pokazana niżej. I tak Włącz obsługę VT-x/AMD-V uaktywnia obsługę wsparcia sprzętowego.
Opcja Włącz akcelerację 3D pozwoli symulowanemu systemowi na przyspieszenie grafiki 3D.
Z kolei uzyskanie takiego dostępu do sieci jak w systemie gospodarza umożliwi ustawienie Mostkowana karta sieciowa (bridged). Nawiasem mówiąc - w Windows (jako systemie gospodarza) dodawana jest jedna karta sieciowa i możemy ją wyłączyć o ile korzystamy tylko z ustawienia mostkowanego.
Dodatki do VirtualBoxa
Po uruchomieniu maszyny wirtualnej warto zainstalować w niej różne dodatki.
W tym celu należy z menu Urządzenia wybrać opcję Zainstaluj Dodatki. W symulowanej maszynie pojawi się wtedy dodatkowy napęd CD z płytą VBOXADDITIONS - w Ubuntu standardowo widoczna będzie jego ikona na pulpicie. Wystarczy kliknąć na niej dwa razy myszą, w otwartej Przeglądarce plików wybrać opcję Otwórz pytanie o automatyczne uruchamianie, potwierdzić (przycisk Uruchom), podać hasło administratora i już po chwili całość będzie zainstalowana.
Tak przygotowany system jest w stanie korzystać z rozdzielczości większej niż 800x600. Aby to zrobić, w menu Maszyna okna maszyny wirtualnej zaznaczamy opcję Włącz automatyczne skalowanie ekranu gościa i następnie skalując okno w zależności od potrzeb uzyskamy żądany rozmiar. Opcja ta jest bardzo często użyteczna z jeszcze jednego powodu - zmiana wymiarów wymusza odświeżenie ekranu gościa.
Możliwe jest także użycie trójwymiarowych efektów - symulowana maszyna zachowuje się tak, jakby umieszczono w niej kartę graficzną z odpowiednim wsparciem sprzętowym. Całość współdziała z efektami graficznymi pulpitu w Ubuntu - wystarczy kliknąć na Wygląd z menu systemowego Preferencje, przejść do zakładki Efekty wizualne, wybrać inną opcję niż Brak i kliknąć przycisk Zamknij.
System i maszyna wirtualna mogą również współdzielić jakiś katalog. Pierwszym krokiem w celu uaktywnienia tej funkcjonalności jest wejście np. w ustawienia maszyny i użycie opcji za zakładce Współdzielone katalogi.
Następnie w symulowanej maszynie tworzymy katalog (np. komendą mkdir).
Kolejną czynnością jest "podłączenie" tam katalogu z hosta (komenda mount uruchomiona z uprawieniami administratora). Przykład pokazano na ekranie poniżej:
sudo mount -t vboxsf -o rw,uid=1000,gid=1000 testowy ~/katalog
gdzie obie liczby
New">1000 zostały odczytane dla użytkownika z wyniku działania komendy id, zamiast
New">testowy podajemy nazwę zasobu wpisaną w ustawieniach maszyny wirtualnej, a zamiast ~/katalog pełną ścieżkę do katalogu gościa.
Wyraźnie brakuje tutaj łatwiejszego rozwiązania (np. przeszukiwania okna podobnego do Otoczenia Sieciowego w Windows).
Następnie należy uruchomić Menedżer aktualizacji (System\Administracja\Menedżer aktualizacji). W nim klikamy na przycisk Ustawienia, przechodzimy do zakładki Inne oprogramowanie i klikamy na przycisk Dodaj. W otwartym oknie wklejamy tekst
deb http://download.virtualbox.org/virtualbox/debian lucid non-free
Następnie klikamy na przycisk Dodaj źródło i w oknie powinniśmy zobaczyć dodatkową linijkę
Przechodzimy teraz do zakładki Uwierzytelnianie. Klikamy na przycisk Zaimportuj plik klucza i wskazujemy na plik oracle_vbox.asc. Powinniśmy wtedy zobaczyć nowy wpis
QEMU jest emulatorem stworzonym przez Fabrice Bellarda, a KVM (skrót od Kernel-based Virtual Machine) opartym na nim rozwiązaniem dostępnym od wersji 2.6.20 jądra Linuksa. Dokładniej mówiąc, jest maszyną wirtualną wymagającą wirtualizacji sprzętowej składającej się z modułów jądra i zmodyfikowanej wersji QEMU.
W Ubuntu w Centrum Oprogramowania Ubuntu wyszukujemy qemu-kvm i instalujemy pakiet o tej samej nazwie. Dyski są zapisywane w formatach CLOOP (Linux Compressed Loop), COW (znany z User Mode Linux), VMDK (znów znany z produktów VmWare), QCOW i QCOW2 (oba własne) oraz RAW.
KVM zawiera moduły jądra. Czasem mogą one kolidować z innym oprogramowaniem. Należy je wtedy wyłączyć np. poprzez wydanie odpowiednich komend z konsoli - podaję wersję dla procesorów Intela:
sudo modprobe -r kvm_intel
sudo modprobe -r kvm
Ich uaktywnienie uzyskamy z kolei poprzez:
sudo modprobe kvm-intel
Oba rozwiązania wymagają skorzystania z linii komend. Z tego względu dodatkowo warto zainstalować program, który zaoferuje wygodny interfejs obsługi. Do celów testowych w Centrum został wybrany pakiet aqemu - dzięki niemu w menu Narzędzia systemowe pojawiła się aplikacja AQEMU. Program ten jest dosyć prosty w obsłudze, wymaga jedynie znajomości języka angielskiego.
Po naciśnięciu zielonego przycisku "+" na liście dodawana jest nowa maszyna. Jej konfigurację uzyskujemy poprzez zakładki po prawej stronie okna - i tak np. w General jesteśmy w stanie ustawić ilość przydzielanej pamięci RAM czy typ karty dźwiękowej.
Poniżej zostały pokazane wykorzystywane ustawienia dla QEMU.
KVM był bardzo podobny w konfiguracji
Dodatkowo wymagane były tylko dwie czynności - na zakładce HDD niezbędne było wskazanie pliku z obrazem dysku twardego oraz dodanie karty sieciowej na zakładce Network (przyciskiem Add).
Maszyny wirtualne uruchamiane z użyciem tych rozwiązań nie mają żadnych dodatków, w oknie z maszyną nie ma także żadnych informacji o stanie symulowanych urządzeń (np. czy aktualnie pracuje dysk twardy).
Rozwiązania VmWare/Player
Firma VmWare ma w swojej ofercie szereg komercyjnych rozwiązań wirtualizacyjnych. Jej produkty znają np. użytkownicy komputerów Apple z procesorem Intela (płatny VmWare Fusion pozwalający na uruchamianie okienek firmy Microsof), jest też darmowy VmWare Server i VmWare Player.
Poniżej zostanie przedstawiony ten ostatni pakiet. Jego pobranie wymaga bezpłatnego założenia konta i rejestracji na stronie producenta.
Po ściągnięciu pliku z końcówką bundle w Ubuntu należy go uruchomić z prawami administratora - jedna z możliwości to kliknięcie prawym klawiszem myszy na tym zbiorze w standardowej Przeglądarce plików, wybranie opcji Otwórz za pomocą... i uruchomienie z aplikacją gksudo.
Później podajemy hasło administratora i możemy oglądać bardzo prosty program instalacyjny (wystarczy w nim klikać na przyciski Next i Install).
Aplikacja (widoczna w Ubuntu w menu Narzędzia systemowe) ma podobny układ jak VirtualBox. Jej minusem może być brak polonizacji oraz współdziałanie wyłącznie z własnym formatem dysków VMDK.
W ustawieniach maszyn również mamy praktycznie te same możliwości co w VirtualBox - można wybierać ilość rdzeni procesora, łatwo dodawać i usuwać dyski, podłączać urządzenia USB, itd.
W Windows (jako systemie gospodarza) dodawane są dwie karty sieciowe - możemy wyłączyć obie o ile używamy mostkowanego połączenia karty sieciowej.
Ciekawostką jest możliwość zapisywania jednego wirtualnego dysku w wielu plikach (gdzie każdy z nich jest jego częścią).
Inną ciekawą opcją jest funkcja wykorzystania fizycznego dysku czy też jego partycji. W tym celu przy dodawaniu nowego dysku do maszyny (np. poprzez przycisk Add w jej ustawieniach) w kreatorze należy wybrać trzecią dostępną opcję (Use a physical disk).
Dostępne są również dodatki do symulowanych maszyn. W przypadku Ubuntu ich instalacja nie jest niestety tak wygodna jak w przypadku opisywanego wcześniej konkurenta.
Po uruchomieniu maszyny wirtualnej i kliknięciu na opcję Install VmWare Tools w menu głównym jej okna, w maszynie widoczny będzie napęd z płytą VMWare Tools. Znajduje się w nim archiwum w formacie tar.gz. Należy go najpierw rozpakować - po kliknięciu na ikonę napędu na pulpicie trzeba kliknąć prawym przyciskiem myszy na tym pliku, wybrać opcję Otwórz za pomocą menedżer archiwów, w otwartym programie wybrać opcję dekompresji, czyli z menu Plik opcję Rozpakuj.
Następny krok to uruchomienie terminala (Akcesoria\Terminal). Przechodzimy w nim do katalogu z rozpakowanymi plikami - zamiast katalog podajemy pełną ścieżkę do niego:
cd katalog
...i uruchamiamy instalację:
sudo ./vmware-install.pl
Program działa w trybie tekstowym i wymaga np. odpowiedzi na pytania, w jakich katalogach umieszczać pliki. Można naciskać klawisz Enter i zgadzać się na proponowane wartości. Po instalacji system warto zrestartować.
Uruchomienie dodatków uzyskujemy wydaną z terminala komendą:
sudo vmware-toolbox
Na usunięcie tych narzędzi pozwoli z kolei:
sudo vmware-uninstall-tools.pl
Mamy również wersję Open Source wspomnianych dodatków, tworzoną w ramach projektu Open Virtual Machine Tools - w Centrum Oprogramowanie Ubuntu jest to m.in. pakiet VMWare User Agent. Niestety po jego zainstalowaniu i wybraniu w menu odpowiedniej pozycji nic się nie dzieje. Z kolei sudo vmware-toolbox uruchomi dokładnie tę samą aplikację co w wersji "komercyjnej".
Żeby usunąć VmWare Playera w Ubuntu należy otworzyć terminal i wpisać w nim komendę:
sudo bash vmware-installer -u vmware-player
Podczas testowania tej aplikacji w Ubuntu widoczne było niestety dosyć nieprzyjemne cechy:
Podczas używania maszyny wirtualnej z Windows XP zdarzało się, że komputer (również host) był po prostu zawieszany (całkowicie lub czasowo)
Przydzielenie jednego rdzenia procesora powodowało, że system hosta miał obciążone dwa rdzenie w całości
Również w Windows XP zdarzało się, że wielokrotne włączanie i wyłączanie maszyn z połączeniem sieciowym doprowadzało do tego, że system hosta nie był w stanie się wyłączyć (wieszał się na ekranie Windows is shutting down...) albo nie można było w nim włączyć/wyłączyć karty sieciowej.
Dużym rozczarowaniem jest niestety brak działającego wsparcia sprzętowego dla grafiki 3D w Ubuntu jako systemie gościa, pomimo istnienia odpowiedniej opcji.
Windows Virtual PC zawiera dodatki dla Windows XP SP3, Vista SP1 oraz 7, maszyna z Windows XP ma je w sobie zainstalowane i od razu np. dzieli dyski twarde z gospodarzem czy pozwala na dodanie do menu Start gospodarza wpisów dotyczących zainstalowanych w niej aplikacji (opcja Narzędzia/Ustawienia/Automatyczne publikowanie w oknie maszyny).
Możliwe jest tutaj również współdzielenie różnych urządzeń (np. podłączonych do interfejsu USB) albo tworzenie maszyn z innymi systemami operacyjnymi - wspierane są tylko te 32-bitowe.
Poniżej przedstawiamy rozwiązanie dostępne dla użytkowników Windows XP/Vista - to darmowa aplikacja Virtual PC 2007 SP1.
Po pobraniu niezbędna jest krótka instalacja - prośba o wskazanie katalogu, zaakceptowanie licencji i podanie danych oraz tego, czy program ma być dostępny dla wszystkich użytkowników systemu.
Po instalacji w menu Start pojawia się nowa ikona Microsoft Virtual PC, w ustawieniach karty sieciowej widoczna jest usługa Virtual Machine Network Services.
Pierwsze uruchomienie i widać dosyć standardowe okno (polski język nie jest obsługiwany).
Jest też kreator. Klikamy w nim przycisk Next.
Ponieważ interesuje nas nowa maszyna, najlepsza będzie pierwsza opcja (Create a virtual machine). Wybieramy ją i klikamy przycisk Next.
Program standardowo proponuje zapisanie katalogu z plikami maszyny w My Documents - można to oczywiście zmienić korzystając z Browse. Podajemy nazwę i klikamy Next.
Teraz potwierdzamy system operacyjny gościa i klikamy Next.
Na kolejnym ekranie możemy wybrac ilość RAM.
Kolejne pytanie dotyczy wyboru dysku twardego - można wybrać istniejący (format VHD) lub stworzyć nowy.
Na końcu trzeba jeszcze potwierdzić i maszyna zostaje stworzona.
Po stworzeniu maszyny jej nazwa pojawi się w głównym oknie programu. Można ją uruchomić lub wejść w ustawienia. Dosyć ciekawą funkcją jest Undo Disks, która pozwala na pracę z maszyną, a później na powrót do jej wcześniejszego stanu (tego, co było wczesniej zapisane na dysku). Mamy opcję współdzielonych folderów, która wymaga zainstalowania dodatków w maszynie.
Z kolei z głównego menu programu lub z opcji związanych z dyskami twardymi można uruchomić kreatora dysków. Pozwoli on na ustawienie, żeby plik z dyskiem miał cały czas zadeklarowaną wielkość, a nie ustalaną stosownie do potrzeb i równą podanej tylko w najgorszym przypadku, albo spakowanie zawartości.
Dodatki do maszyn przeznaczone są dla OS2, DOS i Windows. Ciekawostką jest, że oprogramowanie to nie pozwoliło na testowym komputerze na użycie sprzętowej wirtualizacji oraz to, że w maszynach nie działało przewijanie w myszy.
DOS wiecznie żywy
Co zrobić, gdybyśmy chcieli zagrać w jedną z gier do DOS?
Możliwości jest kilka - jednym rozwiązaniem jest instalacja DOS-a (chociażby darmowego FreeDOSa), korzystając z wcześniej przedstawianych rozwiązań, innym zaś skorzystanie z maszyn, które są ukierunkowane na ten typ oprogramowania.
Pierwszy z takich pakietów to DOSBox - w Centrum Oprogramowania Ubuntu szukamy pakietów z frazą dosbox i instalujemy pakiet DOSBox Emulator.
Później pozostaje uruchomienie naszemu emulatora komendą dosbox, a w nim podłączenie katalogu z naszymi plikami:
mount /home/marcin/virtual D: -t cdrom
Program emuluje 32-bitową platformę x86 zgodnie z informacją z zamieszczonego powyżej zrzutu ekranu - wprowadzenie można obejrzeć po użyciu komendy intro.
Ciekawostką jest, że wersje DOSBoksa działające na platformie Symbian i Android pozwoliły na uruchomienie tam Windows 3.1.
Jest również DOSEmu - W Centrum Oprogramowania Ubuntu szukamy pakietów z frazą dosemu i instalujemy pakiet DOS Emulator. Obsługiwane jest również jedynie oprogramowanie 32-bitowe.
Próba uruchomienia komendą dosemu w terminalu może skończyć się wyświetleniem komunikatu:
LOWRAM mmap: Operation not permitted
Cannot map low DOS memory (the first 640k).
You can most likely avoid this problem by running
sysctl -w vm.mmap_min_addr=0
as root, or by changing the vm.mmap_min_addr setting in
/etc/sysctl.conf or a file in /etc/sysctl.d/ to 0.
Zgodnie z podaną sugestią można użyć komendy:
sudo sysctl -w vm.mmap_min_addr=0
...i już po chwili np. komenda:
dosemu &
pozwoli na zadziałanie tego programu.
Jak widać na pokazanym niżej ekranie, dysk D domyślnie zawiera pliki z katalogu domowego użytkownika.
Java na zawsze?
Przyszedł czas na rozwiązania, które może niekoniecznie są bardzo uniwersalne czy dopracowane, ale za to mają pewne unikalne cechy albo są po prostu klasyką w branży.
Java jest niewątpliwie językiem o dużych możliwościach (jeżeli ktoś w to wątpi, można obejrzeć odpowiednie wideo Java.no).
A gdyby tak emulować z jej użyciem całą platformę x86?
JPC to próba realizacji takiego rozwiązania. Autorzy szacują jego wydajność na poziomie 20% rzeczywistej prędkości maszyny. Obecnie nie uruchomimy w ten sposób Ubuntu czy Windows XP, ale np. DSL (Damn Small Linux) już tak. Obsługiwany format dysku to tym razem RAW.
Całość możemy sprawdzić w przeglądarce albo uruchomić jako oddzielny program - potrzebna jest jedynie maszyna wirtualna Javy. W przypadku Ubuntu przed instalacją jej wersji dostarczonej przez firmę Sun trzeba wykonać pewien dodatkowy krok, czyli wydać komendy z terminala:
...albo dodać napis w cudzysłowie w aplikacji Źródła Oprogramowania (podobnie jak było to opisane wcześniej dla VirtualBox). Później wystarczy w Centrum Oprogramowania Ubuntu zainstalować pakiet Wtyczka Sun Java 6, przy wyłączonej przeglądarce.
Następnie odwiedzamy stronę domową i już można wybierać jeden z systemów do testowania.
Widoczne są tutaj niestety pewne problemy z udostępnianymi dystrybucjami Linux - choćby z kursorem myszy. Bardzo dobrze z kolei działają programy dla DOS obsługiwane z użyciem klawiatury.
FAUMachine wyróżnia się tym, że nie wymaga żadnych modułów jądra ani uprawnień administratora. Potencjalnie więc wpływa mniej na system gospodarza.
W Centrum Oprogramowania Ubuntu instalujemy pakiet FAUMachine, aplikacja pojawia się w menu Narzędzia systemowe pod nazwą FAUMachine.
Przy pierwszym uruchomieniu podajemy katalog, w którym będą zapisywane maszyny, i parametry - architekturę 32- czy 64-bitową (ta druga tylko dla procesorów AMD), wielkość RAM i dysku.
Widać tutaj niestety bardzo duże ograniczenia aplikacji - np. RAM to maksymalnie 256 MB. Po wstępnej konfiguracji kolejna jest możliwa wyłącznie przez edycję pliku ~/.faumrc. Pliki z maszyną mają dosyć nietypowe nazwy - jeżeli umieścimy je na partycji NTFS, Windows będzie mieć problemy z ich usunięciem.
Przyjęte rozwiązania są dalekie od intuicyjności, brak też jakiegokolwiek opisu na stronie projektu. Z ciekawostek: program pozwala na posiadanie procesora Pentium II działającego z prędkością 2,0 GHz. :-)
W Centrum Oprogramowania Ubuntu szukamy pakietów z frazą bochs i instalujemy pakiet IA-32 PC Emulator.
Program pozwala na emulację 32-bitowej platformy x86.
Jest obsługiwany i konfigurowany tylko z konsoli, z tego względu został potraktowany w artykule wyłącznie jako ciekawostka.
Obrazy dysków
Dyski twarde używane przez maszyny wirtualne są najczęściej fizycznie plikami w różnych formatach: VMDK (VmWare), VHD (Microsoft), VDI (VirtualBox), itp. Jak poradzić sobie z ich obsługą ?
Konwersję między większością formatów zrobimy z użyciem qemu-img, przykładowe wywołanie z konsoli może wyglądać tak:
qemu-img convert -O raw plik_wejsciowy.vhd plik_wyjsciowy.bin
Jest też narzędzie VBoxManage, które pozwoli na obsługę VHD, VDI i VMDK. Konwersję pliku uzyskamy tutaj przez:
Jeżeli chcielibyśmy zmienić rozmiar pliku VMDK (tzn. pliku, a nie partycji w nim zapisanych), opcja do tego znajduje się w pakiecie VmWare Player przy ustawieniach maszyn wirtualnych, do których ten plik podłączono.
Pakiet ten zawiera jeszcze jedną przydatną aplikację: vmware-fuseUI - pozwala na łatwe "podłączenie" zawartości pliku VMDK w jakimś katalogu systemu plików. Z kronikarskiego obowiązku: podobne rozwiązanie ma Windows 7 (w odniesieniu do plików VHD).
Limitowanie sieci
Praktycznie każda z przedstawionych wcześniej maszyn ma funkcje ustawiania ilości rdzeni procesora czy dostępnej ilości pamięci RAM. Niestety żadna nie potrafi ograniczyć pasma przeznaczonego dla karty sieciowej. Czy da się coś z tym zrobić?
Można założyć odpowiednie ograniczenie w samej maszynie wirtualnej. Ubuntu ma do tego celu narzędzie wondershaper. W celu ustawienia limitu wydajemy komendę z konsoli:
wondershaper eth0 100 200
gdzie zamiast eth0 podajemy nazwę naszego interfejsu sieciowego (uzyskamy ją np. poprzez komendę ifconfig), zamiast 100 prędkość pobierania w kilobitach/s i zamiast 200 prędkość wysyłania w kilobitach/s.
Przygotowana została maszyna wirtualna z 32-bitowym Ubuntu 10.04. Dodawano/usuwano w niej dodatki proponowane przez producentów opisywanych rozwiązań oraz konwertowano format dysku twardego (z VMDK na VHD). Do celów testowych maszyny wirtualne miały ilość RAM ograniczoną do 512 MB, zawsze (czy to w systemach rzeczywistych czy maszynach wirtualnych) ustawiano rozdzielczość 800x600 i przydzielano tylko jeden z dwóch fizycznych rdzeni procesora Core 2 Duo.
W takiej konfiguracji przetestowaliśmy najpierw przeglądarki WWW. Na pierwszy ogień poszedł Firefox 3.6.6 i test PeaceKeeper, w którym większa ilość punktów oznacza lepszy wynik.
Sprawdziliśmy również wyniki SunSpider 0.9 (tutaj liczy się czas wykonania operacji). Z dosyć oczywistego względu nie sprawdziliśmy już tutaj (i dalej) wydajności QEMU.
Przetestowana została także przeglądarka Chromium 5.0.375.99. W wynikach widoczny jest rozrzut znacznie większy niż w przypadku Firefoksa, co może sugerować o nieprzydatności użytego testu w przypadku tego programu (trudno ocenić, czy jest to kwestia wbudowanych optymalizacji czy przyczyna jest inna).
Również pewne wątpliwości budzi wynik dla KVM - test wskazywał większe wartości niż w rzeczywistym systemie i również trudno stwierdzić, czy jest to wynik zastosowania jakichś operacji związanych z zegarem czy innych czynników. Dalej przyjęliśmy, że opóźnienie tutaj wynosi 0, gdyż raczej trudno przyjąć, że aplikacja może działać szybciej.
Ze względu na obecność działającej akceleracji 3D podjęliśmy próbę uruchomienia jednego z bardziej rozbudowanych benchmarków graficznych (opartego na silniku Unigine). W tym celu w Centrum Oprogramowania Ubuntu zainstalowany został pakiet phoronix-test-suite, następnie w konsoli wydano komendę:
phoronix-test-suite benchmark unigine
O ile w rzeczywistym Ubuntu uzyskano odpowiednie wyniki, o tyle w VirtualBox test niestety zwyczajnie się nie uruchomił - jest to o tyle ciekawe, że rozszerzenia Compiz i gra TuxRacer nie miały tam większych problemów. Najbardziej prawdopodobna przyczyna to brak wsparcia dla jakichś bardziej zaawansowanych funkcji OpenGL.
Sprawdzone zostały inne zestawy testów związanych z grafiką - chociażby phoronix-test-suite benchmark xrender i phoronix-test-suite benchmark x-testing. Skutek był niestety ten sam...
Phoronix zawiera również inne rodzaje benchmarków - ich pełną listę można poznać poprzez phoronix-test-suite list-suites. Wybrany został test cryptography, a z niego wynik drugiego testu (OpenSSL), czyli znów czas wykonania się pewnych operacji zależny od wydajności obliczeń i operacji dyskowych.
System gospodarza
Rozwiązanie
Sprzętowa wirtualizacja
OpenSSL (znaki/s)
Opóźnienie (%)
Ubuntu
brak
nie
12.72
0
Ubuntu
KVM 0.12.3
tak
12.47
2
Ubuntu
VirtualBox 3.2.6 r63112
tak
12.32
3
Windows XP
VirtualBox 3.2.6 r63112
tak
12.20
4
Ubuntu
VmWare Player 3.1.0 build-261024
nie
12.12
5
Windows XP
VmWare Player 3.1.0 build-261024
nie
11.97
6
Ubuntu
VmWare Player 3.1.0 build-261024
tak
11.90
6
Windows XP
VirtualBox 3.2.6 r63112
nie
11.75
8
Windows XP
VmWare Player 3.1.0 build-261024
tak
10.76
15
WIndows XP
Virtual PC 2007 SP1
nie
10.72
15
Ubuntu
VirtualBox 3.2.6 r63112
nie
9.86
22
Wykonaliśmy także test związany z pamięcią. W tym celu w Centrum Oprogramowania Ubuntu pobraliśmy aplikację mbw, a następnie wprowadziliśmy z konsoli komendę:
mbw -n 3 -t0 256
256 oznacza 256 MB przetestowanej pamięci, 3 to ilość powtórzeń, a -t0 wymusza wybranie pierwszego testu. Liczby związane są z prędkością (im mniejsze, tym lepsze).
System gospodarza
Rozwiązanie
Sprzętowa wirtualizacja
mbw -n 3 -t0 256
Opóźnienie (%)
Elapsed
Średnia
Ubuntu
brak
nie
0.21, 0.21, 0.21
0
0
Ubuntu
KVM 0.12.3
tak
21, 18, 27
22
22
Ubuntu
VirtualBox 3.2.6 r63112
tak
19, 23, 26
23
23
Ubuntu
VirtualBox 3.2.6 r63112
nie
22, 20, 30
24
24
Windows XP
Virtual PC 2007 SP1
nie
36, 20, 43
33
33
Windows XP
VmWare Player 3.1.0 build-261024
tak
53, 41, 84
60
59
Ubuntu
VmWare Player 3.1.0 build-261024
nie
75, 70, 52
66
66
Windows XP
VirtualBox 3.2.6 r63112
tak
64, 75, 127
89
89
Ubuntu
VmWare Player 3.1.0 build-261024
tak
82, 108, 104
98
98
Windows XP
VirtualBox 3.2.6 r63112
nie
114, 82, 140
112
112
Windows XP
VmWare Player 3.1.0 build-261024
nie
72, 99, 274
148
148
Podsumowanie
Czy rozwiązania wirtualizacyjne pozwalają łatwo testować aplikacje w odosobnieniu? Tak - nowe systemy można tworzyć dosyć prosto, do wygodnej pracy wymagana jest jedynie odpowiednia ilość pamięci RAM oraz przynajmniej dwurdzeniowy procesor.
Oprócz zalet są i wady - pewne kwestie z dzieleniem przepustowości łącza sieciowego, wpływanie na "główny" system operacyjny (np. zawieszanie go), emulacja czasem archaicznych urządzeń i standardów, konieczność pamiętania o bezpieczeństwie. Do tego dochodzą duże problemy z grafiką 3D, czasem również trzeba użyć konsoli, co może być męczące dla niektórych użytkowników.
Jest też problem wydajności - niewątpliwie najlepiej używać systemów operacyjnych gościa mających mikroskopijne wymagania sprzętowe. Testowany Ubuntu 10.04 dosyć dobrze spełnia to ostatnie.
Z wymienionych względów maszyny wirtualne do niektórych zastosowań zwyczajnie się nie nadają. A która jest najlepsza?
Przedstawione wcześniej testy pozwoliły na uzyskanie następujących wyników:
System gospodarza
Rozwiązanie
Sprzętowa wirtualizacja
Opóźnienie (%)
Firefox
Chromium
Open SSL
mbw
Średnia
Peace Keeper
Sun Spider
Peace Keeper
Sun Spider
Ubuntu
KVM 0.12.4
tak
8
25
0
0
2
22
10
Ubuntu
VmWare Player 3.1.0 build-261024
nie
13
25
0
13
5
66
20
Ubuntu
VmWare Player 3.1.0 build-261024
tak
17
18
7
8
6
98
26
Ubuntu
VirtualBox 3.2.6 r63112
tak
25
47
35
61
3
23
32
Ubuntu
VirtualBox 3.2.6 r63112
nie
18
32
28
137
22
24
44
Windows XP
VmWare Player 3.1.0 build-261024
nie
20
93
31
44
6
148
57
Windows XP
VmWare Player 3.1.0 build-261024
tak
23
125
32
155
15
59
68
Windows XP
Virtual PC 2007 SP1
nie
49
124
53
141
15
33
69
Windows XP
VirtualBox 3.2.6 r63112
tak
24
164
18
150
4
89
75
Windows XP
VirtualBox 3.2.6 r63112
nie
29
98
36
192
8
112
79
Ubuntu
QEMU 0.12.4
nie
95
-
-
-
-
-
95
Być może rozkład wyników byłby zupełnie inny, gdyby w maszynie wirtualnej działał Windows albo gdyby użyto innych testów. Obecnie można wysnuć następujące wnioski:
Przedstawione rozwiązania pod względem wydajności można uszeregować następująco: KVM (wymaga jednak wsparcia sprzętowego), VmWare Player, Virtual PC, VirtualBox i QEMU.
Wsparcie sprzętowe niekoniecznie pozwala na wzrost wydajności.
Opisywane aplikacje działają szybciej pod kontrolą Ubuntu niż Windows - może to być jednak związane z faktem, że ten drugi system wymagał np. programu antywirusowego.
Biorąc pod uwagę przenośność, faworytami będa tutaj VmWare Player i VirtualBox, wybór konkretnego z nich zależeć będzie wyłącznie od preferencji użytkownika - np. tego, czy zależy mu na efektach graficznych czy nie.
Czy jest lepsze rozwiązanie? Można próbować z instalacją oddzielnego systemu do "różnych eksperymentów" bez dodatkowego partycjonowania - np. na pamięciach flash. Bardzo elastyczne są dystrybucje Linuksa, a odpowiedni opis można znaleźć dla każdej liczącej się na rynku.
Drugim rozwiązaniem jest plik udający partycję, na co pozwala np. Windows 7 Professional, Ultimate i Enterprise, czy też Linuksy z użyciem instalatora w technologii WUBI. Wtedy jednak systemy dalej będą miały dostęp do wszystkich dysków, natomiast po zastosowaniu szyfrowania może to być na dłuższą metę uciążliwe.
I stąd wniosek może być tylko jeden - jeżeli chcemy coś potestować w rzeczywistym odosobnieniu przy obecnej architekturze systemów operacyjnych, najlepiej - choć nie będzie to zbyt wygodne - umieścić to w innej instalacji systemu, a tę np. na innym dysku twardym, który będzie podłączany zamiast tego "właściwego". Zawsze można też, rzecz jasna, kupić drugi komputer. ;-) Stara prawda mówiąca o tym, że udawana kopia jest zawsze gorsza od oryginału, ciągle jest aktualna.