Wie greife ich mit VirtualBox auf Raw-Geräte zu?

Also versuche ich, den Raw-Gerätezugriff mit VirtualBox einzurichten, um eine ext4/Linux-Festplatte als Gastbetriebssystem in Mac OS X zu verwenden, aber es ist mir noch nicht gelungen.

Gemäß der VirtualBox-Dokumentation, Kapitel 9.9.1.1, https://www.virtualbox.org/manual/ch09.html#rawdisk wird Mac OS X den Raw-Festplattenzugriff für VMs zulassen? Wie richte ich das ein?

Bisher erledigte Dinge: (nicht zu Hause ausprobieren)

Erstellt eine unformatierte vmdk-Datei:

$ sudo VBoxManage internalcommands createrawvmdk -filename /Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk -rawdisk /dev/disk0
RAW host disk access VMDK file /Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk created successfully.

Mach mich zum Besitzer:

$ sudo chown me /Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk

Prüfen Sie, ob VirtualBox etwas in der Datei Xub_raw_disk.vmdk sehen kann:

$ VBoxManage internalcommands listpartitions -rawdisk /Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk
Number  Type   StartCHS       EndCHS      Size (MiB)  Start (Sect)

Da hier nichts für Sektoren oder Partitionen angezeigt wird, muss dies ein Symptom des Problems sein ...

Das Problem ist, wenn ich versuche, die .vmdk-Datei über die GUI oder mit dem folgenden Befehl hinzuzufügen, erhalte ich eine Fehlermeldung:

$ VBoxManage storageattach "Xub_raw_testing" --storagectl "SATA" --port 0 --type hdd --medium /Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk 
VBoxManage: error: Could not find file for the medium '/Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk' (VERR_FILE_NOT_FOUND)
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Medium, interface IMedium, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 178 of file VBoxManageDisk.cpp
VBoxManage: error: Invalid UUID or filename "/Users/me/VirtualBoxVMs/Xub_raw_disk.vmdk"

UPDATE: Hier ist disk0 das dedizierte Linux-Laufwerk. disk1 (nicht verwendet) ist für Mac OS X. Damit mache ich mich zum Besitzer von /dev/disk0 und /dev/disk0s2 mit

$ chown $USER /dev/disk0
$ chown $USER /dev/disk0s2

pro Froggard Howto hat es so gemacht, dass ich das Image zu einer VM hinzufügen konnte. Außerdem /dev/disk0ist jetzt von VBoxManage lesbar:

$ VBoxManage internalcommands listpartitions -rawdisk /dev/disk0
Number  Type   StartCHS       EndCHS      Size (MiB)  Start (Sect)
1       0x00  0   /0  /0   0   /0  /0            976         2048
2       0x00  0   /0  /0   0   /0  /0         227959      2000896

Wenn ich jetzt das Linux-Gastbetriebssystem starte, bekomme ich die FATAL: No bootable medium found! System halted.Meldung. Irgendwelche Ideen, was falsch ist?

Haben Sie überprüft, ob der SATA-Port 0 in Ihrer VM bereits verwendet wird? Oder haben Sie bereits versucht, einen anderen Controller wie den IDE-Controller auszuwählen?
Wenn OS X auf Ihrer internen Festplatte 0 ausgeführt wird, können Sie nicht auf die gesamte Festplatte 0 zugreifen. Sie können jedoch auf die Partition zugreifen, die das ext4-formatierte Dateisystem enthält. Befolgen Sie die Schritte 6 bis 12 in Froggards Antwort . Er tut dies für eine Windows-formatierte Partition. Ersetzen Sie einfach Ihre Linux-Partition.
Welches Betriebssystem verwenden Sie auf dem physischen Computer? Auf welcher physischen Partition ist diese Maschine installiert? Welches Betriebssystem werden Sie in der virtuellen Maschine ausführen? Wird die virtuelle Maschine in einer virtuellen oder physischen Partition installiert. Wenn physisch, welche?

Antworten (3)

Ich musste dies heute tun und habe Ihre Frage gesehen. Hier ist ein Protokoll der Schritte, die ich unternommen habe.

Suchen Sie die Gerätenummer

diskutil listzB 2, wie in /dev/disk2 Annahme 2für den Rest der Anweisungen.

Erstellen Sie das VMDK der virtuellen Maschine

VBoxManage internalcommands createrawvmdk -filename "$HOME/dev-disk2.vmdk" -rawdisk /dev/disk2

Werfen Sie das Gerät vor diesem Schritt aus, andernfalls erhalten Sie eine Fehlermeldung: VERR_RESOURCE_BUSY. fstabMöglicherweise möchten Sie einen Eintrag mit den hinzugefügten Parametern hinzufügen, noautoum zu verhindern, dass das Betriebssystem das Laufwerk erneut bereitstellt.

Ich verwende rdisk-disk2.vmdkfür den Namen, weil diese virtuelle Maschine nur ein Zeiger auf dieses Gerät ist. Nach dem Neustart kann sich die Situation ändern, z. B. könnte einem Gerät eine andere Nummer zugewiesen werden, insbesondere wenn Sie Geräte ausstecken und verschieben.

Starten Sie Virtual Box Manager mit Root-Rechten

sudo /Applications/VirtualBox.app/Contents/MacOS/VirtualBox

Da alle Geräte Root gehören, müssen Sie VirtualBox mit Root-Rechten starten. Das hat Folgen. Ihr Home-Kontext (Home-Ordner und Einstellungen) wird auf root geändert. Ihre anderen virtuellen Maschinen sind nicht sichtbar. Wenn Sie einen Dateibrowser öffnen, sehen Sie standardmäßig den Basisordner des Stammverzeichnisses.

Eine andere Möglichkeit besteht darin, die Berechtigungen des Geräts (nicht empfohlen) so zu ändern, wie Sie es getan haben.

Um die Berechtigungen von Geräten zu bestätigen, können Sie ausführenls -l /dev/disk*

  1. Neuen Computer hinzufügen, Namen angeben: /dev/disk2, Typ: Linux, Version: Arch Linux (64-Bit)
  2. Geben Sie ihm etwas Speicher (was immer Sie können)
  3. Wählen Sie ein vorhandenes Laufwerk mit dem oben erstellten VMDK aus. ( WICHTIG stellen Sie sicher, dass das Laufwerk nicht neu gemountet wurde, sonst erhalten Sie VERR_RESOURCE_BUSY, NS_ERROR_FAILURE)

Installieren Sie ein frisches System

Fügen Sie eine optische Diskdatei hinzu (z. B. ein bootfähiges Linux-ISO Ihrer Wahl) und schalten Sie die optionale Live-CD/DVD ein, damit Sie davon booten können.

Machen Sie das System in VirtualBox bootfähig

Dies ist nicht so offensichtlich, insbesondere wenn Sie ein EFI-Setup verwenden. Wenn Sie verwenden grub-mkconfig, lautet der Name der EFI-Datei grubx64.efi (unter der Annahme von 64 Bit). VirtualBox ist pingelig, wo es nach einer Boot-Datei sucht. Die Standardeinstellung reicht nicht aus.

Umbenennen grubx64.efiinbootx64.efi

/boot/EFI/BOOT/bootx64.efi


Anmerkungen

  • tipp: besorg dir artikel 2
  • Dies ist für Macbooks bei der Installation von Arch Linux super nützlich, da die Standard-ISO die WLAN-Kartentreiber nicht lädt.
Ich bekomme immer noch VERR_NOT_SUPPORTEDund VERR_ACCESS_DENIEDwenn ich dies tue, auch wenn die Festplattenberechtigungen auf eingestellt sind 777und VirtualBox als root.
@BeanstheWizard Darf ich vorschlagen, dass Sie überprüfen, ob Ihre Festplatte tatsächlich nicht gemountet ist? Es könnte sich lohnen, /etc/fstabMounts zu blockieren.
Ich bin mir sicher; würde es nicht sowieso einen anderen Fehler geben?
Das könnte man erwarten. Nein, die Fehlerrückmeldung ist Müll. Deshalb verursacht es Kopfschmerzen. Und deshalb habe ich diese Antwort gepostet.
Das Aktivieren von "Use Host I/O Cache" hat es aus irgendeinem Grund behoben.
@BeanstheWizard Interessant. Schön, dass du es herausgefunden hast. Ich frage mich, was nicht durch IO gespült wurde.

Ich habe ein kleines Skript zum Korrigieren der Berechtigung erstellt, das ein neues Rohbild mit der richtigen UUID erstellt:

#!/bin/bash

UUID="BDA52A9B-E398-4245-AF6B-6C274F54D4BD"
VBOXFILE=Linux.vmdk

DEVICE_IDENTIFIERIDENTIFIER=$(diskutil info $UUID | grep "Device Identifier:" - | grep -o "disk." - )
DISK="/dev/$DEVICE_IDENTIFIERIDENTIFIER"

echo "mit $DISK"

if test -f "$VBOXFILE"; Dann
    rm $VBOXFILE
fi

sudo chown $USER $DISK
sudo VBoxManage internalcommands createrawvmdk -filename $VBOXFILE -rawdisk $DISK
sudo chown $USER $VBOXFILE

VBoxManage internalcommands sethduuid Linux.vmdk "$UUID"

Ich habe mehr oder weniger das getan, was Sie wollen: als Linux-Boot im Raw-Modus auf die Festplatte zugreifen.

mac2011% diskutil list

Identifizieren Sie die Festplatte, auf die Sie mit VirtualBox zugreifen möchten. Hier ist es /dev/disk1, das zwei Partitionen enthält /dev/disk1s1 /dev/disk1s2(eine Windows und eine Linux).

Abmelden:

mac2011% diskutil unmountDisk /dev/disk1 

Berechtigungen ändern:

mac2011% sudo chown myself /dev/disk1*

Rohdatenträger der virtuellen Maschine erstellen:

mac2011% VBoxManage internalcommands createrawvmdk -filename /Users/myself/VirtualBox\ VMs/link.vmdk -rawdisk /dev/disk

Öffnen Sie VirtualBox:

mac2011% open -a VirtualBox

Erstellen Sie eine virtuelle Maschine mit "einer vorhandenen virtuellen Festplattendatei", wählen Sie tatsächlich die gerade erstellte aus. Klicken Sie auf Hinzufügen... Erstellen...

Oft kommt ein Fehler "could not open the medium VERR_RESOURCE_BUSY", weil der Mac automatisch neu gemountet wurde (überprüfen Sie den Desktop), also unmounten und erneut versuchen (Shell History verwenden oder ein Skript schreiben oder -- und woanders nachsehen, wie man es füllt) sudo vifs /etc/fstab.

Die virtuelle Maschine wird [Running] angezeigt, also hat sie wahrscheinlich auf die Festplatte zugegriffen. (Der Bootvorgang hängt sich jedoch auf, aber das ist eine andere Frage.)

Hoffentlich können Sie dieses Rezept an Ihre Bedürfnisse anpassen.