Wie kopiere ich VirtualBox VDI-Inhalte auf eine Partition und boote das Betriebssystem von dort?

12

Ich bin ein Linux-Benutzer, aber ich habe eine komprimierte Windows XP-ISO auf einem USB-Stick dabei, für den Fall, dass ich Windows unbedingt brauche, um etwas zu tun. Dies funktioniert die meiste Zeit in VirtualBox.

Aber jetzt möchte ich ein paar Spiele spielen, also möchte ich das Windows-Image nativ ausführen. Mein Computer hat kein CD-Laufwerk und kann daher nicht einfach die ISO brennen und normal installieren.

Ich versuche, das installierte Windows-Image auf eine physische NTFS-Partition auf meiner Festplatte zu verschieben und GRUB so einzurichten, dass ich es dual booten kann.

Ich habe viele Tutorials gefunden, die sich mit der Umwandlung von VDI in physische Laufwerke befassen. Aber sie gehen davon aus, dass ich mein gesamtes Laufwerk überschreiben möchte. Das Verschieben des Raw-Image ddauf die Partition hat zu einer beschädigten Partition geführt.

Ich habe auch den VMDK-Trick ausprobiert, um diese leere Partition zu verwenden und Windows darauf zu installieren. Obwohl die Textmodus-Phase der Installation ohne Probleme endet, funktioniert die VM nicht, stürzt ab und startet immer wieder neu oder friert sofort ein (je nachdem, wie ich das VMDK erstellt habe, mit -rawdisk /dev/sda3oder -rawdisk /dev/sda -partition 3).

Calmarius
quelle

Antworten:

4

Ich habe alles gestern mit Nachforschungen verbracht und konnte endlich Windows XP booten lassen. Dies sollte auch für andere Betriebssysteme ähnlich sein. Aber die Operation ist alles andere als trivial.

Da dies eine gefährliche Operation ist, empfehle ich, Ihre wertvollen Daten zu sichern.

Hier sind die Schritte:

Vorbereitung

In Windows XP müssen Sie den aktuellen Laufwerksbuchstaben und die Partitionseinstellungen löschen, sodass Sie vor der Migration alle Werte aus dem Schlüssel HKEY_LOCAL_MACHINE / MountedDevices auf der virtuellen Maschine löschen müssen. Der Kernel erstellt ihn beim nächsten Neustart neu. Auf virtuellen Linux-Maschinen bedeutet dies, dass die fstab nach der Migration repariert wird.

Mounten des VDI-Images

Sie können nicht einfach die gesamte VDI auf eine Partition kopieren, da diese auch einen MBR enthält. Sie müssen nur die virtuelle Partition kopieren, also müssen Sie zuerst einen Weg finden, um das VDI zu mounten.

Sie benötigen den nbdTreiber und den qemu-nbdBefehl. Unter Ubuntu ist es im qemu-kvmPaket enthalten.

Laden Sie zuerst den nbd-Treiber:

# modprobe nbd

Dies sollte einige nbdGeräte in machen /dev.

Dann mounten Sie die VDI:

# qemu-nbd -c /dev/nbd0 path_to.vdi

Dies sollte machen /dev/nbd0p1, /dev/nbd0p2, /dev/nbd0p3etc für alle virtuellen Partitionen. Diese können wie gewöhnliche Geräte montiert werden.

Partition migrieren

Verwenden Sie ddfür das, aushängen beide Partitionen vor der Operation:

# dd -if=<nbd_device> -of=<real_partition>

z.B.:

# dd -if=/dev/nbd0p3 -of=/dev/sda4

Der Betrieb der ddist geräuschlos, dies kann einige Minuten dauern, sogar eine halbe Stunde. Während des Vorgangs können Sie ein Terminal öffnen und fdisk -ldamit sehen, ob alles gut läuft.

AKTUALISIEREN:

Anscheinend ist nbd keine narrensichere Lösung. Dies kann einen E / A-Fehler verursachen und dazu führen, dass dd ausfällt. Außerdem schlägt der nächste Versuch sofort fehl. Sie können auch versuchen, ein Raw-Disk-VMDK mit diesem Befehl (unter Linux) zu erstellen:

$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda

Sie müssen in der diskGruppe sein, damit es funktioniert. Fügen Sie dann dieses VMDK der virtuellen Maschine als sekundäre Festplatte hinzu und verwenden Sie dann ein Live Linux ISO für dddie Partition.

Beheben des Bootsektors der NTFS-Partition

Das ist der hackige Teil.

Wir sind fast fertig, aber Windows XP bootet nicht, da wir die Anzahl der verborgenen Sektoren des Dateisystems auf den Offset einstellen müssen 0x1C. Dies ist im Grunde eine Reihe von Sektoren vor der NTFS-Partition. Wir können diese Nummer aus dem fdisk -ulBefehl erhalten. Das startFeld der Ausgabe gibt an, bei welchem ​​Sektor die gegebene Partition beginnt, was im Grunde die Anzahl der Sektoren vor der Partition ist. Holen Sie sich die Zahl von dort und konvertieren Sie sie beispielsweise mit gcalctool in hexadezimal.

Öffne die Partition mit hexedit:

# hexedit /dev/sda4

Schreiben Sie dann die Anzahl der ausgeblendeten Sektoren in Little-Endian-Reihenfolge am 1COffset. Little Endiean bedeutet: 0xABCDEFGHwird sein GH EF CD AB. Wenn die Hexa-Zahl kürzer als 8 Stellen ist, stellen Sie Null voran.

Wenn Sie fertig sind, speichern Sie es und beenden Sie es (Strg + X).

GRUB einrichten

Sie müssen GRUB anweisen, diese Partition direkt zu booten. Fügen Sie für GRUB den folgenden Menüeintrag hinzu:

title       Microsoft Windows XP Professional
root        (hd0,3)
savedefault
makeactive
chainloader +1

Wo (hdX, Y)identifiziert die Partition. X ist 0 für die Standardfestplatte, 1 für /dev/sda, 2 für /dev/sdbusw. Y ist die Partitionsnummer. 0 für /dev/sda1, 1 für /dev/sda2usw.

Dies sollte auch für GRUB2 ähnlich sein, verwendet jedoch eine etwas andere Syntax für Menüeinträge.

Letzter Schliff

Die neue NTFS-Partition ist startbereit. Sie müssen jedoch noch gehackt werden, um auf den Windows XP-Desktop zuzugreifen. Andere Systeme benötigen möglicherweise andere Hacks. Zuerst muss die boot.ini repariert werden.

[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

Stellen Sie die Paritionsnummer entsprechend ein. Ich habe es auf der / dev / sda4 installiert. Die Partitionsnummer sollte also 3 sein.

Möglicherweise müssen Sie den MountedDevices-Eintrag in der Registrierung korrigieren, wenn Windows unmittelbar vor dem Anmeldebildschirm abstürzt.

Die Registrierung <path to windows>/system32/config/systemfinden Sie unter chntpw. Dies kann ein Problem sein, wenn Ihr Systemlaufwerksbuchstabe nicht C lautet. Da chntpwdie Registrierungsschreibfähigkeiten sehr begrenzt sind, müssen Sie auf einen Hexeditor wie ghex2 zurückgreifen und diesen reparieren. In meinem Fall müssen Sie \DosDevices\C:das C suchen und durch einen anderen Laufwerksbuchstaben ersetzen F.

Danach sollten Sie in der Lage sein, auf den Desktop zuzugreifen. Jetzt müssen Sie nach allen Treibern suchen. Dies liegt jedoch außerhalb des Bereichs dieses Lernprogramms.

Quellen

Verschieben von Windows XP auf eine andere Partition

Mounten Sie ein VDI unter Linux

Calmarius
quelle
0

Sie können versuchen, partimage und gdisk zu verwenden, um dies zu tun. Nehmen Sie gdisk oder ein anderes Partitionsprogramm und ändern Sie die Größe Ihrer aktuellen Festplatte / richten Sie eine Partition auf einer Festplatte ein. idealerweise wird es eine primäre Partition sein. Normalerweise behalte ich Partition 1 für Windows und 2+ für Linux-Daten.

Sobald eine Partition eingerichtet ist, können Sie die Gdisk oder einen anderen Ghost-Klon verwenden, um Sicherungsdateien oder ein direktes Image auf dem anderen Laufwerk zu erstellen. Sie können eine Netzwerkverbindung zum Host einrichten, wenn Sie die Datei auf diese Weise löschen müssen, oder Sie können IMG-Dateien erstellen und dann von der VMDK-Datei auf Ihr Host-System kopieren. Verwenden Sie dann die Image-Software, um die Partition wiederherzustellen an den Ort, den Sie auf dem Host-System erstellt haben

Konfigurieren Sie grub nach Bedarf, um dieser ntfs-Partition das Booten hinzuzufügen.

Kendrick
quelle
Sie können das vmdk wahrscheinlich auch in einer Weise konfigurieren, die es der Image-Software ermöglicht, es direkt vom Host zu lesen. Dies hängt jedoch davon ab, wie die Image-Software ist.
Kendrick
Ich habe alles gestern mit Nachforschungen verbracht und konnte endlich Windows XP booten lassen. Ich werde es im Detail aufschreiben. Es ist nicht trivial.
Calmarius
Es ist ziemlich ironisch, aber ich werde diesen Prozess bald zu tun brauchen. Ich habe einen PC, der aus irgendeinem Grund kein Solaris installiert, also muss ich die Daten von einem VM, den ich habe, auf die neue Maschine ziehen.
Kendrick