German, Linux, Virtualisierung

Eine physikalische Windows 10 Partition unter Linux in VirtualBox booten

Kürzlich habe ich ein Lenovo P1 erworben, welches bereits ein vorinstalliertes Windows 10 Pro hatte. Natürlich habe ich direkt ein Linux installiert: In meinem Fall ein Kubuntu 20.04. Dazu habe ich die bereits existente NTFS-Partition mit Windows Installation auf 850GB etwas verkleinert und 100GB freien Platz für Linux geschaffen. Warum habe ich die NTFS-Partition so groß gelassen? Weil es nach meinen Recherchen wesentlich besser funktioniert von Linux aus auf einer NTFS-Partition zu schreiben, als in Windows eine ext4 Partition einzurichten. Die gemeinsame Datenpartition wird also die Windows NTFS-Partition. Auf eine swap-Partition habe ich ganz verzichtet, da 48GB Ram für alles Mögliche ausreichen wird.

Nun habe ich also ein Dual-Boot System Ubuntu 20.04 / Windows 10. Das ist schon mal fein. Aber auch unter Linux brauche ich gerne mal schnell die Windows-Funktionalitäten zur Hand (Photoshop, …). Und da zwei Windows 10 Instanzen zu pflegen doppelter Aufwand ist, kommt eine Möglichkeit das physische System in VirtualBox zu booten hier gerade recht. Darum soll es hier nun gehen.

Die Windows-Partitionen identifizieren

Ich benutze hier mal ganz einfach den KDE-Partition Manager. Wer kein Kubuntu hat und wo der KDE-Partition Manager fehlt, kann er nachinstalliert werden:

sudo apt-get install partitionmanager

Schauen wir uns mal die Partitionierung an. Diese sollte auf jedem System mit EFI ähnlich aussehen.

Hier sehen wir folgende Partitionen:

  • /dev/nvme0n1p1 eine fat32 Partititon, die zum EFI gehört. Man erkennt sie auch, weil sie unter /boot/efi gemountet ist. Diese Partition ist für uns relevant, da wir sie zum booten benötigen.
  • /dev/nvme0n1p2 ist eine so genannte Microsoft Reserved Partition, die heutzutage eigentlich keine Relevant mehr hat.
  • /dev/nvme0n1p3 ist nun die eigentlich wichtige Partition für uns. Hier liegt Windows.
  • /dev/nvme0n1p5 enthält unsere Linux Distribution
  • /dev/nvme0n1p4 enthält ein Windows Recovery, falls man Windows mal neu aufsetzen muss.

Zugriffsrechte im Dateisystem

Um auch ohne sudo vollständigen Zugriff auf unsere Windows 10 Partition zu haben, müssen wir noch was tun. Der beste Weg dazu ist eine udev Regel zu definieren, die die Windows 10 Partition zu einer bestimmten group hinzufügt.

Erstellen wir zunächst eine neue Gruppe für die Windows 10 Partition:

sudo groupadd win10disk

Nun den eigenen Benutzer der Gruppe hinzufügen

sudo usermod -a -G win10disk youruser

Nun müssen wir die UUID der Windows 10 Partition herausfinden. Das geht wie folgt:

sudo udevadm info /dev/nvme0n1p3 | grep UUID

Dies sollte die UUID ausgeben, z.B. wie folgt:

E: ID_PART_TABLE_UUID=579b23f9-843f-4fec-a246-0ed74800bef1

Sollte sich eine andere eindeutige ID als ID_PART_TABLE_UUID ergeben, funktioniert dies auch. Kopiere die Variable und erstelle die Datei /etc/udev/rules.d/99-win10disk.rules mit in etwa folgendem Inhalt:

ENV{ID_PART_TABLE_UUID}=="579b23f9-843f-4fec-a246-0ed74800bef1", GROUP="win10disk"

Speichere die Datei und führe nun einen Neustart durch. Prüfe nun, ob alles funktioniert hat mit:

ls -l /dev/nvme0n1p3

Der Output sollte in etwa wie folgt aussehen:

brw-rw---- 1 root win10disk 259, 3 Jun  1 13:29 /dev/nvme0n1p3

VirtualBox Raw Host Access VMDK Datei

Damit VirtualBox die physischen Partitionen vom EFI und Windows booten kann, muss einen spezielle VMDK (Virtual Machine Disk) Datei erstellt werden, welche die Partitionen repräsentiert. Diese Datei enthält keinen Daten von den physischen Partitionen, sondern ist nur eine Art Verweis, der VirtualBox den Zugriff erlaubt.

Du kannst das VirtualBox raw disk image mit VBoxManage erstellen. Das Zielverzeichnis kann mit der Option -filename spezifiziert werden. Wir wollen die Partitionen /dev/nvme0n1p1 (EFI) und /dev/nvme0n1p3 (Windows) einbinden. Das wären Partitionen 1 und 3 von /dev/nvme0n1:

VBoxManage internalcommands createrawvmdk -filename ~/win10.vmdk -rawdisk /dev/nvme0n1 -partitions 1,3

Die Ausgabe sollte in etwa wie folgt aussehen:

RAW host disk access VMDK file /path/to/windows10.vmdk created successfully.

Die Virtuelle Maschine Erstellen und Konfigurieren

Erstelle wie üblich eine Windows 10 VM. Wähle bei Hard disk die Option “Use an existing virtual hard disk file” und wähle die zuvor erstellte win10.vmdk aus.

Wenn der Wizard abgeschlossen ist, öffne die Settings der neuen VM. Wähle bei System bei “Boot Order” als einziges “Hard Disk” aus und deaktiviere alle anderen Optionen. Aktiviere die Option “Enable EFI (special OSses only)”, sofern dein Laptop EFI benutzt (davon gehen wir hier aus):

Unter Storage kannst du noch mal kontrollieren, ob alles richtig eingebunden ist. Hier sollte unter Controller: SATA die Datei win10.vmdk ausgewählt sein. Vermutlich wirst du die Option “Solid-state Drive” noch aktivieren wollen.

GRUB einrichten

Starten wir nun die virtuelle Maschine. Höchst wahrscheinlich wird nun GRUB starten ohne Windows direkt laden zu können. Mit ls kannst du dir alle Partitionen anzeigen lassen:

grub> ls
(proc) (hd0) (hd0,gtp5) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)

Wir wissen schon, dass unsere Windows Installation auf Partition 3 liegt. Verifizieren wir dies:

grub> ls (hd0,gpt3)
Partition hd0,gpt3: Filesystem type ntfs - Label 'Windows', UUID ABCDEF - Partition start at 283648KiB

Führe jetzt folgendes aus:

grub> insmod part_gpt
grub> insmod chain
grub> set root=(hd0,gpt3)
grub> insmod ntfs

Wir müssen noch die bei unserem Linux als /boot/efi gemountete Partition/dev/nvme0n1p1als chainloader definieren:

grub> chainloader (hd0,gtp1)/EFI/Microsoft/Boot/bootmgfw.efi

Und das wars! Wir können nun den Bootvorgang starten. Die gemachten Einstellungen werden gespeichert und Windows fährt in Zukunft von selber hoch.

grub> boot

Was es noch zu beachten gibt

Nun nicht vergessen die VBoxGuestAdditions.iso einzulegen (DevicesInsert Guest Additions CD Image) und zu installieren. Nach einem Neustart von Windows sollte jetzt alles funktionieren. Insbesondere sollte die Fenstergröße frei verändert werden können.

Ist das nicht der Fall, liegt das an einem Bug der aktuellen VirtualBox Version (6.1.8), der bei manchen aufzutauchen scheint und bei manchen nicht. Das Problem lässt sich lösen, in dem in den Settings der VM unter Display den Graphics Controller auf VBoxVGA setzt und Enable 3D Acceleration deaktiviert. Das ist nicht optimal, aber alle mal besser als auf einem viel zu kleinen Bildschirm zu arbeiten. Dann die VM ein mal sauber über das Betriebssystem herunterfahren und wieder hochfahren. Es sollte jetzt funktionieren.

Windows 10 Schnellstart & Hibernate

Denkt daran, dass man den Schnellstart unter Windows 10 deaktivieren muss. Das sollte man aber auch schon für einfaches Dual-Boot tun. Es kommt sonst zu Problemen mit ggf. Datenverlusten. Auch Hibernate ist manchmal Problematisch und ich rate davon ab, diesen zu benutzen.

Fazit

Es ist erstaunlich, dass Windows 10 in dieser Form so gut funktioniert. Man bedenke, dass wir bei jedem direkten Start andere Hardware haben als über VirtualBox. Man sollte also Treiberprobleme vermuten. Auch erstaunlich ist, dass keine erneute Aktivierung bei jedem Hardwarewechsel nötig ist. Aber alles ist super und es funktioniert!

Ich persönlich nutze die VM vor allem für Adobe Produkte (Photoshop, Lightroom, Illustrator, Acrobat Pro), Canon EOS Utility, den Brother P-Touch Editor (Labeldrucker) und die Steuererklärung (Taxman 2020 für Selbstständige). Insbesondere Photoshop und Lightroom arbeiten unter einem nativ gebooteten System natürlich besser (Hardwarebeschleunigung!) Eine brauchbare Software für Steuererklärungen von selbstständigen Kleingewerbetreibenden scheint es für Linux leider nicht zu geben (beweist mir gerne das Gegenteil!)

Viele Spaß mit eurem Hybrid-Windows-10

Attribution

Dieser Artikel basiert zum Teil auf dem Artikel “Booting a Physical Windows 10 Disk Using VirtualBox on Linux” von jamieweb.net. Danke für seine Mühen!

Dieser Artikel ist lizenziert unter der Creative Commons Attribution-ShareAlike 4.0 International License.