Desde que hice mis primeras pruebas con Hyper-V pensé que podría ser una buena plataforma para poder disponer de mi máquina virtualizada y conseguir, al fin, cierta independencia del hardware que ejecuta nuestra máquina. Al final lo que nos importa es poder tener nuestro sistema operativo en marcha con todos nuestros datos y aplicaciones necesarias para nuestro día a día.

Tras comprobar que era viable migrar mi máquina física a virtual y conseguir ponerla en marcha bajo Hyper-V llega el momento de pensar en ir un poco más allá. Pensé que tener un stick usb o un disco externo usb con un Windows Server 2008 con Hyper-V podría serme muy útil para poder arrancar mi equipo en otra máquina diferente rápidamente. Desgraciadamente no es posible instalar Windows Server 2008 directamente sobre USB (y hay buenas razones para ello) por lo que hubo que cacharrear un poco para conseguirlo J

De forma resumida los pasos que se llevaron a cabo fueron los siguientes:

  • Instalar Windows Server 2008 64 bits sobre una máquina virtual Hyper-V cuyo disco duro es el dispositivo USB externo.
  • Modificar el sistema operativo para que cargue los drivers USB durante las primeras fases del arranque del SO.
  • Arrancar con el disco duro que usamos con la Hyper-V la máquina física
  • Instalar Hyper-V
  • Reiniciar y testear que podemos arrancar máquinas Hyper-V

A continuación detallo los pasos seguidos durante todo el proceso que como veréis no es un camino de rosas precisamente.

  1. Instalar Windows Server 2008 sobre una máquina virtual Hyper-V cuyo disco duro es el dispositivo USB externo.

     

    Creamos la máquina virtual sin añadirle ningún disco duro:

     

El siguiente paso es poner un disco duro externo usb offline desde al administrador de discos.

Debemos tener en cuenta que esto no es posible directamente si utilizamos un medio extraible (como un disco flash USB). La alternativa es o bien utilizar un disco duro externo USB que no suelen presentarse como extraibles ante el sistema operativo o bien utilizar un driver microfilter de Hitachi, o utilizar una herramienta especializada de formateo que nos marque como no extraible la unidad USB.

En mi caso he hecho la instalación inicial y testing sobre un disco duro externo y luego lo he volcado a un disco flash USB haciendo un clonado de la partición del disco duro USB sobre el disco flash USB.

Añadimos el disco que tenemos offline a la máquina virtual:

Iniciamos la máquina virtual e instalamos Windows server 2008 64 bits pacientemente sobre ésta. Esto lo podemos hacer bien desde el DVD de instalación o bien capturando la ISO correspondiente en la unidad DVD de la máquina virtual. No modificaremos el idioma por defecto durante la instalación (inglés) y formatearemos a NTFS la unidad si es necesario durante la instalación.

 

  1. Modificar el sistema operativo para que cargue los drivers USB durante las primeras fases del arranque del SO.

     

    Una vez finalizada la instalación, deberemos realizar algunas modificaciones para asegurarnos que el driver USB esté cargado desde las primeras fases del inicio del sistema. En caso contrario nos encontraremos con una hermosa pantalla azul al iniciar. Para realizar estos cambios utilizaremos el editor de registro de windows regedit.

    Los servicios a modificar su arranque son usbccgp,usbehci,usbhub,usbstor y usbuhci que se encuentran en «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices»

    Debemos modificar el valor de Start a 0 y el valor de Group a «boot bus extender»

     

     

    Para evitar hacer esto manualmente para los 5 servicios podemos aplicar directamente el siguiente fichero de modificación del registro de Windows (usb.reg.zipped es un renombrado de usb.reg.zip): usb.reg.zipped 

    Debemos copiar el fichero USBSTOR.SYS de «C:WindowsSystem32DriverStoreFileRepositoryusbstor.inf_1ee7bdfe» a «C:windowssystem32drivers»

    Localizaremos los ficheros usb.inf, usbport.inf y usbstor.inf en «c:windowsinf»:

     

    Modificaremos en cada uno de ellos la(s) sección(es) [LoQueSea.AddService]. Por ejemplo para USBSTOR.inf modificaremos únicamente la sección [USBSTOR.AddService]. Los cambios a realizar serán cambiar el StartType a 0 y añadir una entrada con «LoadOrderGroup = boot bus extender». La siguiente imagen muestra el cambio aplicado al primero de los ficheros, repetiremos para los otros dos. Recordar que hay que aplicar para TODAS las secciones que acaben en «.AddService»

    Incluyo los 3 ficheros modificados sobre un WS2008 Enterprise RTM.

    usbstor.inf usb.inf usbport.inf

    Es recomendable desactivar el reinicio ante BSOD para poder ver que driver nos está dando problemas en el caso de problemas al arrancar.

     

  2. Arrancar con el disco duro que usamos con la Hyper-V la máquina física

     

    Si todo ha ido bien, podremos arrancar la máquina virtual como física. Por tanto apagaremos Hyper-V y reiniciaremos nuestra máquina. Asegurémonos de disponer activa la opción de USB boot en nuestra BIOS de forma que nuestro PC pueda arrancar desde nuestro disco externo. Al reiniciar la máquina detectará el hardware físico, no el de hyper-v, por lo que posiblemente requiera de varios reinicios hasta que contenga todos los drivers necesarios para nuestra máquina física. También para mejorar la portabilidad podríamos ejecutar «sysprep» (que viene incluido en WS2008) desde la Hyper-V para dejar la máquina preparada para facilitar su duplicación y arranque en otros entornos hardware. Cuanto mayor similitud entre el hardware sobre el que se hizo la instalación y el que intentamos arrancar más sencillo será todo.

     

    Si las cosas no van bien al arrancar como máquina física al final del artículo tienes más información sobre problemas típicos que pueden ocurrir (de hecho me ocurrieron a mí J) y cómo solucionarlos. También incluyo al final cómo configurar un script que cuando apaguemos la máquina nos vuelva a aplicar los cambios del registro cada vez para mayor comodidad.

     

  3. Instalar Hyper-V

     

    Una vez solventadas las potenciales dificultades y con nuestro Windows Server 2008 en marcha desde nuestro disco externo procederemos a instalar el rol Hyper-V.

     

  4. Reiniciar y testear que podemos arrancar máquinas Hyper-V

     

    Cuando finalice la instalación necesitaremos reiniciar de nuevo para poder hacer uso de Hyper-V. Una vez en marcha de nuevo, ya podemos configurar y poner en marcha máquinas virtuales Hyper-V.

     

Si las cosas no han ido bien….

Desgraciadamente muchas cosas pueden ocurrir que ocasionen que la máquina no vuelva a iniciar. Tenemos que tener en cuenta que actualizaciones de Windows pueden modificar los valores de los servicios del registro o los propios ficheros .inf por lo que debemos echarles un repaso cada vez que instalemos alguna actualización. También podemos sufrir graves problemas si tenemos reinicios del bus USB. Un reinicio del bus USB no es algo demasiado problemático cuando no tenemos el propio sistema operativo sobre dicho bus. Por ello recomiendo evitar utilizar HUBs externos y/o dispositivos que puedan generar problemas de desconexiones mientras tenemos nuestro sistema operativo sobre USB.

En mi caso particular tuve problemas para arrancar pues los drivers USB de Intel de mi portátil machacaron los cambios en el registro de los servicios usbehci y usbuhci. Para solucionar esto o bien reiniciamos con la máquina Hyper-V con la que hicimos la instalación de nuevo y editamos el registro (o lanzamos el .REG de nuevo), o bien utilizamos otra instalación de Windows, ejecutamos regedit y cargamos el Hive de la otra instalación para editarla. Las instrucciones genéricas para editar el registro de forma offline son las siguientes: (extraídas de un KB de Microsoft, el 811408):

  1. Realice una instalación paralela de Windows. Para obtener información adicional acerca de cómo hacerlo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

    316941  (http://support.microsoft.com/kb/316941/ ) Cómo instalar Windows XP o actualizarse al programa

  2. Ejecute Regedit.exe desde la nueva instalación de Windows y haga clic en la clave HKEY_LOCAL_MACHINE.
  3. En el menú Archivo, haga clic en Cargar subárbol.
  4. Abra la carpeta %SystemRoot%System32Config de la instalación original de Windows, haga clic en el archivo System y, después, haga clic en Abrir.
  5. En el cuadro Cargar subárbol, escriba prueba y haga clic en Aceptar. El subárbol System de la instalación original de Windows se carga como una subclave de la clave HKEY_LOCAL_MACHINE actual del Registro como «prueba».
  6. Siga los pasos 10 a 17 de la sección «Método 1: edite el Registro y utilice un subárbol System del Registro de copia de seguridad» de este artículo para editar la subclave prueba del Registro.
  7. Descargue la subclave prueba del Registro:
    1. Haga clic en prueba y, a continuación, haga clic en Descargar subárbol en el menú Archivo.
    2. Haga clic en Sí para confirmar la descarga.
  8. Cierre el Editor del Registro y reinicie el equipo en la instalación original de Windows.

Para conseguir que el fichero «usb.reg» se aplique cada vez que apaguemos la máquina lo podemos hacer añadiendo un script de shutdown en las políticas de la máquina. Para ello abriremos la consola administrativa de las políticas de la máquina.

En la sección «Windows Settings» abriremos las propiedades de los scripts «Shutdown» y añadiremos un nuevo script llamado «usb.bat».

El contenido del fichero batch será simplemente una linea que nos fuerce a importar de nuevo el fichero «usb.reg» Crearemos el fichero y lo almacenaremos en la ruta indicada.

Con esto evitaremos tener que estar pendientes de estos cambios en el registro que pueden dejarnos nuestra instalación sin posibilidad de arrancar con cierta facilidad 🙂

 

Rubén Garrigós