Este artículo explica cómo utilizar la interfaz de gestión de línea de comandos de VirtualBox, VBoxManage
, para agregar un disco SATA a una máquina virtual.
Hasta el momento no es posible en VirtualBox agregar un disco a una máquina virtual en caliente (en ejecución). Al igual que con QEMU/KVM es necesario apagar la máquina virtual antes de poder agregar un nuevo disco.
Como mencioné en otras oportunidades, la interfaz de gestión de línea de comandos VBoxManage
provee mayor funcionalidad que la aplicación GUI (como sucede en general con toda herramienta de línea de comandos). Es posible agregar un disco a una máquina virtual desde la herramienta GUI, pero veamos cómo hacerlo completamente desde línea de comandos (útil para aquellos casos en los que necesitamos gestionar un servidor de máquinas virtuales headless).
En este caso voy a trabajar sobre un host *BSD, aunque los comandos son exactamente idénticos para sistemas GNU/Linux o incluso Windows. Es posible obtener ayuda acerca de todos los subcomandos disponibles ejecutando:
VBoxManage --help
El primer paso consiste en crear un disco, para ello recurrir al subcomando createmedium
:
emi@hal9000:~ % VBoxManage createmedium Usage: VBoxManage createmedium [disk|dvd|floppy] --filename <filename> [--size <megabytes>|--sizebyte <bytes>] [--diffparent <uuid>|<filename> [--format VDI|VMDK|VHD] (default: VDI) [--variant Standard,Fixed,Split2G,Stream,ESX]
Para crear un disco, especificar el tipo "disk", la ruta al nombre de archivo, el tamaño (en megabytes) y el formato. El formato puede ser DVI (VirtualBox), VMDK (compatible con VMware) o VHD (compatible con Microsoft Hyper-V).
emi@hal9000:~ % VBoxManage createmedium disk --filename /data/VM/Devuan_Jessie_amd64_2.vdi --size 1024 --format VDI 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: f8f26e7a-a649-4ece-a7f8-ecd193cf0f60
Luego es necesario conocer el nombre de la máquina virtual a la que deseamos agregar el disco. Es posible listar las máquinas virtuales disponibles utilizando el subcomando list vms
:
emi@hal9000:~ % VBoxManage list vms "alpine" {6c5c2365-e9e6-4ae9-b225-c44f93ca1ce9} "Devuan_LXDE" {72b2535f-f6ae-49fa-a839-1bec32a7297b} "Devuan_Jessie_amd64" {ba6726eb-4b7a-40b9-81a8-134d303d0f12} "w7" {7be4fce6-7fe3-4405-a0cc-7565afa19bd5}
En este caso deseo agregar un disco a la máquina virtual "Devuan_Jessie_amd64".
Para conectar el nuevo disco a la máquina en cuestión se debe recurrir a storageattach
:
emi@hal9000:~ % VBoxManage storageattach Usage: VBoxManage storageattach <uuid|vmname> --storagectl <name> [--port <number>] [--device <number>] [--type dvddrive|hdd|fdd] [--medium none|emptydrive|additions| <uuid|filename>|host:<drive>|iscsi] [--mtype normal|writethrough|immutable|shareable| readonly|multiattach] [--comment <text>] [--setuuid <uuid>] [--setparentuuid <uuid>] [--passthrough on|off] [--tempeject on|off] [--nonrotational on|off] [--discard on|off] [--hotpluggable on|off] [--bandwidthgroup <name>] [--forceunmount] [--server <name>|<ip>] [--target <target>] [--tport <port>] [--lun <lun>] [--encodedlun <lun>] [--username <username>] [--password <password>] [--initiator <initiator>] [--intnet]
Se observa que el disco se debe conectar a un controlador (al igual que en una máquina física). Veamos qué controladores tiene esta máquina virtual:
emi@hal9000:~ % VBoxManage showvminfo "Devuan_Jessie_amd64" | grep -i storage Storage Controller Name (0): IDE Storage Controller Type (0): PIIX4 Storage Controller Instance Number (0): 0 Storage Controller Max Port Count (0): 2 Storage Controller Port Count (0): 2 Storage Controller Bootable (0): on Storage Controller Name (1): SATA Storage Controller Type (1): IntelAhci Storage Controller Instance Number (1): 0 Storage Controller Max Port Count (1): 30 Storage Controller Port Count (1): 1 Storage Controller Bootable (1): on
Esta máquina posee dos controladores: uno IDE (0), que cuenta con 2 puertos; y otro SATA (1) que cuenta con 1 puerto.
Al mismo tiempo se observa que el único puerto del controlador SATA está ocupado:
emi@hal9000:~ % VBoxManage showvminfo "Devuan_Jessie_amd64" | grep SATA Storage Controller Name (1): SATA SATA (0, 0): /data/VM/Devuan_Jessie_amd64.vdi (UUID: 4164756e-1f73-4d10-9c54-91c2597c450d)
Entonces, para poder conectar un nuevo disco, es necesario agregar un nuevo puerto al controlador SATA. Cabe destacar que la cantidad de dispositivos por puerto es siempre 1, por lo que le número de dispositivo es un parámetro opcional que siempre debe valer 0.
Cambiar la cantidad de puertos del controlador SATA de 1 a 2 ejecutando:
emi@hal9000:~ % VBoxManage storagectl "Devuan_Jessie_amd64" --name SATA --portcount 2
Los puertos se numeran a partir del 0. Por ente el segundo puerto será el número 1.
Para agregar el nuevo disco al puerto 1 del controlador SATA, simplemente ejecutar:
emi@hal9000:~ % VBoxManage storageattach "Devuan_Jessie_amd64" --storagectl SATA --port 1 --device 0 --type hdd --medium /data/VM/Devuan_Jessie_amd64_2.vdi --hotpluggable on
El disco se ha agregado con éxito:
emi@hal9000:~ % VBoxManage showvminfo "Devuan_Jessie_amd64" | grep SATA Storage Controller Name (1): SATA SATA (0, 0): /data/VM/Devuan_Jessie_amd64.vdi (UUID: 4164756e-1f73-4d10-9c54-91c2597c450d) SATA (1, 0): /data/VM/Devuan_Jessie_amd64_2.vdi (UUID: f8f26e7a-a649-4ece-a7f8-ecd193cf0f60)
Notar que los valores entre paréntesis luego del nombre de controlador (SATA) identifican el número de puerto y número de dispositivo respectivamente.
En este punto es posible iniciar la máquina virtual y continuar con el particionado del nuevo disco y formato de los sistemas de archivos necesarios.