W tym poradniku chciałem przedstawić poszczególne kroki konfiguracji wirtualnej maszyny z Windows7 na potrzeby zajęć dydaktycznych. Na ile to będzie możliwe poszczególne czynności będą wykonywane za pomocą poleceń w konsoli, a nie za pomocą narzędzi graficznych.Takie podejście pozwala na pisanie skryptów, które potrafią znacznie ułatwić pracę w przypadku kiedy te same czynności należy wykonać kilka/kilkanaście razy.
Jedną z najbardziej przydatnych, a niestety mało znanych funkcji VirtualBoxa, która zostanie omówiona jest możliwość zmiany trybu pracy dysku i przełączenie go w stan resetu danych po każdym wyłączeniu maszyny wirtualnej.
Mam nadzieje, że przedstawione porady okażą się również przydatne dla typowego użytkownika komputera, a nie tylko dla osoby przygotowującej sale na zajęcia lub szkolenia.
Czynności wstępne
Na początek gorąco polecam zapoznać się z oficjalną dokumentacją narzędzia VBoxManage, które pozwala na wykonanie tych samych (a nawet więcej) czynności co ogólnie znany interfejs graficzny VirtualBoxa (strona dokumentacji tego narzędzia). Większość kroków w tym poradniku wykonanych jest za jego pomocą. Nie piszę jednak szczegółowych opisów dla poszczególnych poleceń, dlatego właśnie odsyłam do dokumentacji.
Pierwszą czynnością administracyjną, którą polecam na początek jest przygotowanie dodatkowego użytkownika, którego możemy nazwać np. "windows". Docelowo dla tego użytkownika zostanie ustawione, aby zaraz po zalogowaniu do systemu startowała wirtualna maszyna z Windows7. Można oczywiście ten krok pominąć i skonfigurować sobie VirtualBoxa do pracy na obecnie używanym koncie użytkownika.
Dodać nowego uzytkownika w Ubuntu możemy wybierając odpowiednio w menu:
System → Administracja → Użytkownicy i grupy → Dodaj.
Instalacja VirtualBox
Instalację VirtualBoxa najlepiej przeprowadzać zgodnie z oficjalnym opisem zamieszczonym na stronie: http://www.virtualbox.org/wiki/Linux_Downloads. W Ubuntu sprowadza się to do dodania odpowiedniego repozytorium, pobrania i dodania kluczy uwierzytelniających oraz instalacji następujących pakietów:
sudo apt-get install virtualbox-3.2 dkms
Utworzenie wzorcowej maszyny wirtualnej
Przed stworzeniem pierwszej maszyny wirtualnej, która może być wzorcem do tworzenia kolejnych maszyn trzeba zalogować się na konto "windows" i tam uruchomić VirtualBoxa. Zaraz po zaakceptowaniu licencji można wyłączyć program.
W tym momencie można jeszcze utworzyć katalog, który będzie współdzielony pomiędzy Ubuntu, a Windowsem:
mkdir /home/windows/share
Tworzenie maszyny wirtualnej można wykonać w prosty sposób w konsoli. Takie podejście zostanie tutaj omówione. Osobom, które nie chcą szczegółowo wgłębiać się w poszczególne parametry i czytać dokumentację VBoxManage, polecam jednak interfejs graficzny. Tam wygodny kreator poprowadzi nas za rękę i znaczną część pracy zrobi za nas w tle. Później dla przećwiczenia polecam przygotowanie odpowiednich poleceń konsoli, które zrobią dokładnie to samo, co wcześniej ustawiliśmy w narzędziu graficznym.
Tworzenie wirtualnej maszyny dla Windows7 może składać się z następujących kroków:
- Utworzenie i automatyczne zarejestrowanie wirtualnej maszyny dla 32-bitowego Windows7:
VBoxManage createvm --name Windows7_01 --ostype Windows7 --register
- Szczegółowa konfiguracja parametrów wirtualnej maszyny (szczegóły można doczytać w dokumentacji polecenia modifyvm):
VBoxManage modifyvm Windows7_01 --memory 1780 --vram 40 --accelerate3d on --accelerate2dvideo on --boot1 dvd --boot2 disk --boot3 none --cpus 2 --pae on --hwvirtex on --largepages on --ioapic on --clipboard bidirectional --usb on --usbehci on
- Udostępnianie lokalnego katalogu dla zwirtualizowanego systemu:
VBoxManage sharedfolder add Windows7_01 --name "share" --hostpath "/home/windows/share"
- Utworzenie kontrolerów IDE i SATA dla nośników danych:
VBoxManage storagectl Windows7_01 --name "Kontroler SATA" --add sata --hostiocache on --controller IntelAhci VBoxManage storagectl Windows7_01 --name "Kontroler IDE" --add ide --hostiocache on --controller PIIX4
- Utworzenie i podpięcie dysku twardego (dysk rozszerzalny o maksymalnym rozmiarze 60GB):
VBoxManage createhd --filename /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi --size 60000 VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi
- Podłączenie napędu CD/DVD z włączoną funkcją zapisu (oczywiście ma to sens jeśli mamy nagrywarkę):
VBoxManage storageattach Windows7_01 --storagectl "Kontroler IDE" --port 1 --device 1 --type dvddrive --medium host:/dev/sr0 --passthrough on
Zarządzanie VirtuaBoxem z poziomu konsoli
Do innych czynności, które możemy wykonać w konsoli można zaliczyć:
- Uruchamianie maszyny wirtualnej. Maszynę możemy uruchamiać na dwa sposoby:
VBoxManage startvm Windows7_01 VirtualBox -startvm Windows7_01
Generalnie skutek wykonania obu poleceń będzie ten sam. Jedyną różnicą jaką ja zauważyłem jest uruchomienie zadania w tle przez pierwsze polecenie, w odróżnieniu od drugiego polecenia, gdzie wiersz polecenia oczekuje na zamkniecie programu VirtualBox. To drugie polecenie przyda się właśnie na etapie konfiguracji GDM (opis w dalszej części poradnika).
- Rejestrowanie maszyny wirtualnej. Przydaje się szczególnie jeśli przekopiujemy maszynę na inny komputer i chcemy z niej korzystać.
VBoxManage registervm /home/windows/.VirtualBox/Machines/Windows7_01/Windows7_01.xml
- Wyrejestrowywanie. Jeśli maszyna nie będzie dłużej wykorzystywana na bierzącym komputerze, bo np. została przeniesiona na inny, warto ją usunąć z wewnętrznego rejestru maszyn wirtualnych VirtualBoxa.
VBoxManage unregistervm Windows7_01
Kiedy mamy już przygotowaną wzorcową maszynę wirtualną z Windows7 i chcielibyśmy ją powielić na inne komputery, warto najpierw zmniejszyć rozmiar wirtualnego dysku. W tym celu należy wykonać dwie czynności:
- Zerowanie pustych bloków na dysku w Windows7 (uwaga: dysk musi być w trybie normal, a nie immutable - tryby te opisane są w dalszej części poradnika). Pomocne w tej czynności będzie małe narzędzie sdelete, które można pobrać ze strony Technet Microsoft (link do narzędzia). W wierszu poleceń w systemie Windows wpisujemy:
sdelete -c
- Kompaktowanie dysku w VirtualBox. Stosujemy polecenie:
VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi --compact
Kolejnym krokiem jest tzw. proces klonowania dysku. Jest to nic innego jak jego kopiowanie z nadaniem mu unikalnego identyfikatora.
VBoxManage clonehd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi /home/windows/.VirtualBox/HardDisks/Windows7_02.vdi --format VDI
Na sam koniec, kiedy przekopiujemy katalog z ustawieniami maszyny wirtualnej oraz dysk wirtualny na inny komputer warto się upewnić, że są ustawione odpowiednie prawa dostępu dla użytkownika windows:
sudo chown windows -R /home/windows/.VirtualBox sudo chgrp windows -R /home/windows/.VirtualBox
Blokada dysków do zapisu
Dyski w VirtualBoxie mogą pracować w różnych trybach zapisu (po szczegóły odsyłam do oficjalnej dokumentacji). Co ciekawe przełaczać się między tymi trybami można jedynie za pomocą narzędzia VBoxManage - okienkowa wersja tego nie umożliwia. Mnie osobiście poza standardowym trybem normal, zainteresował szczególnie tryb immutable, który nie zezwala na zapisywanie trwałych zmian na wirtualnym dysku. Dzięki temu po każdych zajęciach ze studentami, system Windows jest przywracany do pierwotnego, wzorcowego stanu.
Technicznie działa to w ten sposób, że wszystkie zmiany jakie wprowadzi użytkownik podczas pracy w systemie zapisywane są na tak zwanym dysku różnicowym. Stan tego dysku jest resetowany po każdym wyłączeniu maszyny. W przypadku restartu maszyny stan nie jest kasowany, co ma zabezpieczać naszą tymczasową pracę na wypadek zawieszenia się systemu goszczącego (w tym wypadku Windows7).
Do przełączania między tymi dwoma stanami najwygodniej będzie przygotować osobne skrypty:
- Przejście z trybu normal do immutable:
#!/bin/bash VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium none VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi settype immutable VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi echo `date`" : convert normal to immutable" >> vm_log.txt
- Przejście z trybu immutable do normal:
#!/bin/bash VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium none VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi settype normal for file in `ls /home/windows/.VirtualBox/Machines/Windows7_01/Snapshots/*.vdi` do VBoxManage closemedium disk $file --delete done VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi echo `date`" : convert immutable to normal" >> vm_log.txt
Konfiguracja GDM
Do tej pory opisywane kroki należały raczej do standardowych czynności administracyjnych dotyczących zarządzania wirtualna maszyną VirtualBox. Jakiejś szczególnej wygody, o której jest mowa w tytule nie widać. Trzeba się zwyczajnie zalogować do systemu, uruchomić VirtualBoxa i wystartować maszynę z Windows7. Może nie jest to jakość szczególnie skomplikowane, ale każdorazowo wymaga wykonania kilku tych samych czynności. Aby to zmienić i nieco usprawnić uruchamianie Windowsa można przygotować specjalną sesja dla menadżera logowania GDM. Dzięki temu już podczas logowania użytkownik będzie mógł wybrać sesję z VirtualBoxem i automatycznym startem maszyny wirtualnej.
Na początek tworzymy i edytujemy skrypt vm_start.bsh do uruchamiania maszyny wirtualnej:
#!/bin/bash VirtualBox -startvm Windows7_01
Później tworzymy nowy plik z ustawieniami dla sesji GDM:
sudo touch /usr/share/xsessions/windows7.desktop sudo nano /usr/share/xsessions/windows7.desktopdo którego wpisujemy takie ustawienia:
[Desktop Entry] Encoding=UTF-8 Name=Windows7 Comment=Sesja skonfigurowana dla użytkownika "windows". Dla pozostałych nie działa. Exec=/home/windows/.VirtualBox/vm_start.bsh TryExec=/home/windows/.VirtualBox/vm_tools/vm_start.bsh Icon= Type=ApplicationTeraz wystarczy się już wylogować i zalogować ponownie wybierając z listy sesję "Windows7". Powininna wystartować sama maszyna wirtualna bez startu sesji środowiska Gnome. Po wyłączeniu Windows w maszynie wirtualnej zamknie nam się również VirtualBox i zostaniemy automatycznie wylogowani z systemu.
Logowanie bez podawania hasła
Aby jeszcze bardziej ułatwić dostęp do Windowsa można wyłączyć konieczność podawania hasła przez użytkownika "windows". W tym celu logujemy się na konto z uprawnieniami roota i zmieniamy ustawienia użytkownika "windows" ustawiając opcję "Bez pytania o hasło przy logowaniu". Dzięki temu przy kolejnym logowaniu nie będzie trzeba podawać hasła i od razu wystartuje maszyna wirtualna. Warto również zwrócić uwagę, że dla użytkownika "windows" nie będzie już możliwości zmiany sesji na inną (nie pojawi się okienko wyboru sesji, tylko użytkownik od razu zostanie zalogowany). Jeśli zależało by nam jednak na tym, aby znowu z poziomu użytkownika "windows" dostać do Gnome, w celu zmiany jakichś ustawień, to na powrót ustawiamy konieczość podawania hasła przez tego użytkownika. Można to również zrobić z linii komend poleceniem:
- Logowanie bez podawania hasła:
sudo usermod -a -G nopasswdlogin windows
- Konieczność podawania hasła:
sudo gpasswd -d windows nopasswdlogin
Problemy i rozwiązania
Jedynym problemem jaki do tej pory spotkałem w korzystaniu z VirtualBoxa, było okresowe blokowanie się klawiatury w maszynie goszczącej. Zauważyłem, że dzieje się to zawsze po dłuższym czasie braku aktywności na komputerze, kiedy włączy się wygaszać ekranu w Ubuntu. Rozwiązanie oczywiście jest banalne - wystarczy wyłączyć wygaszać dla użytkownika "windows". W menu otwieramy kolejno: System → Preferencje → Wygaszacz ekranu i dla pewności ustawiamy:
- Przejęcie w stan bezczynności po: 2 godzinach
- Uruchomienie wygaszacza ekranu gdy komputer jest w stanie bezczynności: wyłączyć
- Blokowanie ekranu, gdy wygaszacz jest aktywny: wyłączyć
Podsumowanie
Przedstawiony poradnik oczywiście nie wyczerpuje tematu konfiguracji VirtualBoxa w Linuksie. Nie jest to prawdopodobnie również jedyne rozwiązanie postawionych problemów, a pewne rzeczy może dało by się zrobić lepiej. Co sądzicie? Czekam na komentarze i spostrzeżenia z używania tego poradnika. Tylko proszę nie pisać do mnie per Pan, bo przecież nie jesteśmy na zajęciach, tylko na blogu :)
6 komentarze:
Jeszcze jedną wadą jest to, że VirtualBox nie obsługuje portów równoległych - ma wsparcie jedynie dla COM-a. A deweloperzy nie spieszą się, żeby załatać ten problem. Chociaż przyznaję, że zdecydowana większość użytkowników nawet nie zauważy tego braku.
Pozdrawiam i życzę kolejnych ciekawych wpisów!
Bartek
Dzięki:)
Jedynym problemem jaki do tej pory zauważyłem, to problem z obsługą USB. Jednak z tego co doczytałem w Internecie to problem ten dotyczy tylko Ubuntu i nie jest on trudny w rozwiązaniu.
Fajny artykuł do tego można dołożyć coś takiego:
VBoxHeadless --startvm Windows7_01 --vnc --vncport 5900 --vncpass password
i VB chodzi zdalnie z klientem VNC np Ultra VNC.
Problemem może być jeszcze wersja systemu
64-bity lub 32-bity.
Sprytne :-) A czy VB chodzi wtedy w trybie widocznym, czy pracuje sobie w tle?
Przydał by nam się internet:
VBoxManage modifyvm Windows7_01 --memory 1780 --vram 40 --accelerate3d on --accelerate2dvideo on --boot1 dvd --boot2 disk --boot3 none --cpus 2 --pae on --hwvirtex on --largepages on --ioapic on --clipboard bidirectional --usb on --usbehci on --nic1 bridged --bridgeadapter1 eth1
Można go odpalić w tle przy starcie systemu MATKI
i stworzyć dowolną liczbę serwerów wirtualnych do poszczególnych aplikacji oczywiście o ile zasobów nam
starczy.
Po zajęciach w jednej sal stwierdziłem, że również spróbuję zastosować to rozwiązanie na nowej platformie z dyskiem ssd. Dzięki za opis. Na pewno się przyda.
Prześlij komentarz