Dualboot-Windows virtualisieren

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Hinweis:

Die verwendete Windows 10 Version ist ein upgrade mittels Win10_1709_German_x64.iso aus Win7 OEM. Nach Umzug auf eine andere SSD gelingt der Start z.Z. nur mittels sgd.

Hinweise zum Test mit Focal Fossa in der Diskussion

Hinweise zum Test mit Jammy Jellyfish s. Diskussion

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Starten von Programmen

  3. ⚓︎ Ein Terminal öffnen

  4. ⚓︎ Root-Rechte

  5. ⚓︎ VirtualBox

  6. ⚓︎ Erstellen und Ausführen eines Skriptes

Inhaltsverzeichnis
  1. Sicherheitswarnung
  2. Windows vorbereiten
  3. EFI vorbereiten
  4. Aktuelle VirtualBox-Version installieren
  5. Virtuelle Maschine erstellen
  6. Festplattenzugriff vorbereiten
  7. Angleichung Virtuell an Physikalisch
  8. Erster Start von Windows in VirtualBox
  9. Andere Parallelsysteme
  10. Problembehebung
  11. Links

Wiki/Icons/win-ubuntu.png

Dieser Artikel beschreibt die Möglichkeit, ein bereits auf der Festplatte installiertes (und im Dualboot auswählbares) Windows in einem Fenster von VirtualBox in Ubuntu starten und nutzen zu können. Dadurch hat man dieselben installierten Programme, Daten und Einstellungen in beiden Varianten zur Verfügung, und kann unter Ubuntu die parallel installierte Windows-Umgebung aufrufen.

Auch andere Parallelsysteme, wie z.B. ein weiteres parallel installiertes Ubuntu, können auf diese Weise in VirtualBox genutzt werden. Siehe dazu die Hinweise unter Andere Parallelsysteme.

WindowsRAW_screenshot.png Windows_Host-FossaRAW.PNG
Jellyfish-host_Win10gpt-R-gast.PNG Jellyfish-Host_Win11-gpt-R-Gast.PNG

Sicherheitswarnung

Achtung!

Es wird eine Sicherungskopie des zu virtualisierenden Systems empfohlen.

Es ist ein Fall bekannt, in dem VirtualBox und/oder Ubuntu abgestürzt sind, während ein "virtualisiertes" Windows aktiv auf die Festplatte zugriff. Dies führte zur irreparablen Beschädigung des Windows-Systems.

Solange das Parallelsystem in VirtualBox läuft, darf von Ubuntu aus kein schreibender Zugriff auf dessen Partition(en) erfolgen. Dies kann zu Datenkorruption führen. Eine Möglichkeit zur Absicherung ist es, in der Datei /etc/fstab den Zugriff von Ubuntu auf die Gastsystem-Partitionen auf Nur-Lesen-Rechte zu begrenzen. Dazu editiert man /etc/fstab in einem Editor mit Root-Rechten[4]

Für jede Windows-Systempartition ist folgender Eintrag hinzuzufügen (Als Beispiel mit sda1 (System-reserviert) und sda2 (System)):

/dev/sda1	/mnt/boot	ntfs	ro,nosuid,nodev,nofail,x-gvfs-show	0	0
/dev/sda2	/mnt/system	ntfs	ro,nosuid,nodev,nofail,x-gvfs-show	0	0

Für Dateiaustausch kann die Funktion "Gemeinsame Ordner" von VirtualBox genutzt werden.

Windows vorbereiten

Hinweis:

Dieser Artikel wurde mit Windows 7 64-Bit, Windows 8.1 und Windows 10 getestet.

Für Windows 8 und Windows 10 kann die Einschränkung gelten, dass es im VM-Betrieb nicht mit dem Internet verbunden werden darf und mindestens einmal im Monat im normalen Dualboot gestartet werden muss. Dies ist der Fall, wenn es eine Datei /sys/firmware/acpi/tables/MSDM gibt. Erklärung siehe Angleichung Virtuell an Physikalisch.

Treibervorbereitung: Windows 7

  1. Im Ordner C:\WINDOWS\system32\drivers müssen folgende vier Dateien zu finden sein:

    • atapi.sys

    • intelide.sys

    • pciide.sys

    • pciidex.sys

    • Fehlen sie dort, müssen sie gesucht und nach C:\WINDOWS\system32\drivers kopiert werden. Die Dateien liegen in einem Unterordner von C:\WINDOWS\system32\DriverStore\FileRepository, notfalls mit Hilfe der Suchfunktion des Explorers aufspüren. (In der Regel liegen bei Windows 7 die benötigten Treiber bereits im oben genannten Verzeichnis).

  2. Das Skript MergeIDE.reg trägt die obigen Treiber in der Windows-Registry ein.

    • Eine Sicherungskopie von der Windows-Registry-Datei C:\WINDOWS\system32\config\SYSTEM machen mittels "Ausführen... → regedit → Datei → Exportieren".

    • MergeIDE.zip 🇬🇧⮷ herunterladen, entpacken und MergeIDE.reg per Doppelklick ausführen.

Experten-Info:

Das Skript MergeIDE.reg stammt von Microsoft 🇩🇪 und wurde ursprünglich für XP entwickelt. Es hat sich als hilfreich und kompatibel für Windows 7 erwiesen. Ob es für Windows 8 oder 10 benötigt wird, ist noch ungeprüft. Die Batch-Datei MergeIDE.bat stammt vom c't-Magazin 🇩🇪 und ist unbrauchbar.

Windows Produkt-Aktivierung

Windows verlangt bei erheblicher Veränderung seiner Hardwareumgebung eine neue Produktaktivierung bei Microsoft per Internet oder Telefon.

Product Key

Mit dem Programm pkeyui 🇩🇪⮷ lässt sich der Product Key von Windows anzeigen. Es ist sinnvoll, diesen Key auf einem Zettel zu notieren.

Daten zur Produktaktivierung sichern

  • Windows 7, 8.0 : Mit Hilfe des Programms Advanced Tokens Manager 🇩🇪⮷ ein Backup der Aktivierungsdaten machen.

  • Windows 8.1: Für Windows 8.1 kann bisher nur eine telefonische Aktivierung gesichert und wiederhergestellt werden, mit Hilfe des Advanced Tokens Manager 🇩🇪⮷.

  • Windows 10: Vermutlich gilt dasselbe wie für Windows 8.1: Nur eine telefonische Aktivierung kann gesichert werden.

Produktaktivierung wiederherstellen

Sollte es durch den Betrieb von Windows in VirtualBox dazu kommen, dass eine neue Produktaktivierung fällig wird, so kann man mit Hilfe dieser Dateien zumindest für den physikalischen Betrieb den aktivierten Zustand wiederherstellen. In diesem Fall wird so vorgegangen:

  • Windows 7, 8.0: Mit Hilfe des Programms "Advanced Tokens Manager" den aktivierten Zustand wiederherstellen.

  • 8.1, 10: Wiederherstellung mit "Advanced Tokens Manager", falls telefonisch aktiviert. Ansonsten nur Wiederherstellung mit Hilfe des Supports von Microsoft, ggf. automatisch online, schlimmstenfalls telefonisch.

Windows 8 / 10: Produktaktivierung hinauszögern

OEM-Versionen von Windows 8 und 10 können in VirtualBox ohne Internetverbindung einige Tage genutzt werden, bevor sie in den Status "Nicht aktiviert" wechseln. Durch einen physikalischen Start wird der Status "Aktiviert" wieder hergestellt. Erklärung siehe Angleichung Virtuell an Physikalisch. Die Frist zur ungestörten Nutzung in der VM kann auf 30 Tage verlängert werden, wenn in der Eingabeaufforderung von Windows diese Befehle ausgeführt werden:

slmgr /sai 43200
slmgr /sri 43200 

EFI vorbereiten

Neue Computer werden statt mit dem klassischen BIOS oft mit dem neueren (U)EFI gestartet. Ob der eigene Rechner per BIOS oder per EFI startet kann mit diesem Befehl geprüft werden:

[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS 

Startet der Computer mit EFI, muss "Secure Boot" und "Schnellstart" deaktiviert werden:

Secure Boot deaktivieren

Das Abschalten von Secure Boot wird beschrieben im Artikel EFI Grundlagen.

Schnellstart deaktivieren

Aktuelle VirtualBox-Version installieren

Die in den Paketquellen enthaltene Version von VirtualBox ist oft nicht auf dem neuesten Stand. Einige der verwendeten VirtualBox-Funktionen sind noch experimentell. Deshalb wird empfohlen, stets die aktuellste Version von VirtualBox zu verwenden, mindestens aber Version 4.2. Möglichkeiten der Installation aus Fremdquellen (Oracle) sind unter VirtualBox/Installation beschrieben.

Experten-Info:

VirtualBox befindet sich in steter Weiterentwicklung. Einige der in diesem Artikel verwendeten Funktionen sind noch nicht Teil des offiziellen Supports, sondern befinden sich in Erprobungsphase. Bei Problemen mit solchen Funktionen besteht kein Anspruch auf Support von Oracle 🇬🇧; Oracle ist aber selbst an Rückmeldung und Support interessiert.

Virtuelle Maschine erstellen

  1. VirtualBox starten [5]

  2. Neue virtuelle Maschine erstellen: "Neu → Weiter".

  3. Name "WindowsRAW" (andernfalls Skripte und Terminalbefehle anpassen) und Art des Betriebssystems einstellen "→ Weiter".

  4. Arbeitsspeicher zuweisen "→ Weiter". (Der physikalische Speicher muss für beide Systeme aufgeteilt werden, für beide muss genug zur Verfügung stehen).

  5. Kein Festplattenmedium wählen.

  6. "Virtuelle Maschine erzeugen → Weiter". Die virtuelle Maschine wird nun erstellt.

  7. Auf "Ändern" klicken, um weitere Einstellungen vorzunehmen.

  8. Unter "System" "IO-APIC" aktivieren (Häkchen setzen).

  9. EFI: Wenn das System mit (U)EFI statt mit BIOS startet, muss unter "System" "EFI aktivieren" aktiviert werden (Häkchen setzen)

  10. Unter "Ändern → Netzwerk → Erweitert" die Option "Kabel verbunden" abschalten. (Häkchen entfernen).

  11. Sinnvoll ist es, den virtuellen Grafikkartenspeicher unter "Anzeige" zu erhöhen.

Experten-Info:

Im Ordner ~/VirtualBox VMs liegen die virtuellen Maschinen von VirtualBox. Es ist ein neues Unterverzeichnis WindowsRAW entstanden. Darin werden die zugehörigen Dateien versammelt. Neu entstanden ist WindowsRAW.vbox, das die Konfiguration der VM enthält.

Festplattenzugriff vorbereiten

Windows-Partitionen ermitteln

Achtung!

Vor Beginn bitte sicherstellen, dass die Festplatte oder Partition auf der sich Windows befindet nicht im System eingehängt ist.

Es wird ermittelt, auf welchen Festplatten und Partitionen Windows installiert ist: [3]

sudo parted -l 

Die gefundenen Festplatten und ihre Partitionen werden ausgegeben. Dies kann bspw. so aussehen:

Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      1049kB  420MB   419MB   ntfs            Basic data partition          hidden, diag
 2      420MB   735MB   315MB   fat32           EFI system partition          boot
 3      735MB   869MB   134MB                   Microsoft reserved partition  msftres
 4      869MB   299GB   298GB   ntfs            Basic data partition
 6      299GB   299GB   400MB   ext4
 7      299GB   301GB   1400MB  linux-swap(v1)
 8      301GB   481GB   180GB   ext4
 9      481GB   980GB   500GB   ext4
 5      980GB   1000GB  19.9GB  ntfs            Basic data partition          hidden, diag

Bootloader erzeugen

Der Bootloader mbr 🇬🇧 dient als Alternative zu GRUB 2, um damit Windows in VirtualBox booten zu können. [1]

Befehl zum Installieren der Pakete:

sudo apt-get install mbr 

Oder mit apturl installieren, Link: apt://mbr

Mit dem Befehl

install-mbr --force ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.mbr 

wird eine Bootloader-Datei WindowsRAW.mbr erzeugt: [3], die noch bearbeitet werden muß

  1. Benötigt wird der Wert von disk identifier der Platte, auf der sich Windows befindet. Er wird angezeigt beim Aufruf von: sudo fdisk -l /dev/sdX # X entsprechend

  2. In die .mbr Datei wird mit folgendem Befehl der Wert von disk identifier (in der deutschen Version Medienkennung) eingetragen. Dabei FESTPLATTENIDENTIFIKATION durch den entsprechenden Wert ersetzen:

echo FESTPLATTENIDENTIFIKATION | sed -e 's/0x\(..\)\(..\)\(..\)\(..\)/0x\4\3\2\1/' | xxd -r |  dd of=~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.mbr bs=1 seek=440 conv=notrunc  

Der Wert unterscheidet sich je nach verwendetem Partitionierungsschema MBR/MPT bzw. GPT

Im ersten Fall ist FESTPLATTENIDENTIFIKATION == 0x5b1e1ffa; im zweiten Fall wird für FESTPLATTENIDENTIFIKATION == 0xA337909A-F835-4869-A3F3-4B8848F76044 gesetzt, also ein "0x" vorangestellt. Beide Werte sind beispielhaft und durch die entsprechenden Werte des eigenen Systems zu ersetzen.

Verweis auf Festplatte erzeugen

Mit folgendem Befehl wird ein Verweis auf die physikalische Festplatte erzeugt:

sudo VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.vmdk -rawdisk /dev/sda -partitions WIN_PARTITION -mbr ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.mbr -relative 

Hinweis:

ab VBox Version 7.x wie nachstehend geändert! --filname, --property RawDrive= und --property Partitions sind an die Gegebenheiten anzupassen

für V 7.x:

VBoxManage createmedium disk --filename path-to-file.vmdk --format=VMDK --variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5 

Die Besitzrechte der von VBoxManage erzeugten Dateien müssen nun auf den aktuellen Benutzer übertragen werden: [3]

sudo chown $USER ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.vmdk
sudo chown $USER ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW-pt.vmdk 

Sollten mehrere Nutzer den Computer und die VM nutzen können, ist es sinnvoll den chown-Befehl abzuändern:

sudo chown $USER:vboxusers ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.vmdk
sudo chown $USER:vboxusers ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW-pt.vmdk 

Hinweis:

wenn eine ganze Platte eingebunden wird (siehe weiter unten), wird nur eine *.vmdk angelegt und heißt in dem Falle (siehe unten) WindowsRAW_sdc.vmdk

Experten-Info:

Windows hat nur auf die mittels -partitions freigegebenen Partitionen Zugriff. Zwar sieht Windows alle Partitionen der unter -rawdisk angegebenen Festplatte, kann auf diesen jedoch nur Nullen lesen und nicht schreiben.

Sollte Windows eine Festplatte für sich haben, ist es unter Umständen daher sinnvoll, alle Partitionen der Festplatte anzugeben.

Optional: Zusätzliche Festplattenverweise

Analog zum obigen Vorgehen können zusätzliche Festplattenverweise erzeugt werden. Der virtuelle MBR sollte Verwendung finden. Das verringert die Gefahr der Zerstörung des physikalischen Bootsektors (und damit meist GRUB).

  • Beispiel 1: Partitionen einer anderen Festplatte

    • Für die Partitionen /dev/sdb2 und /dev/sdb4 auf der Festplatte /dev/sdb lautet der Befehl:

      sudo VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW_sdb.vmdk -rawdisk /dev/sdb -partitions 2,4 -mbr ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW.mbr -relative 
  • Beispiel 2: Vollständige andere Festplatte

    • Für die gesamte Festplatte /dev/sdc lautet der Befehl:

      sudo VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/WindowsRAW/WindowsRAW_sdc.vmdk -rawdisk /dev/sdc  

Die Rechte müssen auch hier korrekt vergeben werden.

Zugriffsrechte erteilen

Variante 1: (Für BENUTZER den eigenen Benutzernamen eintragen)

# Zugriffsrechte für VirtualBox raw disk access
# Nur Benutzer BENUTZER kann direkt auf sda1 zugreifen
#
KERNEL=="sda1", OWNER="BENUTZER", MODE="0664" 

Variante 2:

# Zugriffsrechte für VirtualBox raw disk access
# Nur Gruppe vboxusers kann direkt auf sda1 zugreifen
#
KERNEL=="sda1", GROUP="vboxusers", MODE="0664" 

Zusatzbeispiele:

# Zugriffsrechte für VirtualBox raw disk access
# Nur Gruppe vboxusers kann direkt auf die Partitionen sdb2 und sdb4 sowie auf die gesamte Festplatte sdc zugreifen
#
KERNEL=="sdb2", GROUP="vboxusers", MODE="0664" 
KERNEL=="sdb4", GROUP="vboxusers", MODE="0664" 
KERNEL=="sdc", GROUP="vboxusers", MODE="0664" 

Natürlich sind auch Kombinationen von Nutzer und Gruppe möglich.

Experten-Info:

VirtualBox benötigt für RAW-Festplatten Lese-, als auch Schreibzugriff. Andernfalls kann es vorkommen, dass VirtualBox auf das Medium nicht zugreifen kann und im Medienmanager einen Fehler ausgibt, der im ersten Moment auf fehlende Dateiberechtigungen für die oben erstellten vmdk-Dateien schließen lassen würde.

Durch einen Systemneustart oder mit folgendem Befehl wird die Rechtevergabe wirksam gemacht: [3]

sudo udevadm trigger 

(Im Zweifelsfall neu starten, der Befehl scheint nicht immer erfolgreich zu sein.)

Festplattenverweis einhängen

Das Einhängen und Aushängen von Speichermedien ist unter "WindowsRAW → Ändern → Massenspeicher" möglich. Dort werden auch virtuelle SATA- und IDE-Controller verwaltet.

Angleichung Virtuell an Physikalisch

Die folgenden Unterpunkte dienen dazu, die virtuellen Hardwaredaten den physikalischen Daten des Computers weitmöglichst anzugleichen.

Experten-Info:

Für Überprüfung und Korrektur der Angleichung gibt es mehrere Möglichkeiten:

  • Die Skripte tragen die ermittelten Werte in die Datei WindowsRAW.vbox ein. Dort kann man nachsehen.

  • WindowsRAW.vbox bitte nicht editieren! Eintragungen können durch Setzen von "" statt z.B. "<EMPTY>" entfernt werden. Veränderungen sind nur mit Hilfe von VBoxManage zulässig.

  • Wenn eine Ubuntu Desktop-CD in WindowsRAW gebootet wird, kann z.B. mit Hilfe von dmidecode vieles überprüft werden. Vgl. auch die Problembehebung, ganz am Ende, zum Thema "Produktaktivierung".

  • Es gibt auch ein dmidecode für Windows 🇬🇧 ⮷. In der Eingabeaufforderung von Windows 🇬🇧 zeigt es dieselbe Ausgabe wie von Ubuntu her bekannt.

Jede Version (und ihre Installationsvarianten) von Windows haben verschiedene Schwerpunkte in der "Hardwarebewertung" der "Identitätsprüfung" des Computers. (Hinweise dazu in den Links). Einige scheinen allen mehr oder minder gemeinsam zu sein. Besonders wichtige Hardwaredaten sind:

  • DmiSystemUuid (dmidecode -t1)

  • Seriennummer der Festplatte

  • Hardwareadressen der Netzwerkadapter

  • SLIC-Tabelle (nur Windows 7 sowie per Update von Vista/7 installiertes 8 oder 10)

  • DmiBoard-Parameter (dmidecode -t2)

  • Neu seit Windows 8 ist die MSDM-Tabelle. Diese ist komplexer aufgebaut als ihr Vorgänger SLIC. Sie enthält einen Hardware-Hash, der aus nicht öffentlich bekannten Eigenschaften der Hardware berechnet wird und dient der möglichst eindeutigen Wiedererkennung des Rechners. Der Schwerpunkt der Prüfung soll auf dem Mainboard liegen. Die virtuellen Hardwareanpassungen dieses Artikels reichen nicht aus, um diesem Hardware-Hash zu entsprechen. Mögliche Ansätze zur noch besseren virtuellen Hardwareangleichung werden in der Diskussion zum Artikel beschrieben.

SLIC-Tabelle

Die OEM-Versionen von Windows 7, also vom Hardwarehersteller vorinstallierte Windowsversionen, lesen aus dem BIOS die SLIC-Tabelle aus, um zu überprüfen, ob sie auf dem "richtigen" Rechner installiert sind. Wurde von Windows 7 ein Update auf Windows 8 oder 10 gemacht, wird die SLIC-Tabelle auch ausgelesen.

Virtuelle BIOS-Daten angleichen

Es werden einige physikalische BIOS-Daten benötigt: [3]

sudo dmidecode -t0 

Die Ausgabe kann z.B. so aussehen:

# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
	Vendor: Phoenix Technologies LTD
	Version: R01-A0T   
	Release Date: 05/25/2005
	Address: 0xE63F0
	Runtime Size: 105488 bytes
	ROM Size: 512 kB
	Characteristics:
		ISA is supported
                [...]
        Bios Revision: 2.3
        Firmware Revision: 2.3

Außerdem:

sudo dmidecode -t1 

Die Ausgabe kann z.B. so aussehen:

# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0001, DMI type 1, 25 bytes
System Information
	Manufacturer: 0001
	Product Name: WIM 2050
	Version:                
	Serial Number: System serial number                            
	UUID: 20202020-2020-2020-2020-202020202020
	Wake-up Type: Power Switch
        Family: To be filled by O.E.M.

Des Weiteren werden die Werte von dmidecode -t2, dmidecode -t3, dmidecode -t4 und dmidecode -t11 benötigt,

Es wird ein Skript mit dem Namen WindowsRAW_BIOS.sh erstellt, das die wichtigsten BIOS-Daten in die Konfiguration der virtuellen Maschine überträgt. Das Skript nicht wie gegeben ausführen, sondern den eben ermittelten Daten gemäß anpassen! [6]

Das Skript wird einmal ausgeführt und danach nicht mehr benötigt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#! /bin/bash
VM_NAME="WindowsRAW"                                                          # Name der Virtuellen Maschine
VSETED="VBoxManage setextradata $VM_NAME"
CFG_PATH="VBoxInternal/Devices/pcbios/0/Config"                               # klassisches BIOS-System
# CFG_PATH="VBoxInternal/Devices/efi/0/Config"                                  # EFI-System


$VSETED $CFG_PATH/DmiBIOSVendor       "string:Phoenix Technologies LTD"       # "Vendor" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSVersion      "string:R01-A0T"                        # "Version" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSReleaseDate  "string:05/25/2005"                     # "Release Date" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSReleaseMajor  "2"                                    # "Bios Revision 1. Zahl" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSReleaseMinor  "3"                                    # "Bios Revision 2. Zahl" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSFirmwareMajor "2"                                    # "Firmware Revision 1. Zahl" aus "dmidecode -t0"
$VSETED $CFG_PATH/DmiBIOSFirmwareMinor "3"                                    # "Firmware Revision 2. Zahl" aus "dmidecode -t0"

$VSETED $CFG_PATH/DmiSystemVendor     "string:0001"                           # "Manufacturer" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemProduct    "string:WIM 2050"                       # "Product Name" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemVersion    "<EMPTY>"                               # "Version" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemSerial     "string:System serial number"           # "Serial Number" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemSKU        "<EMPTY>"                               # "SKU Number" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemUuid       "string:20202020-2020-2020-2020-202020202020"  # "UUID" aus "dmidecode -t1"
$VSETED $CFG_PATH/DmiSystemFamily     "string:To be filled by O.E.M."         # "Family" aus "dmidecode -t1"

$VSETED $CFG_PATH/DmiBoardVendor      "string:Notebook"                       # "Manufacturer" aus "dmidecode -t2"
$VSETED $CFG_PATH/DmiBoardProduct     "string:WIM 2050"                       # "Product Name" aus "dmidecode -t2"
$VSETED $CFG_PATH/DmiBoardVersion     "string:Rev.A"                          # "Version" aus "dmidecode -t2"
$VSETED $CFG_PATH/DmiBoardSerial      "<EMPTY>"                               # "Serial Number" aus "dmidecode -t2"
$VSETED $CFG_PATH/DmiBoardAssetTag     "string:asset"                          # "Asset Tag" aus "dmidecode -t2"
$VSETED $CFG_PATH/DmiBoardBoardType   "1234"                                  # "Type" aus "dmidecode -t2", muss eine Zahl (Integer) oder "" sein. Siehe auch Hinweis
$VSETED $CFG_PATH/DmiBoardLocInChass  "string:locinchass"                     # "Location in Chassis" aus "dmidecode -t2"

$VSETED $CFG_PATH/DmiChassisAssetTag  "<EMPTY>"                               # "Asset Tag" aus "dmidecode -t3"
$VSETED $CFG_PATH/DmiChassisSerial    "<EMPTY>"                               # "Serial Number" aus "dmidecode -t3"
$VSETED $CFG_PATH/DmiChassisVendor    "string:Medion"                         # "Manufacturer" aus "dmidecode -t3"
$VSETED $CFG_PATH/DmiChassisVersion   "string:N/A"                            # "Version" aus "dmidecode -t3"
$VSETED $CFG_PATH/DmiChassisType       "1234"                                 # "Type" aus "dmidecode -t3", muss eine Zahl (Integer) oder "" sein. Siehe auch Hinweis

$VSETED $CFG_PATH/DmiProcManufacturer  "string:Intel"                         # "Manufacturer" aus "dmidecode -t4"
$VSETED $CFG_PATH/DmiProcVersion       "string:Intel(R) Pentium(R) M processor"  # "Version" aus "dmidecode -t4"

$VSETED $CFG_PATH/DmiOEMVBoxVer        "string:SMBIOS 2.3"                    # "String 1" aus  "dmidecode -t11"
$VSETED $CFG_PATH/DmiOEMVBoxRev        "string:Customer Reference Platform"   # "String 2" aus  "dmidecode -t11"

Hinweis:

Sollte VirtualBox später für einen Parameter der mit <EMPTY> belegt ist einen Fehler ausgeben, bearbeitet man das Skript so, dass der bemängelte Wert einen sinnvollen Wert besitzt und führt es erneut aus. Wenn zum Beispiel dmidecode -t0 keinen Parameter Firmware Revision angibt, so kann dort auch die Werte von Bios Revision genutzt werden.

Hinweis:

Bei den beiden "Type"-Parametern, die nur Integer enthalten dürfen, gibt dmidecode regelmäßig Strings aus. Die Zuordnung dieser zu Integerwerten lässt sich aus dem Dokument DSP0134_2.7.0.pdf ⮷ entnehmen. Sie stehen dort auf den Seiten 35 bis 38 in den Tabellen 14 und 16. Die Werte sind dort allerdings als Hex angegeben und müssen noch in Dezimalwerte umgerechnet werden. Falls der von dmidecode -t3 ausgegebene Wert z.B. "Notebook" ist, ist eine "10" anzugeben.

Virtuelle Festplattendaten angleichen

Es werden einige Daten zur Festplatte benötigt. Die Angabe /dev/sda muss ggf. angepasst werden, wenn Windows z.B. auf der /dev/sdb-Platte liegt (siehe Windows-Partitionen ermitteln): [3]

sudo hdparm -i /dev/sda 

Die Ausgabe kann z.B. so aussehen:

/dev/sda:

 Model=WDC WD1200BEVE-00WZT0, FwRev=01.01A01, SerialNo=WD-WX60A89E4748
 [...]

Bei neueren Systemen (vor allem, wenn eine M2-SSD-Festplatte genutzt wird) kann es vorkommen, dass hdparm den Fehler

HDIO_GET_IDENTITY failed: Inappropriate ioctl for device

ausgibt. Sollte dies der Fall sein, installiert man das Package

Befehl zum Installieren der Pakete:

sudo apt-get install nvme-cli 

Oder mit apturl installieren, Link: apt://nvme-cli

und führt den folgenden Befehl aus:

sudo nvme list 

Beispielsweise kann die Ausgabe so aussehen:

Node             SN                   Model                                    Version  Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- -------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     S2GLNCAGC14199E      Samsung SSD 950 PRO 256GB                1.1      1          59,24  GB / 256,06  GB    512   B +  0 B   1B0QBXX7

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#! /bin/bash
VM_NAME="WindowsRAW"                                                  # Name der Virtuellen Maschine
VSETED="VBoxManage setextradata $VM_NAME"

CFG_PATH="VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster"       # (Festplatte hängt am Primary Master vom virtuellen IDE-Controller)
# CFG_PATH="VBoxInternal/Devices/piix3ide/0/Config/SecundaryMaster"     # (Alternativ: Festplatte hängt am Secundary Master vom virtuellen IDE-Controller)
# CFG_PATH="VBoxInternal/Devices/piix3ide/0/Config/PrimarySlave"        # (Alternativ: Festplatte hängt am Primary Slave vom virtuellen IDE-Controller)
# CFG_PATH="VBoxInternal/Devices/piix3ide/0/Config/SecundarySlave"      # (Alternativ: Festplatte hängt am Secundary Slave vom virtuellen IDE-Controller)
# CFG_PATH="VBoxInternal/Devices/ahci/0/Config/Port0"                   # (Alternativ: Festplatte hängt am Port 0 vom virtuellen SATA-Controller)
# CFG_PATH="VBoxInternal/Devices/ahci/0/Config/Port1"                   # (Alternativ: Festplatte hängt am Port 1 vom virtuellen SATA-Controller)
# CFG_PATH="VBoxInternal/Devices/ahci/0/Config/Port2"                   # (Alternativ: Festplatte hängt am Port 2 vom virtuellen SATA-Controller)

$VSETED $CFG_PATH/ModelNumber         "string:WDC WD1200BEVE-00WZT0"  # "Model" aus "hdparm -i /dev/sda"
$VSETED $CFG_PATH/FirmwareRevision    "string:01.01A01"               # "FwRev" aus "hdparm -i /dev/sda"
$VSETED $CFG_PATH/SerialNumber        "string:WD-WX60A89E4748"        # "SerialNo" aus "hdparm -i /dev/sda"

Virtuelles CD/DVD-Laufwerk angleichen

Wenn ein physikalisches CD/DVD-Laufwerk vorliegt, muss ein virtuelles CD/DVD-Laufwerk am virtuellen SATA-Controller eingehangen werden. (Es ist zwar möglich, auch an den virtuellen IDE-Controller CD/DVD-Laufwerke einzuhängen, für diese können die Hardwaredaten aber nicht verändert werden.)

Es werden Angaben zum physikalischen CD/DVD-Laufwerk benötigt:

cdrecord -scanbus 

Die Ausgabe kann z.B. so aussehen:

scsibus1:
        1,0,0   100) 'Optiarc ' 'DVD RW AD-7710H ' '1.S0' Removable CD-ROM
        1,1,0   101) *              
  [...]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
VM_NAME="WindowsRAW"                                    # Name der Virtuellen Maschine
VSETED="VBoxManage setextradata $VM_NAME"
PORT="Port0"                                            # CD/DVD-Laufwerk hängt am ersten Port (=Port 0) vom virtuellen SATA-Controller
# PORT="Port1"                                            # (Alternativ: CD/DVD-Laufwerk hängt am zweiten Port (=Port 1) vom virtuellen SATA-Controller)
# PORT="Port2"                                            # (Alternativ: CD/DVD-Laufwerk hängt am dritten Port (=Port 2) vom virtuellen SATA-Controller)
 
CFG_PATH="VBoxInternal/Devices/ahci/0/Config/$PORT"

$VSETED $CFG_PATH/ATAPIVendorId       "string:Optiarc"                    # Erster Wert (Hersteller)
$VSETED $CFG_PATH/ATAPIProductId      "string:DVD RW AD-7710H"            # Zweiter Wert (Modell)
$VSETED $CFG_PATH/ATAPIRevision       "string:1.S0"                       # Dritter Wert (Versionsnummer)

Hinweis:

Sollte der Rechner kein optisches Laufwerk besitzen, so kann trotzdem ohne Gefahr ein virtuelles Laufwerk über VirtualBox eingehänt werden (Getestet mit Windows 10, Stand: 25.07.2017).

MAC-Adressen der virtuellen Netzwerkadapter angleichen

Es werden die MAC-Adressen der physikalischen Netzwerkadapter benötigt. Dieser Befehl listet alle Netzwerkadapter und ihre Hardwareadressen auf: [3]

ifconfig -a 

Die Ausgabe kann so aussehen:

eth0      Link encap:Ethernet  Hardware Adresse 00:0a:e4:a3:ed:8a
          [...]

Erster Start von Windows in VirtualBox

  1. Windows erstmals in VirtualBox starten.

  2. Es kann sein, dass das erste virtuelle Starten sehr lange dauert. Auch kann für längere Zeit ein nur schwarzer Bildschirm sichtbar sein. Geduldig sein, Windows schaut sich in der neuen Hardwareumgebung um und braucht Zeit.

  3. Sollte Windows nicht komplett hochfahren, siehe Abschnitt Problembehebung.

  4. Windows bemerkt, dass sich die Hardware verändert hat und bietet an, viele neue Treiber zu installieren. Alle Angebote ablehnen, stattdessen die Gasterweiterungen von VirtualBox installieren. Die Gasterweiterungen scheinen im normalen Dualboot-Betrieb keine Probleme zu machen.

  5. Windows neu starten.

  6. Windows sollte nun virtuell und physikalisch problemlos starten, ohne eine neue Produktaktivierung zu verlangen.

  7. Für Windows 7 kann nun die Internetverbindung in VirtualBox aktiviert werden. Dafür unter "Ändern → Netzwerk → Erweitert" die Option "Kabel verbunden" anschalten. (Häkchen setzen).

  8. Für Windows 8 und Windows 10 darf die Internetverbindung nicht aktiviert werden, falls das BIOS eine MSDM-Tabelle enthält. Es verweigert dann die Mitarbeit und muss heruntergefahren werden.

Andere Parallelsysteme

Dieser Artikel kann analog auch auf andere parallel installierte Betriebssysteme als Windows angewendet werden. Die Schritte Windows vorbereiten und Virtuelle Hardware der physikalischen Hardware angleichen können dann übergangen werden.

Achtung!

* Es darf niemals das aktuell laufende Betriebssystem in VirtualBox gestartet werden! Das führt zur totalen Zerstörung des Systems.

  • Durch Treiberanpassungen für den virtuellen Betrieb kann es dazu kommen, dass das System bei einem normalen physikalischen Start Probleme bekommt. Dies kann auch bei Verwendung der VirtualBox-Gasterweiterungen passieren.

Parallelsysteme mit systemd

Die meisten Linux-Distributionen - wie auch Ubuntu - setzen systemd als Init-System ein. Wenn beim Bootvorgang in fstab eingetragene Partitionen nicht gefunden werden, bleibt der Bootvorgang mit systemd stehen. Für Partitionen, die im Parallelsystem in /etc/fstab eingetragen sind, aber nicht in die VM eingebunden werden sollen, muss im Parallelsystem die Datei /etc/fstab angepasst werden. Die mount-Optionen der betroffenen Partitionen müssen ergänzt werden um die Option nofail. Um den entstehenden timeout von 90 Sekunden beim Bootvorgang auf 1 Sekunde abzukürzen, wird außerdem x-systemd.device-timeout=1 eingetragen. Beispiel:

UUID=5713b814-354b-84d7-9c40-307475c55c57    none    swap    sw,nofail,x-systemd.device-timeout=1    0    0

Paralleles Ubuntu

Ein parallel installiertes aktuelles Ubuntu lässt sich erfreulich unproblematisch mit VirtualBox starten. Es erkennt beim Booten selbständig, dass es in einer virtuellen Umgebung gestartet wird, und passt sich dem an. Der Bootvorgang dauert dabei etwas länger als gewohnt (getestet mit Ubuntu 10.04 und Xubuntu 11.10).

Virtuellen MBR durch GRUB ersetzen

  1. Zum ersten Booten braucht es z.B. die Super Grub2 Disk 🇬🇧⮷

  2. Um das Grub-Auswahlmenü auf das virtualisierte System zu begrenzen, wird innerhalb des virtualisierten Systems sudo update-grub ausgeführt. Dabei wird die physikalische Datei /boot/grub/grub.cfg auf der virtuell genutzten physikalischen Partition überschrieben.

  3. Um Grub in den virtuellen Bootsektor zu installieren, wird innerhalb des virtualisierten Systems sudo grub-install /dev/sda ausgeführt (/dev/sda muss ggf. angepasst werden).

Gasterweiterungen

  • Die Gasterweiterungen können über "Geräte → Gasterweiterungen installieren" als CD eingelegt werden. Installiert wird durch Ausführen von autorun.sh.

  • Nach einem Kernel-Update des virtualisierten Systems müssen die Gasterweiterungen neu installiert werden.

Gemeinsame Ordner

  • Zum Benutzen der Funktion "Gemeinsame Ordner" von VirtualBox muss der Benutzer (innerhalb des virtualisierten Ubuntu) der Gruppe vboxsf beitreten, z.B. mittels sudo adduser $USER vboxsf. Damit die Änderung wirksam wird, muss der virtuelle Benutzer sich ab- und wieder anmelden.

  • Permanent erzeugte gemeinsame Ordner werden von VirtualBox nach einem virtuellen Systemneustart automatisch eingebunden unter /media/sf_ORDNERNAME. Details und Varianten siehe VirtualBox Manual: Shared folders 🇬🇧.

Einschränkungen

  • Es darf nicht dieselbe SWAP-Partition wie die vom Host verwendet werden. Als eine mögliche Alternative kann eine Swap-Auslagerungsdatei angelegt werden.

  • Es ist auch über die Funktion "Gemeinsame Ordner" nicht möglich, dieselben Konfigurationsdateien aus /home zu nutzen wie der Host.

Ubuntu in Windows

Um Ubuntu in VirtualBox in Windows zu starten, wird wie folgt vorgegangen:

Problembehebung

Hinweis:

Pauschale Empfehlung: Bei Problemen sollte geprüft werden, ob die aktuellste Version von VirtualBox installiert ist. Siehe Aktuelle Version von VirtualBox installieren.

Fehlermeldungen von VirtualBox

Probleme beim Booten von Windows

Achtung!

Je nach Fehler bietet Windows manchmal Reparaturmöglichkeiten an. Diese sind meist weder hilfreich noch zielführend und bisweilen eine Gefahr für die Daten. Bitte nicht verwenden.

Für die Reparaturvorschläge in diesem Artikel bitte niemals Wiederherstellungs-CDs vom Hardwarehersteller verwenden.

Sonstige Probleme

Intern

Extern