VirtualBox

Sun's kostenlose Virtualisierungssoftware, deren Installer mit 70 MB erstaunlich klein ist (ein Adobe Reader hat heutzutage schon 25 MB, ein Druckertreiber hatte letzhin 50 MB).

Der Nahtlos-Modus macht die Integration in das Wirtsbetriebssystem nahezu perfekt - einzig: die Taskumschaltung innerhalb der VM (mit Alt-Tab) berücksichtigt nur die Programme der VM und im Wirt ist berücksicht nur seine eigenen Programme. Vielleicht ist das auch besser so, doch für eine richtig nahtlose Integration wäre das vielleicht ein nettes Feature. Ich bin mir aber nicht ganz sicher, ob ich das selber wollte - derzeit fällt es mir aber immer wieder auf und ich muss dann erst meine Maus aus dem Focus des VM-Fensters bewegen, um an die Windows-Programme zu kommen.

Nach jetzt 6-monatiger Nutzung bin ich immer noch begeistert von VirtualBox und weine VMWare keine Träne hinterher. Das hat sich auch nach einigen Jahren nicht geändert :-)


Virtualisierung Background Informationen

Hypervisor-Typen

  • Typ 1: läuft direkt auf der Hardware ohne weiteres typisches Betriebssystem
    • VmWare ESX
    • Xen
  • Typ 2: setzt auf einem Betriebssystem auf, über das der Zugriff auf die Hardware erfolgt
    • VirtualBox
    • VMWare Workstation

Basis-Installation

verlief problemlos - click and go. Hier sollte man dann auch gleich das Extension Pack (USB2/3-Support, RDP-Verbindungen zum Gast, PXE-Support, Plattenverschlüsselung) installieren.

PUE Lizenz des Extension Packs

In der iX stand mal, daß VirtualBox mit dieser Lizenz "[...] theoretisch sogar in Großunternehmen auf jedem PC installiert werden - dofern jeder Anwender dies selbst erledigt" (iX 9/2016).


Image-Container anlegen

Hinsichtlich Zuordnung von Plattenplatz kann man es wohl sehr komplex treiben, doch hält man sich an die Anfänger-Vorgaben (die physische lokale Platte zu verwenden), dann ist der erste Image-Container nach 2 Minuten fertig :-)

Per Default wird ein Verzeichnis ~/.VirtualBox angelegt, in dem sich zwei Unterverzeichnisse Machines und HardDisks befinden. In HardDisks liegen die eigentlichen Daten des Images in einer einzigen Datei (die Festplatte des Gastes sozusagen), in Maschines befindet sich die Konfiguration, LogFiles und Snapshots.


Datei-Sharing

Shared Folder

Über Shared Folder kann man Verbindung zum Wirtssystem aufnehmen. In einem Linux-Gastsystem mounted man den Shared-Folder per

mount -t vboxsf $SHARED_FOLDER_NAME $DIRECTORY

Allerdings müssen die Gasterweiterungen installiert sein, sonst steht das VBoxSF-Filesystem (VirtualBoxSharedFilesystem) nicht zur Verfügung.

Man kann auch die Option Automatisch einbinden wählen, dann wird das Verzeichnis automatisch als

/media/sf_<ORDNER_NAME>

gemounted. Allerdings hat man dann nicht soviele Konfigurationsmöglichkeiten wie über das "manuelle" (bzw. auch hier kann man das automatische Mounten bei Systemstart aktivieren) Mounten in Linux.

Leider unterstützt das VBoxSF-Filesystem in Version 3.1.2 keine symbolischen Links und auch keine HardLinks im SharedFolder - das schränkt die Nutzung von einem Linux-Gastsystem deutlich ein :-( Mehr dazu siehe hier: http://www.virtualbox.org/ticket/818 - das Anlegen eines solchen Links wird mit der Meldung Operation not permitted quittiert.

Owner und Group

Beim mounten per mount -t vboxsf SHARED_FOLDER_NAME MOUNTPOINT werden alle Dateien dem User Root zugeschlagen. Durch Verwendung folgender Mountoptionen lässt sich das ändern:

mount -t vboxsf -o uid=1000,gid=100 WINDOWS_C /mnt/WINDOWS_C/

uid und gid kann man aus /etc/passwd erfahren. In der /etc/fstab sieht das dann folgendermassen aus:

WINDOWS_C     /mnt/WINDOWS_C     vboxsf     uid=1000,gid=100      0 1

Performance

Leider ist die Performance auf einem vboxsf-Shared-Folder ganz schlecht ... es genügt, um Konfigurationsdateien zu lesen. Will man allerdings I/O-intensivere Aktionen (z. B. Java-Compilierung) durchführen, dann ist es zu langsam.

für einen Maven-Build, der auf meinem Linux Filesystem 20 Sekunden dauert, habe ich 8 Minuten benötigt

CIFS Sharing

Hierzu kann man beispielsweise auf seinem Windows-Host ein Verzeichnis freigeben. Danach muß man ein Verzeichnis in seinem Home-Verzeichnis erstellen mkdir /home/pfh/windows_shared_folder (oder zumindest in einem Verzeichnis, auf das man Schreibberechtigung hat). Über den Windows-Rechnernamen und den Namen des Verzeichnisses (z. B. \\workbench\shared-folder) kann man dann das Verzeichnis mounten::

sudo mount -t cifs -o username=windows_username,uid=1000,gid=1000 //workbench/shared_folder /home/pfh/windows_shared_folder

Hierzu muß allerdings /sbin/mount.cifs vorhanden sein - sollte es fehlen, dann bekommt man es per apt-get install cifs-utils smbclient.

Leider ist die Performance nicht so gut wie ich erhofft hätte. Für einen Maven-Build, der auf meinem Linux Filesystem 20 Sekunden dauert, habe ich mit dem CIFS-Share über 3 Minuten benötigt. Immerhin deutlich besser als mit VirtualBox-Shared-Folder (8 Minuten) aber dennoch inakzeptabel langsam :-(


Snapshots

Ein sehr angenehmes Features sind die Snapshots. Vor größeren Umbauten kann man hier einen Snapshot ziehen, auf den man dann wieder zurückwechseln kann.

ACHTUNG: Nach einem Snapshot wird eine neue Virtualbox-Festplatte (Speicherort über VirtualBox-Menü - Snapshot) angelegt und dort werden die neuen Daten abgelegt. Die alte Festplatte wird ab dem Zeitpunkt nicht mehr angefaßt (das ist der alte Zustand!!!). GANZ WICHTIG: man sollte die Snapshots zeitnah löschen, so daß ein Merge in die alte Festplatte erfolgt - das Arbeiten mit mehreren Festplatten ist sicherlich nicht ganz optimal.

Wer dem beim Löschen eines Snapshots durchgeführten Merge nicht traut clont sein Image am besten vorher (Full Clone, nur aktueller Zustand, MAC-Adresse beibehalten).

Performance

Beim Snapshotting sollte man aufpassen wo die neuen Festplatten abgelegt werden. Per Default ist das ~/VirtualBox VMs/imageName\Snapshots. Je nach Festplatten-Layout kann das die evtl. kleine System-Platte "vollmüllen" (ich mag solche Layouts nicht und kann den Sinn auch nicht nachvollziehen). Viel schlimmer ist allerdings, daß in Unternehmen nur bestimmte Verzeichnisse vom Virenscanner ausgenom,men sind (i. d. R. Developer-Verzeichnisse) und dieses evtl. nicht dabei ist. Dann sinkt natürlich die Performance.

Performance beim Löschen von Snapshots

Beim Löschen eines Snapshots wird die neue Festplatte in die alte Festplatte gemergt.

Ich hatte mal eine 22 GB große "neue Festplatte" und eine 40 GB große "alte Festplatte" (beide lagen auf einer SSD aber in unterschiedlichen Partitionen). Das Löschen war mit weniger als 60 Sekunden schneller als ich erwartet hätte.


VM per Skript starten

Um eine VM per Skript oder per Mausklick zu starten (ohne das VirtualBox-GUI zum Auswählen des Images zu starten:

VBoxManage startvm "NAME_DER_VM"

Netzwerkkonfiguration

In VirtualBox erfolgt die Netzwerkkonfiguration auf mehreren Ebenen:

  • zentral über Image-Grenzen hinweg

VirtualBox - zentrale Netzwerkkonfiguration

  • für jedes Image

VirtualBox - Netzwerkkonfiguration pro Image

Die Netzwerkkarten von Virtualbox haben unter Linux das Namensschema enp0sX (z. B. enp0s3). Über entsprechende Routing-Tabellen erfolgt das Routing auf die entsprechende Netzwerkkarte (route).

Netzwerktyp Gast -> andere Gäste Host -> Gast Gast -> externes Netzwerk
Not attached nein nein nein
Network Address Translation (NAT) nein nein JA
Network Address Translation Service JA nein JA
Bridged networking JA JA JA
Internal networking JA nein nein
Host-only networking JA JA nein

NAT

Bei der Verwendung von NetworkAddressTranslation fungiert die VirtualBox-Software als Router (der das Gastnetzwerk mit dem Hostnetzwerk verbindet - beide haben ganz unterschiedliche IP-Adressen). Das Gastbetriebssystem erhält von VirtualBox eine IP-Adresse (per Default 10.0.2.15 ... wenn nur ein NAT-System existiert), die nichts mit der IP-Adresse des Hostsystem (z. B. 192.168.1.1) zu tun hat. Virtualbox agiert als Gateway (über die IP-Adresse 10.0.2.2), d. h. hierüber erfolgt die Einspeisung der Nachrichten in das Netzwerk des Hostsystems. Zudem stellt Virtualbox einen DNS-Server unter 10.0.2.3 bereit.

Für JEDES NAT-Netzwerk wird ein eigenes Gast-Netzwerk aufgebaut.

Das Gastbetriebssystem

  • kann DHCP verwenden (der DHCP-Server wird dann von VirtualBox bereitgestellt)
  • kann vom VirtualBox-Software-Router eine statische IP-Adresse erhalten ... dann sollte man aber private IP-Adressen verwenden (keine öffentlichen)

In beiden Fällen sind die Gastbetriebssysteme und deren Services nicht von aussen nutzbar - Antworten auf vom Gastsystem initiierten Requests kommen aber an - über NetworkAddressTranslation. Über Port-Forwarding kann man Ports des Gastbetriebssystems (z. B. Port 80) an das Host-Betriebssystem (z. B. Port 8080) weiterleiten, so daß der Service des Gastbetriebssystems per localhost:8080 (oder ip_address_host_machine:8080) erreichbar ist.

Port-Forwarding mit NAT

Da bei NAT die Services des Gastbetriebssystems für den Host und auch andere Rechner im Netz nicht sichtbar sind (weil eben das Gastbetriebssystem nicht direkt adressiert werden kann - keine eigene IP-Adresse!!!), kann man sich per Port-Forwarding behelfen, um einzelne Services freizugeben.

Besonders interessant für meine Bedürfnisse ist das Port-Forwarding vom Wirtssystem an das Gastsystem, wenn kein richtiges Netzwerk vorhanden ist. Ich nutze ein Linux-Gastsystem in einem Windows-Wirtssystem und gebe den ssh-Server, den Webserver (mit diesem CMS-System) und die Datenbank meines Linux-Gastsystems an das Windows-System weiter. Auf diese Weise kann ich dann per

http://localhost:1701/exponent-0.96.3/index.php

vom Browser des Hostsystems auf den Webserver innerhalb meines Gastbetriebsystems zugreifen.

Version 4:

Über die Administrationsoberfläche von VirtualBox lässt sich die Portweiterleitung komfortabel konfigurieren. In Version 3.x war das noch ein bisschen umstädnlicher (s. u.)

Version 3:

So wurden die Ports freigeschaltet (ACHTUNG: in Abhängigkeit der eingerichteten Netzwerkkarte muss "pcnet" durch "e1000" oder "e100" ersetzt werden):

VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/Protocol" TCP
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/HostPort" 3306
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/GuestPort" 3306

VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 22
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22

VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpd/Protocol" TCP
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpd/HostPort" 1701
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpd/GuestPort" 80

Wissenswertes:

  • diese Konfiguration wird in der Konfigurationsdatei der VM (VM_NAME.xml) gespeichert und lassen sich da natürlich auch bequem editieren (und vor allem in einer Versionsverwaltung wie Subversion versionieren)
  • die Parameter von VBoxManage sind hier dokumentiert: http://www.virtualbox.org/manual/UserManual.html#vboxmanage
  • die Änderungen an der VM per VBoxManage-Tool wirken sich erst nach einem Neustart bzw. Warmstart (Aufwachen aus dem Suspend-Modus) aus.
  • Will man die aktuellen Einstellungen der VM erfahren: VBoxManage getextradata "MY_VM_NAME" enumerate
    • ACHTUNG: VirtualBox sollte bei Eingabe dieser Befehle nicht laufen (und dementsprechend soll auch das Image MY_VM_NAME nicht laufen - es muss nicht komplett runtergefahren sein, der Suspend-Mode genügt). Bei VirtualBox 3.1.2 hatte ich einen BlueScreen nach Eingabe obiger Befehle und Neustart von VirtualBox. Nach dem Rechner-Restart klappte der Start von VirtualBox allerdings und auch das Port-Forwarding funktionierte.

Netzwerkbrücke aka Bridged-Mode

Hier nutzt das Gastbetriebssystem die von VirtualBox emulierte Hardware - deshalb muss man auch die zu verwendende Hardware (Ethernet, WLAN) auswählen (und natürlich auch umstellen, wenn physisch auf ein anderes Interface gewechselt wird). Für das Gastbetriebssystem erscheint das Interface dann immer wie ein Ethernet-Anschluss, auch wenn es sich physisch um eine WLAN-Verbindung handelt. Das Gastbetriebssystem bekommt eine eigene IP-Adresse vom DHCP-Server, den auch das Hostsystem verwendet. Auf diese Weise verhält sich das Gastbetriebssystem wie jeder andere Rechner im Netzwerk. Das Gastbetriebssystem ist von anderen Rechnern im Netz über diese IP-Adresse erreichbar (bei NAT geht das nicht ohne weiteres - hier kann man Port-Forwarding konfigurieren).

Host-only

In VirtualBox - File - Preferences - Network - Host-Only Netwworks können verschiedene Host-Only-Netzwerke definiert werden:

VirtualBox Host-Only-Network

Zu jedem Host-Only-Netzwerk wird das Subnetz und der DHCP-Server (vergibnt die IP-Adressen für die Images des Netzwerks) definiert

VirtaulBox - Host-Only-Adapter

So verwendet man das Host-Only-Netzwerk in einem Image:

VirtualBox - Host-Only-Adapter - Usage by Image

Jetzt können alle Images miteinander kommunizieren, die das gleiche Host-Only-Netzwerk verwenden.

BTW: Host-Only-Netzwerke verwendet man häufig auch zusammen mit NAT-Netzwerken. Während man aus dem Gast über NAT ins Internet kommt, ermöglicht das Host-Only-Netzwerk eine Kommunikation vom Host in den Gast. Man spart sich somit das pflegeintensive Port-Forwarding - allerdings kommt man von außen (einem anderen Rechner) nicht an die Dienste innerlhalb des Images ... was bei Port-Forwarding geht. Im Linux-Image sieht das bei einem NAT und einem Host-Only-Netzwerk dann beispielsweise folgendermaßen aus:

╭─pfh@workbench ~/src  ‹master› 
╰─➤  route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.2.2        0.0.0.0         UG    100    0        0 enp0s3
10.0.2.0        *               255.255.255.0   U     100    0        0 enp0s3
link-local      *               255.255.0.0     U     1000   0        0 enp0s8
192.168.56.0    *               255.255.255.0   U     100    0        0 enp0s8

Gast-Betriebssystem installieren - allgemein

Mein OpenSuse liegt als ISO-File auf der Platte - deshalb konfiguriere ich das CD-Laufwerk mit diesem ISO-File und starte das Image. Es wird von der gebundenen CD (in Form der ISO-Datei) gebootet und ich kann mein System installieren.

Gasterweiterungen installieren

Zunächst startet das Image nur mit 800 x 600 Pixel und lässt sich auch nicht vergrössern (das Fenster wird schon größer, aber leider nicht der Gastbetriesbsystem-Bildschirm). Ein bisschen googeln zeigt, dass in den Gastbetriebssystemen der VirtualBox (wie bei VMWare auch) Gasterweiterungen installiert werden müssen. Hierzu wählt aus dem VM-Menü "Geräte - Gasterweiteerungen installieren" - im Hintergrund wird ein Image VBoxGuestAdditions.iso in den Manager für virtuelle Medien (Menüpunkt: Geräte - CD/DVD-ROM einbinden - CD/DVD-ROM-Abbild ... - CD/DVD-Abbilder) eingebunden (Achtung: im Linux-System findet noch kein Mounting dadurch statt - einzig: das ISO-File mit den Gasterweiterungen ist im Manager für virtuelle Medien eingetragen). Anschließend muss man es noch über den Manager für virtuelle Medien auswählen und mounted es (mkdir tools; sudo mount /dev/cdrom tools) und dann führt man das Installationsskript aus (cd tools; ./VBoxLinuxAdditions-x86.sh). Bei meinem Opensuse musste ich noch die Kernel-Sourcen und noch ein anderes Paket nachinstallieren und schon konnte ich im Gastbetriebssystem (über Yast) eine höhere Auflösung einstellen :-)

Problem: Gasterweiterungen werden nicht geladen

Ich hatte mal das Problem, dass ich plötzlich nicht mehr auf den Shared Folder zugreifen konnte. Ich rebootete das System und versuchte den Shared Folder zu mounten (mount -t vboxsf sharedFolderName myMountPoint ODER mount.vboxsf sharedFolderName myMountPoint), doch ich bekam die Nachricht

/sbin/mount.vboxsf: mounting failed with the error: No such device

Da lsmod | grep vbox weder vboxadd noch vboxvfs lieferte und auch modprobe vboxadd und modprobe vboxvfs nicht funktionierte, entschied ich mich, die Gasterweiterungen erneut zu installieren. Und das klappte tatsächlich :-) Warum die Gasterweiterungen plötzlich weg waren - ich weiss es nicht (vielleicht ein Linux-Update, das etwas zerstört hat ...).

VPN im Gastbetriebssystem

Ich habe das bisher in der Variante "Bridge-Mode über Ethernet/WLAN" in einem Ubuntu-Gastbetriebssystem betrieben. Im Gastbetriebssystem muss zunächst eine normale Netzwerkverbindung hergestellt sein. Darauf aufesetzend wird dann ein VPN-Tunnel per nm-applet gestartet. Über das nm-applet erfolgt auch die Konfiguration. Siehe hier.

Am einfachste ist, wenn man NAT verwendet, dann muß man VPN nur im HOST System konfigurieren.

Resizing der Festplatte

Resizing mit Bordmitteln: FEHLGESCHLAGEN

Ich hatte gerade ein Problem in meinem Haupt-Image ... es lief immer wieder voll und ich konnte nur mit Mühe immer mal wieder ein bisschen Platz freigeben, um die Updates einzuspielen. Früher oder später müsste ich mich mit der Vergößerung beschäftigen, aber alles was ich bisher darüber gelesen hatte schien mir aufwendig (z. B. http://www.dedoimedo.com/computers/virtualbox-shrink-expand-disks.html). Leider hatte ich auch kein LVM auf diesem Linux-System verwendet, sonst hätte ich einfach eine weitere virtuelle Festplatte eingehangen und die Partition vergrößert :-(

Glücklich las ich von VirtualBox 4.0, das angeblich eine Resize-Funktion out-of-the-box besaß ...

Nach der Installation (sicherheitshalber fertigte ich mir eine Kopie des Festplattenfiles an) musste ich allerdings erst mal ein paar Probleme aus dem Weg räumen:

  • in der Konfigurtaion per GUI wurde mir immer wieder angezeigt, daß die MAC-Adresse ungültig sei (ich verwendete NAT). Die automatische Generierung einer neuen hat nicht funktioniert. Ich konnte den Konfigurationsdialog nicht mal normal beenden - kill process war die einzige Lösung. Ich stellte auf andere Netzwerkkonfigurationen um (nicht NAT), das funktionierte, aber Netzwerk hatte ich dennoch keins :-( Nach einem Neustart des VirtualBox-Launchers (das Programm, das alle VMs anzeigt), konnte ich dann auch irgendwann mal NAT einstellen. Das Netzwerk in meinem VM-Image funktionierte aber trotzdem nicht. In meinem Suse-System zeigte ein rcnetwork restart, daß die vorhandene Netzwerkkarte (eth1) im System nicht konfiguriert sei. tatsächlich war bei mir nur eth0 konfiguriert. Ich hatte zwar die erste Netzwerkkarte im VirtualBox konfiguriert, doch das war scheinbar nicht mehr eth0, sondern eht1. Also schnell mal per Yast konfiguriert und schon klappts mit dem Nachbarn. Meine Port-Freigaben musste ich dann allerdings auch umkonfigurieren ... ich änderte (in der XML-Konfigurationsdatei)
VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpd/Protocol" TCP

nach

VBoxManage setextradata "MY_VM_NAME" "VBoxInternal/Devices/pcnet/1/LUN#1/Config/httpd//Protocol" TCP

Das erhoffte Disk-Extending blieb jedoch aus ... ein

VBoxManage modifyhd myHardDiskFile.vdi --resize 2000

zeigte mir die lange Nase mit der Fehlermeldung

Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not implemented yet!

Tja, eigentlich sollte es seit 4.0 supported sein, aber nur für dynamisch wachsende VDI-Formate. Ich bin mir zwar sicher, dass ich eine dynamisch wachsende Platte habe, aber ...

Vorerst komme ich noch mit dem bisschen Platz aus ... vielleicht klappt es ja dann irgendwann auch mit meiner VirtualMachine :-)

Die neue Version startet deutlich schneller aus dem Suspend-Mode ... ich bin jedenfalls bisher sehr zufrieden.

Resizing über Cloning: ERFOLGREICH

Meine Platte war mal wieder voll und modifyhd resize funktionierte wieder nicht (siehe oben). Deshalb probierte ich ein clonehd, um anschließend ein modifyhd zu machen (siehe hier). Vielleicht besaß ich ja tatsächlich ein Image fester statt dynamischer Größe.

Das folgende clonehd sorgt dafür, daß eine Disk mit dynamisch wachsender Größe erzeugt wird ... solche lassen sich dann per modifyhd-resize vergrößern.

clonehd:

$ /cygdrive/c/Program\ Files/VirtualBox/VBoxManage.exe clonehd
      OpenSuseIcw_20130517.vdi suseIcw.vdi --variant Standard
    0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
    Clone hard disk created in format 'VDI'. 
    UUID: b6462b06-3e89-496f-aa6f-009977a75e1c

Ich habe hier schon mal folgende Fehlermeldung bekommen:

VBoxManage.exe: error: Cannot register the hard disk 
  '...UbuntuIncreased.vdi' {f9030452-7e4c-4eef-b833-2d86dad01111}
because a hard disk 'C:\Dev\UbuntuIcwIncreased.vdi' with 
  UUID {f9030452-7e4c-4eef-b833-2d86dad01111} already exists
VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), 
  component VirtualBox, interface IVirtualBox, callee IUnknown
VBoxManage.exe: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(),
  enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())"
        at line 178 of file VBoxManageDisk.cpp

Das lag daran, daß die zu erweiternde Festplatte noch als Virtuelles Medium eingetragen war und keine neue Platte mit der gleichen UUID hinterlegt werden kann. Ich habe die alte Platte dann einfach vom Image abgemeldet und aus den virtuellen Medien gelöscht. Dann hat der clonehd-Befehl funktioniert.

modifyhd:

pfh@WDF-LAP-1103 /cygdrive/c/Dev
$ /cygdrive/c/Program\ Files/VirtualBox/VBoxManage.exe modifyhd 
    suseIcw.vdi --resize 30000
    0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: 
  Resize hard disk operation for this format is not implemented yet!

Also auch net ... und das obwohl es sich um ein dynamisches VDI-Format handelt:

pfh@WDF-LAP-1103 /cygdrive/c/Dev
$/cygdrive/c/Program\ Files/VirtualBox/VBoxManage.exe showhdinfo suseForIcw.vdi
UUID:                 c0e044f8-44ce-4cb5-b423-40695b1cafc4
Accessible:           yes
Logical size:         30985 MBytes
Current size on disk: 21856 MBytes
Type:                 normal (base)
Storage format:       VDI                       <------
Format variant:       dynamic default           <------
Location:             C:\Dev\suseForIcw.vdi

Was ist da los?

Komisch ... ich hab jetzt an die neue Größe einfach mal eine 0 drangehangen und jetzt hats geklappt (vorher war die Platte logisch 21856 MB groß - 30720 wäre also auch schon größer gewesen):

pfh@WDF-LAP-1103 /cygdrive/c/Dev
$ /cygdrive/c/Program\ Files/VirtualBox/VBoxManage.exe modifyhd suseForIcw.vdi --resize 30720
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not implemented yet!
pfh@WDF-LAP-1103 /cygdrive/c/Dev
$ /cygdrive/c/Program\ Files/VirtualBox/VBoxManage.exe modifyhd suseForIcw.vdi --resize 307200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Mir scheint Sun ... eh Oracle müsste mal das ExceptionHandling überarbeiten - die Fehlermeldungen scheinen echt keine große Hilfe zu sein :-(

Ich schätze, daß der Erfolg jetzt nicht unbedingt am Cloning lag, sondern an der deutlich erhöhten Größe - vielleicht interpretiert er die Zahl in einer anderen Einheit ...

Resizing auf die harte Tour: ERFOLGREICH

Im groben:

  • neue (größere) virtuelle Festplatte erzeugen und ins Image einhängen
  • Inhalt der alten (kleinen) Festplatte per dd auf die neue (große) Festplatte kopieren
  • nicht genutzten Platz der großen Festplatte durch Resizing (per GParted) verwenden

Im Detail:

  • Einbindung von gparted-live-0.11.0-7.iso als Linux-Live-System in das Image (dieses Live-Image soll später gestartet werden - also evtl. Boot-Reihenfolge so ändern, daß von CD gebootet wird)
  • Anlage und Einbindung einer größeren virtuellen Festplatte ins Image
  • Booten des GParted-Live-Systems
  • Prüfung, welche Festplatte über welchen Device-Treiber erreichbar ist. Ich hatte die alte Festplatte am primären Master (dev/sda) und die neue Festplatte am primären Slave (dev/sdb).
  • Kopieren der Daten von der alten Festplatte auf die neue:
    • sudo bash
    • dd if=/dev/sda of=/dev/sdb
  • Reboot des GParted-Systems (damit die neue Festplatte richtig eingebunden wird - entscheidend sind hier die /dev/disk/by-id/* Informationen)
  • Prüfung welche ID (im folgenden ID_NEUE_FESTPLATTE genannt), die neue Festplatte hat. Hierzu in /dev/disk/by-id/ die ID der neuen Festplatte herausfinden und eintragen in
  • neue Festplatte konfigurieren
    • mounten der neuen Festplatte
      • sudo bash
      • mkdir neueFestplatte
      • mount /dev/sdb2 neueFestplatte
    • Bootvorgang der neuen Festplatte anpassen
      • vi ./neueFestplatte/boot/grub/menu.lst
      • hier ID_NEUE_FESTPLATTE an alle relevanten Stellen eintragen (also dort wo bisher die ID der alten Festplatte stand)
      • vi /./neueFestplatte/etc/fstab
      • hier ID_NEUE_FESTPLATTE an alle relevanten Stellen eintragen (also dort wo bisher die ID der alten Festplatte stand)
  • per GParted-Tools die relevante Partition der neue Festplatte um den nicht genutzten Bereich erweitern
  • System runterfahren
  • GParted entfernen
  • alte virtuelle Festplatte entfernen
  • System neu starten
  • Prüfung, ob nun mehr Platz frei ist: df -h

Resizing ausserhalb von VirtualBox-Features

Wenn man das Linux-Gastsystem mit einem Logical-Volume-Manager aufgesetzt hat, dann kann man auch eine weitere Festplatte zum virtuallen Image hinzufügen und in den LVM einhängen.


Windows-Wirtssystem und Linux-Gastsystem - die perfekte Console für Windows

Verwendete Komponenten:

  • VirtualBox Linux-Gastsystem
  • Nicht-Fangen des Mauszeigers durch das Gastsystem (hierzu müssen die Gasterweiterungen installiert sein)
  • Festplatten des Windows-Wirtssystems als Shared-Folders bereitstellen und in das Linux-Gastsystem einbinden
  • Optional:
    • ssh-Server auf dem Linux-Gastsystem mit Port-Forwarding von VirtualBox
    • ssh-Client (z. B. Putty) mit X11-Forwarding
    • Xming (X-Server) auf dem Windows-Wirtssystem

So kann man die Konsole des Linux-System verwenden, um auf der Festplatte des Windows-Systems zu arbeiten. Durch die optionalen Komponenten kann man die Integration weiter optimieren, so dass die Konsole tatsächlich seamless in das Windows-System integriert ist (der eingebaute seamless-Mode von VirtualBox arbeitet noch nicht so gut). Als Goody erhält man die Möglichkeit per ssh-Client remote auf den Windows-Partitionen zu arbeiten.

Wenn jetzt noch die symbolic-Links bzw. HardLinks auf SharedFolders funktionieren würde (siehe oben), hätte man eine perfekte Konsole für das Windows-System. Ein Grund cygwin zu nutzen bestünde dann nicht mehr.


Erfahrungsberichte verschiedener Gastbetriebssysteme

Gast-Betriebssystem installieren - OpenSuse 11.1

Ein wenig problematischer gestaltete sich die Netzwerkkonfiguration. In VMWare hatte alles out-of-the-box funktioniert und jetzt hatte ich doch Probleme. Man muss hier nämlich das Image umkonfigurieren, in Abhängigkeit davon, ob man eine Netzwerkverbindung per WLAN oder Netzwerkkabel aufbauen möchte. Es hatte zwar direkt nach der Installation über mein Netzwerkkabel funktioniert, doch als ich einen Tag später über den WLAN-Stick ins Internet gehen wollte klappte das nicht mehr und frustrierte mich doch sehr :-(

Schließlich hatte ich doch den piep-einfachen Bridged-Mode verwendet, der bei VMWare doch auch immer klappte. Nach mehrmaligem RTFM fand ich doch noch heraus, dass man den virtuellen Netzwerkadapter an ein physisches Gerät binden muss - in den VirtualBox Administrationstools:

Bidged-Mode

So schaffte ich zumindest, aus dem Gastsystem wieder aufs Internet zugreifen zu können. Um beim Wechsel auf meine kabelgebundene Netzwerkverbindung nicht immer wieder das Image runterfahren zu müssen, habe ich einen Adapter für die kabelgebundene Variante und einen Adapter für die wireless-Variante konfiguriert:

zwei Netzwerkadapter

Doch leider klappte der Zugriff vom Host-System auf mein im Gastsystem mittlerweile wieder laufendes Exponent-CMS (LAMP - Linux, Apache, MySql, PHP) nicht. Da der Firefox 3.5 im Gastsystem doch sehr, sehr langsam mit meinem Exponent-System kommunizieren wollte (der Seitenaufbau war schnarch-lahm - keine Ahnung warum) war ich extrem frustriert und hielt schon Ausschau nach einem Ersatz-Laptop (oder gar einer fetten Workstation) - zugegeben: ich wollte mir auch endlich mal wieder was gönnen und nahm das Problem jetzt zum Anlass ... Nachdem ich dann doch ein wenig ziellos bei der Rechnersuche war, widmete ich mich doch ein wenig entspannter dem Problem und gleich meine erste Vermutung stimmte: die Linux-Firewall verhinderte den Zugriff. Schnell eine Ausnahme eingebaut (Zugriff auf den HTTP-Server) und schon konnte ich die Seiten aus meinem Hostsystem (Windows XP) in gewohnter Geschwindigkeit editieren :-)

Gast-Betriebssystem installieren - Ubuntu 14.04 LTS

Hier musste ich die 3D-Beschleunigung in den VM-Setting aktivieren, weil ansonsten der compiz-Prozess eine ganze CPU gebraucht hat und mein System extrem zäh war.


Video Capture

Virtualbox bringt bereits Video Capturing mit, das man in einem laufenden Image jederzeit starten kann ... super praktisch. Das Aufzeichnungformat ist WebM, das leider nicht von allen Browsern derzeit zuverlässig abgespielt werden kann (Stand Frühling 2017). Aber mit Handbrake hat kann das leicht in MP4 transformiert werden.


VirtualBox 4.x

Mit 4.0.2 hat sich die Folderstruktur geändert ... eigentlich eine gute Sache, denn alle Dateien eines Images sind nun in EINEM Ordner vereint.

Upgrade 4.0.0 -> 4.1.8: FEHLGESCHLAGEN

Beim Wechsel von 4.0.0 auf 4.1.8 kam es bei mir unter einem Windows XP Wirtsystem zu einem Absturz (BlueScreen mit fw.sys ...) am Ende der Installation. Nach ein paar Abstürzen hintereinander wurde das System wieder stabiler ... nur leider hatte ich keine WLAN-Verbindung mehr. Erst nach einer Rückkehr auf 4.0.0 lief das WLAN wieder und die Bluescreen verschwanden. Auf einem anderen Rechner hatte ich eine laufende/stabile 4.1.8 und ich versuchte leider vergeblich, mein unter 4.0.0 laufendes Image zum Laufen zu bringen. Weder direkt noch über einen Export/Import.

I/O-Performance

Die "normale virtuelle Plattenperformance" ist ganz ok ... nicht so gut wie nativ aber durchaus so gut, daß ich meine Entwicklungsumgebung innerhalb meine Gast-Linux ohne deutlichen Zeitverlust laufen lassen kann (z. B. auch maven builds die sehr viele Dateien erzeugen und dementsprechend viel I/O-Last erzeugen).

Die I/O-Performance sowohl über Shared Folders als auch über USB 2.0 ist sehr schlecht. Ein paar Beispiele:

  • im Zuge meiner GIT-Recherchen habe ich feststellen müssen (siehe hier - Abschnitt Performance), daß ein git status über ein Shared Folder bzw. USB 2.0-Stick 30 Sekunden bzw. 0 -60 Sekunden (sehr schwankend) statt 1 Sekunde.
  • ein mvn clean install auf der "normalen virtuellen Platte" dauerte 2 Minuten - auf einem Shared Folder 11 Minuten.

USB 2.0

Vorab: hat man einen USB-Stick eingebunden, dann ist er für das Wirtsystem nicht nutzbar. Wer das nicht möchte, sollte den USB-Stick über SharedFolder einbinden.

Für USB 2.0 Support muss man das Extension-Pack installieren, in der VM-Konfiguration USB 2.0 aktivieren und einen Filter einrichten (ohne Filter hat es bei mir nicht funktioniert ... ich bin mir aber nicht ganz sicher, ob es wirklich daran lag, denn ich habe viel rumspielen müssen, um einen USB-Stick einzubinden - hat nicht sofort funktioniert). Nach einem Restart sollte man über das VM-Menü den USB-Stick aktivieren können - es poppt dann ein Fenster hoch.


VMs zwischen Maschinen austauschen

Hierzu gibt es u. a. folgende Möglichkeiten

  • VM als Appliance exportieren (z. B. im OVA-Format) und dann importieren
  • VM anlegen und nur die Festplatte wiederverwenden

FAQ

Frage 1:

seit 4.3.20 habe ich das Problem, daß ich mein Gastbetriebssystem (Ubuntu 14.04 mit installierten Gast-Erweiterungen) nicht mehr über zwei Bildschirme ziehen kann ... es zieht sich immer wieder auf einem Bildschirm zusammen oder das Fenster ist zwar über zwei Bildschirme gezogen, aber das Gastbetriebssystem nutzt nicht beide Bildschirme (Ränder an den Seiten). Was ist da los?

Antwort 1:

Dieses Problem hat mich fast in den Wahnsinn getrieben. Ich war schon drauf und dran downzugraden. Jetzt habe ich einen verlässlichen Weg gefunden:

  • Automatische Anpassung der Gastanzeige: ABSCHALTEN
  • Fenster über zwei Bildschirme ziehen (rechts und links sind dann weisse Bereiche)
  • Automatische Anpassung der Gastanzeige: ANSCHALTEN - dadurch schrumpft das Fenster auf einen Bildschirm zusammen
  • Automatische Anpassung der Gastanzeige: ABSCHALTEN
  • Fenster über zwei Bildschirme ziehen ... Voila

Frage 2:

Meine Images werden nicht mehr im VirtualBox-GUI angezeigt, aber ich habe sie nicht gelöscht. Wie bekomme ich die da wieder rein?

Antwort 2:

Mir ist das mal probiert als ich mit Vagrant (mit VirtualBox als Provider) rumgespielt habe. Die .vbox Dateien, in der sich die Konfiguration des Images befindet, war noch vorhanden ($HOME/VirtualBox VMs/...) - und die dort eingehangene Festplatte auch. Durch einen Doppelclick aus dem Windows-Explorer auf die vbox-Datei erscheint das Image auch wieder im GUI.

Frage 3:

Wenn ich auf meinem Image NAT eingestellt habe und Port-Forwarding mache, dann komme ich nicht auf den forgewardeten Webserver (http://HOST_IP:FORWARD_PORT/application). Ich habe schon überprüft, ob der forgewardete Port vielleicht nur an das Localhost-Interface gebunden ist ... aber das ist nicht der Fall.

Antwort 3:

Ich habe noch keine Antwort gefunden ... mein Workaround ist die Änderung von NAT auf Bridged, so daß das Image eine eigene addressierbare IP hat und ich dann auch mit dem Standardport zugreife: http://IMAGE_IP:80/application.

Frage 4:

Ich habe Virtualbox 5.0.20 installiert. Zudem noch das Extension Pack. In meiner Ubuntu 14.04 LTS habe ich die Gästeerweiterungen installiert. Ich bekam zwar den Hinweis, daß die Kernel-Header-Dateien fehlten, aber die Installation klappte ohne Fehlermeldung. Nach dem Neustart war mein Bild aber noch immer in 640 x 480 Auflösung. Das war mir bisher noch nicht untergekommen ... bisher starteten die Maschinen dann immer in einer ordentlichen Auflösung. Wie bekomme ich eine normale Auflösung?

Antwort 4:

Mit "Anzeige - Automatische Anpassung der Gastanzeige" hat es funktioniert ... es hat dann aber 3-4 Sekunden gedauert bis die grauen Balken um den Screen weggingen ... puh

Frage 5:

Seit dem Update auf 5.0.20 habe ich Probleme mit der Genauigkeit der Maus. Wenn ich einen Test markieren will, dann wird die Zeile drüber markiert. Die Gästeerweiterungen sind installiert und up-to-date. Auch ein Restart des Systems hat nichts gebracht.

Antwort 5:

Bei mir hat es geholfen im Menü "Eingabe - Mauszeiger-Integration" kurzzeitig zu aktivieren und wieder zu deaktivieren. Danach war alles gut. Seltsam ... vielleicht ein Initialisierungsproblem???

Frage 6:

Ich wollte eine Appliance zwischen zwei Rechnern durch Neuanlage einer VM und Einbinden der Festplatte transportieren. Beim Start der Vm bekomme ich aber einer Fehlermeldung Could not find /dev/disk.

Antwort 6:

In meinem Fall hatte ich die Festplatte als SATA-Platte eingebunden ... die Platte war in der alten VM aber als IDE-Platte eingebunden. Nachdem ich sie als IDE-Platte eingebunden habe, hat es einwandfrei funktioniert.

Frage 6a:

Ich wollte eine Appliance zwischen zwei Rechnern durch Export und Import transportieren. Beim Start der Vm bekomme ich aber einer Fehlermeldung Could not find /dev/disk.

Antwort 6a:

Die Festplatte war korrekt als IDE (statt SATA) eingebunden. Allerdings funktionierte es nicht mit dem VMDK Format. Nach Verwendung der Original-VDI-Datei klappte der Start einwandfrei.

Frage 7:

Nach der Installation von VirtualBox 5.1 unter Windows bekomme ich in meinen Linux-Boxen mit UI öffnet sich beim Drücken der Windows-Taste immer das Windows-Start-Menü. Leider verwende ich awesome als Fenstermanager und dort ist die Windows-Taste als Meta-Key eingestellt.

Antwort 7:

Im Menü der Virtualbox-VM muß die Einstellung Input - Keyboard - Keyboard Settings - Virtual Machine - Auto Capture Keyboard angehakt werden.

Frage 8:

Wie nutze ich mehrere Bildschirme unter VirtualBox 5.1.x ... ich schaffe das nicht mit den vielen View-Einstellungen?

Antwort 8:

In der VM muß die Anzahl der Bildschirme eingestellt werden (http://www.ashokraja.me/tips/How-to-enable-dual-or-multi-monitor-support-in-Oracle-Virtual-Box). Und dann sollte das auch mit den View-Einstellungen irgendwie funktionieren. Ich konnte den Bildschirm sogar über 3 Bildschirme ziehen ... hierzu hilft es vielleicht - bei unterschiedlicher Größe der Bildschirme - die Bildschirme über die Windows 10 Settings leicht in der Höhe zu verschieben:

Multiple Screens on Windows

Frage 9:

Einige Programme (z. B. Atom, GitBook Editor) zeigen nur einen schwarzen Bildschirm in meinem Linux-Guest-System.

Antwort 9:

Es gibt zwei Lösungsmöglichkeiten:

  • Option 1 "zentral": in der VirtualBox-Display-Einstellung der VM die Option Enable 3D Acceleration rausnehmen. Achtung: bei einigen Windows-Managern oder Desktop-Environments (z. B. Gnome) wird das System dadurch schnarchlahm (siehe meine Erfahrungen bei der Inbetriebnahme von Ubuntu 14 LTS).
  • Option 2 "pro Applikation": wenn die Einstellung Enable 3D Acceleration in der VM erforderlich ist, dann kann man bei vielen Programmen die Option --disable-gpu (z. B. VisualStudio Code) setzen.

Frage 10:

Ich muß die Guest-Additions nach einem VirtualBox Update neu installieren. Das Mounten der VBoxGuestAdditions.iso über das Menü schlägt mit der kryptischen Fehlermeldung VERR_PDM_MEDIA_LOCKED fehl.

Antwort 10:

Am einfachsten die C:\Program Files\VirtualBox\VBoxGuestAdditions.iso in einem Shared Folder vom Wirtsystem bereitstellen und die Additions per

sudo bash
mount -o loop ./sf_windowsTransfer/VBoxGuestAdditions.iso /cdrom
./VBoxLinuxAdditions.run

installieren.

Die Alternative sudo apt-get install virtualbox-guest-additions-iso installiert meistens nicht die richtige Version (kann man aber sicher mit entsprechendem Paketmanagement lösen)

results matching ""

    No results matching ""