¿Cómo acceder al dispositivo sin formato con VirtualBox?

Así que estoy tratando de configurar el acceso al dispositivo sin procesar con VirtualBox para usar un disco ext4/linux como sistema operativo invitado dentro de Mac OS X, pero aún no lo he logrado.

Siguiendo los documentos de VirtualBox, Capítulo 9.9.1.1, https://www.virtualbox.org/manual/ch09.html#rawdisk , ¿Mac OS X permitirá el acceso al disco sin formato para las VM? ¿Cómo configuro esto?

Cosas hechas hasta ahora: (no intentes esto en casa)

Creó un archivo vmdk sin procesar:

$ 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.

hazme el dueño:

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

ver si VirtualBox puede ver algo en el archivo Xub_raw_disk.vmdk:

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

Como no aparece nada aquí para sectores o particiones, esto debe ser un síntoma del problema...

El problema es que cuando intento agregar el archivo .vmdk desde la GUI o con el siguiente comando, aparece un error:

$ 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"

ACTUALIZACIÓN: Aquí, disk0 es la unidad Linux dedicada. disk1 (no utilizado) es para Mac OS X. Haciéndome propietario de /dev/disk0 y /dev/disk0s2 con

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

según Froggard howto lo hizo para poder agregar la imagen a una máquina virtual. Además, /dev/disk0ahora se puede leer desde VBoxManage:

$ 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

Ahora, cuando inicio el sistema operativo invitado de Linux, recibo el FATAL: No bootable medium found! System halted.mensaje. ¿Alguna idea de lo que está mal?

¿Comprobó si el puerto SATA 0 ya está en uso en su VM? ¿O ya intentó seleccionar un controlador diferente como el controlador IDE?
Si OS X se está ejecutando en su disco interno 0, entonces no puede obtener acceso a todo el disco 0. Sin embargo, puede obtener acceso a la partición que contiene el sistema de archivos con formato ext4. Siga los pasos del 6 al 12 dados en la respuesta de Froggard . Lo hace para una partición formateada de Windows. Simplemente sustituya su partición de Linux.
¿Qué sistema operativo está ejecutando en la máquina física? ¿En qué partición física está instalada esta máquina? ¿Qué sistema operativo ejecutará en la máquina virtual? ¿Se instalará la máquina virtual en una partición virtual o física? Si es físico, ¿cuál?

Respuestas (3)

Tenía la necesidad de hacer esto hoy y vi su pregunta, así que aquí hay un protocolo de los pasos que tomé.

Encuentre el número de dispositivo

diskutil listpor ejemplo, 2, como en /dev/disk2 Asumiendo 2para el resto de las instrucciones.

Crear la máquina virtual VMDK

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

Expulse el dispositivo antes de este paso, de lo contrario obtendrá un error: VERR_RESOURCE_BUSY. Es posible que desee agregar una entrada fstabcon los parámetros agregados noautopara evitar que el sistema operativo vuelva a montar la unidad.

Lo uso rdisk-disk2.vmdkpara el nombre, porque esta máquina virtual es solo un puntero a este dispositivo. Después de reiniciar, la situación podría cambiar, por ejemplo, a un dispositivo se le podría asignar un número diferente, especialmente si desconecta las cosas y las mueve.

Inicie Virtual Box Manager con privilegios de raíz

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

Debido a que todos los dispositivos son propiedad de root, debe iniciar VirtualBox con privilegios de root. Esto tiene consecuencias. Su contexto de inicio (carpeta de inicio y preferencias) se cambiará a raíz. Sus otras máquinas virtuales no serán visibles. Si abre un explorador de archivos, verá la carpeta de inicio de la raíz de forma predeterminada.

Otra opción es cambiar los permisos del dispositivo (no recomendado) como has hecho.

Para confirmar los permisos de los dispositivos, puede ejecutarls -l /dev/disk*

  1. Agregue una nueva máquina, proporcione el nombre: /dev/disk2, escriba: linux, versión: arch linux (64 bits)
  2. Dale un poco de memoria (lo que puedas)
  3. Seleccione la unidad existente usando el VMDK creado anteriormente. ( IMPORTANTE , asegúrese de que la unidad no se haya vuelto a montar, de lo contrario obtendrá VERR_RESOURCE_BUSY, NS_ERROR_FAILURE)

Instalar un sistema nuevo

Agregue un archivo de disco óptico (por ejemplo, un ISO de Linux de arranque de su agrado) y active el Live CD/DVD opcional para que arranque desde él.

Hacer que el sistema sea arrancable en VirtualBox

Esto no es tan obvio, especialmente si usa una configuración EFI. Si usa grub-mkconfig, el nombre del archivo efi es grubx64.efi (suponiendo 64 bits). VirtualBox es quisquilloso con respecto a dónde busca un archivo de arranque. El valor predeterminado no funcionará.

Renombrar grubx64.efiabootx64.efi

/boot/EFI/BOOT/bootx64.efi


notas

  • consejo: consíguete iterm 2
  • Esto es muy útil para Macbooks al instalar Arch Linux, porque el ISO predeterminado no carga los controladores de la tarjeta wlan.
Todavía obtengo VERR_NOT_SUPPORTEDy VERR_ACCESS_DENIEDcuando hago esto, incluso con los permisos de disco configurados 777y con VirtualBox ejecutándose como root.
@BeanstheWizard ¿Puedo sugerirle que verifique que su disco no esté montado? Podría valer la pena configurar /etc/fstabpara bloquear montajes.
Estoy seguro; ¿No daría un error diferente de todos modos?
Uno podría esperar eso. No, los comentarios de error son basura. Por eso induce dolores de cabeza. Y es por eso que publiqué esta respuesta.
Habilitar "Usar host I/O Cache" lo arregló, por alguna razón.
@BeanstheWizard Interesante. Me alegro de que lo hayas descubierto. Me pregunto qué no se enjuagó a través de IO.

Hice un pequeño script para corregir el permiso y eso crea una nueva imagen sin procesar con el UUID correcto:

#!/bin/bash

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

DEVICE_IDENTIFIERIDENTIFIER=$(diskutil info $UUID | grep "Identificador de dispositivo:" - | grep -o "disco". - )
DISK="/dev/$DISPOSITIVO_IDENTIFICADORIDENTIFICADOR"

echo "usando $DISCO"

si prueba -f "$VBOXFILE"; entonces
    rm $VBOXFILE
fi

sudo chown $USUARIO $DISCO
sudo VBoxManage comandos internos createrawvmdk -filename $VBOXFILE -rawdisk $DISK
sudo chown $USUARIO $VBOXFILE

VBoxAdministrar comandos internos sethduuid Linux.vmdk "$UUID"

Hice más o menos lo que quieres: acceder al disco en modo raw como arranque de Linux.

mac2011% diskutil list

Identifique el disco para acceder con VirtualBox. Aquí está /dev/disk1, que contiene dos particiones /dev/disk1s1 /dev/disk1s2(una de Windows y otra de Linux).

Desmontar:

mac2011% diskutil unmountDisk /dev/disk1 

Cambiar permisos:

mac2011% sudo chown myself /dev/disk1*

Crear disco de máquina virtual sin procesar:

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

Abrir VirtualBox:

mac2011% open -a VirtualBox

Cree una máquina virtual usando "un archivo de disco duro virtual existente", en realidad elija el que acaba de crear. Haga clic en Agregar... Crear...

A menudo ocurre un error "no se pudo abrir el medio VERR_RESOURCE_BUSY", porque la Mac se volvió a montar automáticamente (verifique el escritorio), así que desmonte e intente nuevamente (use el historial de shell o escriba un script o -- y busque en otra parte cómo llenarlo) sudo vifs /etc/fstab.

La máquina virtual se muestra [En ejecución], por lo que probablemente haya accedido al disco. (Sin embargo, el proceso de arranque se bloquea, pero esta es otra pregunta).

Espero que puedas adaptar esta receta a tus necesidades.