Εκτέλεση Windows μέσα από GNU Linux με VirtualBox

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Πολλές φορές ένα λειτουργικό σύστημα δεν είναι αρκετό. Είτε επειδή κάποιο πρόγραμμα δεν υπάρχει για το λειτουργικό μας, είτε επειδή θέλουμε να δοκιμάσουμε κάτι σε ένα άλλο λειτουργικό, αναγκαζόμαστε να έχουμε πάνω από ένα. Ευτυχώς τα τελευταία χρόνια έχουν εμφανιστεί αρκετά προγράμματα που καθιστούν δυνατή την εκτέλεση ενός (ή περισσότερων) λειτουργικών μέσα από ένα άλλο. Με την εμφάνιση μάλιστα του Hardware Virtualization στους νεότερους επεξεργαστές της Intel και της AMD, αυτό μπορεί να γίνει χωρίς αντιληπτή διαφορά στην απόδοση.

Ο οδηγός αυτός εξηγεί βήμα προς βήμα την εγκατάσταση και εκτέλεση Windows (συγκεκριμένα WinXP) μέσα από περιβάλλον GNU/Linux (συγκεκριμένα Debian), με χρήση του VirtualBox. Με μικρές αλλαγές όμως μπορεί να εφαρμοστεί και για διαφορετικούς συνδυασμούς λειτουργικών συστημάτων.


Ορολογία και συμβάσεις

Με τον όρο host αναφερόμαστε στο λειτουργικό σύστημα που εκτελεί το VirtualBox, στην προκειμένη περίπτωση, μια εγκατάσταση Debian GNU/Linux. Με τον όρο guest, αναφερόμαστε στο λειτουργικό σύστημα που εκτελείται μέσω του VirtualBox, στην προκειμένη περίπτωση, Windows XP.

Όσες εντολές έχουν το πρόθεμα # πρέπει να εκτελεστούν ως root (ή αντίστοιχα με sudo για χρήστες Ubuntu). Όσες έχουν το πρόθεμα $ πρέπει να εκτελεστούν σαν απλός χρήστης.

Εγκατάσταση

Αρχικά εγκαθιστούμε το VirtualBox στο σύστημα μας, σύμφωνα με τις οδηγίες που βρίσκονται στο Debian Wiki. Για τον οδηγό αυτό υποθέτουμε εγκατάσταση σε Debian Testing (lenny):

# aptitude install virtualbox-ose virtualbox-ose-modules-`uname -r`

Αν δεν υπάρχει το κατάλληλο πακέτο modules για τον πυρήνα μας, μπορούμε να φτιάξουμε ένα με το module-assistant:

# aptitude install module-assistant
# module-assistant auto-install virtualbox-ose virtualbox-ose-source

Στα ακόλουθα, όπου βλέπουμε <user> αντικαθιστούμε με το user name μας.

Για να εκτελέσουμε το Virtualbox, χρειάζεται να φορτώσουμε το module

# modprobe vboxdrv

και να έχουμε τα κατάλληλα permissions στο device που θα δημιουργηθεί. Αυτό γίνεται προσθέτοντας τον χρήστη μας στο group vboxusers (π.χ. με # adduser <user> vboxusers), και κάνοντας logout και ξανά login.

Για να αποφύγουμε το logout σε αυτή τη φάση, μπορούμε να εκτελέσουμε το εξής:

# chown root:<user> /dev/vboxdrv

Για να φορτώνεται το module σε κάθε εκκίνηση του υπολογιστή, το βάζουμε στο αρχείο /etc/modules.

# echo vboxdrv >> /etc/modules

Εκκίνηση

Εκτελούμε ως χρήστης `virtualbox`. Στο παράθυρο που εμφανίζεται, πατάμε το New για να δημιουργήσουμε μια νέα εικονική μηχανή. Ακολουθούμε τα βήματα, κάνοντας τις εξής επιλογές:

VM Name and OS Type
  • Στο πεδίο Name βάζουμε το όνομα της νέας μηχανής, π.χ. xp.
  • Στο πεδίο OS Type βάζουμε Windows XP
Memory
  • Στο διάλογο για την επιλογή μνήμης βάζουμε τη μνήμη που θα είναι διαθέσιμη στον guest. Αυτή επιλέγεται αναλόγως τη διαθέσιμη μνήμη στον host. Έχετε υπόψιν ότι η μνήμη αυτή δεσμεύεται εξ ολοκλήρου για τον guest όταν εκτελείται. Για Windows XP ένα καλό μέγεθος είναι 512 MB (φτάνει να διαθέτει τουλάχιστον 1 GB ο host).
Virtual Hard Disk
  • Εδώ δημιουργούμε το disk image που θα βλέπει ο guest, πατώντας στο New. Καλύτερα να επιλέξουμε Dynamically expanding image, που μεγαλώνει όσο χρειάζεται.

Αφού δημιουργήσουμε τη νέα εικονική μηχανή, την επιλέγουμε, πάμε Settings->CD/DVD-ROM και επιλέγουμε το Mount CD/DVD Drive. Εδώ μπορούμε να διαλέξουμε ανάμεσα στο πραγματικό drive του υπολογιστή μας ή κάποιο iso image στο δίσκο. Αν δεν ξέρετε τη διαφορά, χρειάζεστε το πρώτο.

Σιγουρευόμαστε ότι είναι ενεργοποιημένο το hardware virtualization, πηγαίνοντας στο Settings->General->Advanced, και επιλέγοντας το Enable VT-x/AMD-V (η αντίστοιχη καθολική ρύθμιση είναι στο File->Preferences, στην ενότητα Extended Features).

Στην περίπτωση που ο επεξεργαστής μας δεν υποστηρίζει hardware virtualization[1], μπορούμε και πάλι να τρέξουμε την εικονική μηχανή, αλλά το αποτέλεσμα θα είναι πιο αργό.

Τέλος, βάζουμε το cd-rom εγκατάστασης των Windows, πατάμε το Start και ξεκινάμε την μηχανή. Ο VirtualBox θα τυπώσει μερικά κατατοπιστικά μηνύματα σχετικά με το keyboard και το mouse, και πως μπορούμε να μεταφέρουμε τον έλεγχο από τον host στο guest και αντίθετα. Προχωράμε με την εγκατάσταση των Windows, που δεν διαφέρει από μια εγκατάσταση σε ένα κανονικό μηχάνημα και δεν περιγράφεται εδώ.

Guest Additions

Αφού ολοκληρωθεί η εγκατάσταση, το επόμενο βήμα είναι να εγκαταστήσουμε τα Guest Additions του VirtualBox. Αυτά είναι drivers για κάθε τύπο guest, που φροντίζουν για ομαλότερη εκτέλεση στο περιβάλλον του VirtualBox, και είναι απαραίτητα μεταξύ άλλων για να μοιραζόμαστε αρχεία ανάμεσα στον host και τον guest, να αλλάζει αυτομάτως η ανάλυση του guest αν αλλάξει το μέγεθος του παραθύρου στον host, και να μεταφέρεται αυτόματα το mouse focus από και προς τον guest.

Στο menu του VirtualBox, πηγαίνουμε Devices->Install Guest Additions, απαντάμε καταφατικά στην ερώτηση για το κατέβασμα του iso και για την προσάρτηση του στο virtual cd/dvd drive, και ακολουθούμε τις οδηγίες του installer που εμφανίζεται.

File Sharing

Ο guest θα πρέπει να βλέπει κανονικά internet χωρίς περαιτέρω ενέργειες από μέρους μας. Παρόλα αυτά, είναι εξίσου χρήσιμο να έχουμε κάποιους κοινούς καταλόγους ανάμεσα στον guest και τον host.

Με κλειστή την εικονική μηχανή, πάμε στο menu Settings->Shared Folders. Εκεί δημιουργούμε ένα νέο φάκελο. Στο διάλογο που εμφανίζεται, στο πεδίο Folder Path επιλέγουμε ή δημιουργούμε τον κατάλογο από τον host, έστω ~/share, ενώ στο πεδίο Folder Name το όνομα που θα έχει στον guest, έστω vshare. Αν δεν θέλουμε να μπορεί να γράφει στον κατάλογο ο guest, κάνουμε τικ το Read-only. Μπορούμε να μοιραστούμε όσους shared folders θέλουμε.

Αφού δημιουργήσουμε τον φάκελο που θέλουμε, ξεκινάμε τον guest, και πάμε Start->Programs->Accessories->Windows Explorer. Κάνουμε κλικ στο My Network Places->Entire Network->VirtualBox Shared Folders. Εκεί πρέπει να βλέπουμε ένα φάκελο με το όνομα \\VBOXSVR\vshare. Κάνουμε δεξί κλικ πάνω του, και επιλέγουμε από το μενού, Map Network Drive. Τώρα θα εμφανίζεται σαν ένα ξεχωριστό drive στο My Computer, για ευκολότερη πρόσβαση.

Tips & Tricks

Χρήση

Για να απελευθερώσουμε το keyboard και το mouse πατάμε το Host key (η προεπιλογή είναι το δεξί πλήκτρο Ctrl, αλλά μπορεί να αλλάξει από το μενού File->Preferences->Input).

Με Host+F πηγαίνουμε σε fullscreen mode. Εκεί με Host-Home μπορούμε να εμφανίσουμε το menu του VirtualBox.

Με Host+P μπορούμε να κάνουμε pause την εκτέλεση της εικονικής μηχανής.

Snapshots

Ο VirtualBox υποστηρίζει snapshots, μπορεί δηλ. να αποθηκεύσει την κατάσταση στην οποία βρίσκεται ο guest, και να επανέλθει σε αυτήν αργότερα.

Επιδόσεις

Συνίσταται να απενεργοποιήσουμε κάποιες λειτουργίες των Windows XP που τρώνε χώρο και χρόνο.

Δεξί κλικ στο My Computer->Properties:

  • Στην καρτέλα Advanced, επιλέγουμε το Settings στην ενότητα Performance.
    • Στην καρτέλα Visual Effects, επιλέγουμε το Adjust for best performance.
    • Στην καρτέλα Advanced, στην ενότητα Virtual memory, επιλέγουμε το Change. Εδώ μπορούμε να ρυθμίσουμε το αρχείο swap. Σε περίπτωση που δεν θέλουμε να σπαταλάμε χώρο στο disk image, μπορούμε να βάλουμε ένα αρκετά μικρό initial size (το μικρότερο δυνατό είναι 2 MB).
  • Στην καρτέλα System Restore, επιλέγουμε το Turn off System Restore. Κάτι αντίστοιχο προσφέρουν τα snapshots του VirtualBox.

Compact disk image

Αν έχουμε επιλέξει Dynamically expanding disk image, τότε υπάρχει μια μικρή διαδικασία για να διατηρούμε το μέγεθος του disk image στο μικρότερο δυνατό. Ο λόγος είναι ότι καθώς γράφουμε αρχεία στον guest, το image μεγαλώνει, αλλά αν σβήσουμε κάποια αρχεία, δεν μικραίνει αυτομάτως.

Αρχικά κάνουμε defragment μερικές φορές μέσα από τον guest (Δεξί κλικ στο C:->Tools->Defragment Now...).

Έπειτα κατεβάζουμε και εκτελούμε το αρχείο nullify.exe (πηγή). Αυτό θα δημιουργήσει ένα προσωρινό αρχείο με μηδενικά και θα το μεγαλώσει μέχρι να γεμίσει ο δίσκος (μην ανησυχείτε, δεν θα μεγαλώσει το disk image), και έπειτα θα το σβήσει.

Κλείνουμε τον guest, και εκτελούμε από τον host την ακόλουθη εντολή:

$ vboxmanage modifyvdi ~/.VirtualBox/VDI/xp.vdi compact

όπου υποθέσαμε ότι η εικονική μηχανή χρησιμοποιεί ένα disk image με όνομα xp, που βρίσκεται στην προεπιλεγμένη τοποθεσία.

Παρόμοια διαδικασία μπορεί να εκτελεστεί και σε άλλου είδους guests, π.χ. σε ένα GNU/Linux guest θα τρέχαμε:

$ dd if=/dev/zero of=zero_file bs=4096

VMware image support

Από την έκδοση 1.4 και μετά υποστηρίζονται απευθείας disk images που έχουν δημιουργηθεί με το VMware (αρχεία vmdk).

Αντιγραφή Image

Αν για οποιοδήποτε λόγο θέλουμε να αντιγράψουμε ένα VDI, δεν αρκεί ένα απλό copy του αρχείου, καθώς κάθε VDI έχει ένα μοναδικό ID και δεν μπορούμε να χρησιμοποιήσουμε δύο VDI με το ίδιο ID. Η λύση είναι να χρησιμοποιήσουμε την εντολή clonehd του VBoxManage:

vboxmanage clonehd source.vdi destination.vdi

Προσοχή: Αν δεν βάλουμε το πλήρες path στα ονόματα, τότε το αρχείο δημιουργείται στο (ή αντιγράφεται από το) $ΗΟΜΕ/.VirtualBox/HardDisks.

Σημείωση: Σε παλιότερες εκδόσεις του VirtualBox η εντολή ονομαζόταν clonevdi.

Επίλογος

Τα περισσότερα από τα παραπάνω μπορούν βέβαια να εφαρμοστούν και σε πολλούς διαφορετικούς συνδυασμούς από guest και host λειτουργικά συστήματα. Επιπλέον είναι δυνατό να τρέχουμε ταυτόχρονα πάνω από μία διαφορετικές εικονικές μηχανές. Ο κυριότερος περιοριστικός παράγοντας είναι η μνήμη.

Υπάρχουν όμως και άλλες open source λύσεις για virtualization, κάποιες από τις οποίες υποστηρίζουν και memory overcommiting. Oι πιο διαδεδομένες είναι:

Δείτε επίσης

Αναφορές

  1. Λίστα επεξεργαστών που υποστηρίζουν x86 Virtualization