Header Ads

VMs FATAL: No bootable medium found! System halted

Si manejamos máquinas virtuales, en un momento determinado es muy probable que queramos redimensionar los discos virtuales (se llenó el disco duro). En el post Redimensionar discos duros VMs, explicamos cómo hacerlo. Tanto para Linux, como para Windows es igual (En linux puede ejecutarlo como "VBoxManage" o "vboxmanage"):
C:\Archivos de programa\Oracle\VirtualBox>VBoxManage.exe modifyhd /path/disco.vdi --resize cantidad_de_mb
o
VBoxManage modifyhd /path/disco.vdi --resize cantidad_de_mb
Ejemplo: (Modificando VM de Win10 en Ubuntu 16.04x a 100 GB)
VBoxManage modifyhd "10.vdi" --resize 100000
El problema
Las nuevas versiones de Virtualbox 4x (y actualmente 5x), comenzaron a presentar problemas al ejecutar este comando para redimencionar un disco VDI y eventualmente se corrompe su partición, quedando irreconocible, a pesar de indicar que la operación fue exitosa.
Y al arrancar la VM, sale el mensaje:
FATAL: No bootable medium found! System halted
Nota: Este mensaje de error "FATAL: No bootable medium found! System halted" también se presenta cuando el disco duro virtual está vacío o no hay un medio (DVD/CD/HDD) conectado a VirtualBox, pero en este post solamente abordaremos el caso del error después de un redimensionado de disco virtual con el comando "VBoxManage modifyhd (resize)".
¿Por qué ocurre esto?
En el foro de VirtualBox responden que es "culpa del usuario". Si bien esto es cierto, ya que antes de hacer cualquier operación sobre un disco virtual o físico siempre hay que hacer SÍ o SÍ backup de todos los datos, lo que sucede, como bien cita un usuario de superuser, es que la documentación VBoxManager es bastante engañosa y a nuestro juicio es una receta para el desastre.
¿Cómo se debe ejecutar correctamente el redimensionado de particiones?
Este comando se recomienda ejecutarlo siempre y cuando el disco virtual y los demás archivos asociados al mismo estén  EN EL MISMO DIRECTORIO, tal y como se muestra en la siguiente imagen de una VM de Windows 10.
Si se ejecuta el comando y el VDI y sus archivos asociados (Logs, Snapshots, 10.vbox, 10.vbox-prev), están en ubicaciones diferentes, existe un alto porcentaje de probabilidades de que se corrompa el disco después de ejecutado el comando. Esto es porque Virtualbox actualizaría el disco VDI pero sus archivos asociados no interpretarían correctamente la redimensión.
Sin embargo este problema también se puede presentar en otros tipos de escenarios. A continuación algunos casos donde si ejecuta este comando es altamente probable que genere este error y corrompa la partición de su disco y la recomendación para evitarlo:
1. No se recomienda ejecutar el comando VBoxManage modifyhd (resize) en sistemas Windows 9x, NT5, Server y x86.
2. No debe redimensionar un disco para reducir su partición (solo para aumentarla), o sea este proceso es de una sola vía.
3. Si no conoce o no está seguro del tamaño real del disco virtual con el que fue creado (no la capacidad interna que muestra el disco sino el tamaño asignado durante la creación) no intente redimensionarlo.
4. El redimensionado solo funciona en particiones dinámicas (no fijas o "fixed")
A estas alturas ya se habrá dado cuenta que el comando "VBoxManage modifyhd (resize)" no es muy confiable. De hecho no recomendamos su uso, y a nuestro juicio es mucho mejor  clonar que redimensionar y la solución es  VBoxManage clonehd.
Pasos para redimensionar un Disco Virtual VDI usando clonehd
1. Crear un nuevo disco virtual con tamaño deseado. La opción "size" debe incluir el tamaño el cual debe ser mayor al disco anterior (old.vdi). Por defecto crea archivos VDI. Las comillas son opcionales; se recomiendan si hay espacios en el path.
VBoxManage createhd --filename "/path/New.vdi" --size 100000
2. Clonar el disco antiguo en el disco recién creado. Es importante que antes de ejecutar el siguiente comando el disco antiguo esté apagado. La clonación no se puede realizar en caliente:
VBoxManage clonehd "/path/Old.vdi" "/path/New.vdi" --existing
Si va a usar la interfaz gráfica de Virtualbox para clonar, ambos discos NO deben estar en la misma ruta (path)
3. Desconecte el disco antiguo a través de la configuración de almacenamiento en VirtualBox, conecte el nuevo disco e inícielo.
4. Si es Windows, ir a Administración de equipos y Ampliar el espacio en disco. Si no quiere hacerlo manualmente puede usar aplicativos como  AOMEI Partition Assistant Standard, GParted, o cualquier otro.
Otra ventaja de clonehd es que permite convertir un disco con tamaño fijo (fixed disk) en dinámico (tamaño variable) usando la opción "variant" durante el clonado:
VBoxManage clonehd "/path/Old.vdi" "/path/New.vdi" --variant Standard
VBoxManage clonehd "/path/Old.vdi" "/path/New.vdi" --variant Fixed
Y también permite especificar el formato al disco, con la opción --format VDI|VMDK|VHD donde VHD es Hyper-V generation 1 format y VHDX es Hyper-V generation 2 format:
VboxManage clonehd "/path/Old.vdi" "/path/New.vdi" --format VDI
O puede echar mano del comando convertdd para cambiarle el formato al disco
VBoxManage convertdd "/path/Old.vdi" "/path/New.vmdk"
Y si no le gusta trabajar por terminal, puede usar las herramientas  CloneVDI (clonar discos) y  Disk2vhd (convertir discos)
Otras opciones de clonehd, createhd y convertdd:
VBoxManage clonemedium      [disk|dvd|floppy] < uuid|inputfile > < uuid|outputfile >
                            [--format VDI|VMDK|VHD|RAW|< other >]
                            [--variant Standard,Fixed,Split2G,Stream,ESX]
                            [--existing]

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]

VBoxManage convertfromraw   < filename > < outputfile >
                            [--format VDI|VMDK|VHD]
                            [--variant Standard,Fixed,Split2G,Stream,ESX]
                            [--uuid < uuid >]
VBoxManage convertfromraw   stdin < outputfile > < bytes >
                            [--format VDI|VMDK|VHD]
                            [--variant Standard,Fixed,Split2G,Stream,ESX]
                            [--uuid < uuid >]
Y sin importar qué comando utilice, no olvide hacer copia de seguridad "antes de" realizar un redimensionado de disco.

Con la tecnología de Blogger.