Iniciando una máquina virtual con Libvirt/KVM desde CDROM

Introducción

En algunos casos es necesario iniciar una máquina virtual ya instalada desde el CDROM o en su defecto, una imagen ISO.  Por ejemplo cuando se deben realizar labores de administración o recuperación que requieran acceder al disco duro de la máquina virtual desmontado.

A continuación se muestra el procedimiento necesario para reconfigurar la máquina virtual para que monte una imagen ISO como su CDROM virtual e inicie el sistema operativo desde ella.

Procedimiento

Acceder a la consola de administración de las máquinas virtuales.

$ virsh --connect qemu:///system

Modificar la configuración de la máquina virtual (SL_57_x64_Generic en este caso) en dos partes.

virsh # edit SL_57_x64_Generic

Bajo domain/os agregue un nuevo registro boot para el cdrom.

 <boot dev='cdrom'/>

Identificar la configuración del CDROM bajo domain/devices/disk.  En mi caso se ve de la siguiente manera.

<disk type='block' device='cdrom'>
    <driver name='qemu' type='raw'/>
    <target dev='hdc' bus='ide'/>
    <readonly/>
    <address type='drive' controller='0' bus='1' unit='0'/>
</disk>

Modificar la configuración del CDROM para que se asocie con la imagen ISO deseada especificándole el valor de su respectivo source.

<source file='/b1/ISO/data_disk1.iso'/>

Una vez terminadas las labores de administración es necesario regresar la configuración a la original para evitar que la máquina continúe iniciándose desde el CDROM indefinidamente.

Modificar el contenido del CDROM (cambiar disco)

Otra tarea frecuente con respecto al manejo de medios en las máquinas virtuales será la manipulación del contenido de la unidad de CDROM.  Esto es necesario al realizar la instalación del sistema operativo o acceder información de diferentes medios/imágenes ISO.  Para hacer esto desde la linea de comando es necesario ejecutar el siguiente comando.

$ virsh attach-disk --type cdrom --mode readonly SL_57_x64_Generic /b1/ISO/data_disk2.iso hdc

Clonar la unidad LiveUSB de Scientific Linux y CentOS 6.x

Introducción.

Una vez creada la LiveUSB de CentOS o SL puede ser ejecutada directamente en cualquier computador que pueda iniciar (boot) el sistema operativo desde dicha unidad USB.

Al estar ejecutándose en vivo (live), las modificaciones realizadas sobre los sitemas de archivos raíz y /home serán persistentes yt sus tamaños corresponderán a los especificados durante la creación de la unidad.

Después de personalizado su contenido se procede al proceso de clonación descrito a continuación.

Clonar la unidad LiveUSB.

Crear la imagen de la LiveUSB.

El procedimiento es muy simple.  El primer paso consiste en utilizar el comando dd para crear una imagen bit a bit de la unidad LiveUSB.  En este caso se supone que la unidad corresponde con el dispositivo /dev/sdb, reemplace este valor de acuerdo a su propio contexto.

La ejecución del siguiente comando crea el archivo centos6-livesusb.img el cual corresponderá con el contenido de la unidad representada por el dispositivo /dev/sdb.

# dd if=/dev/sdb of=centos6-livesusb.img bs=4M

7888896+0 records in
7888896+0 records out
4039114752 bytes (4.0 GB) copied, 2180.88 s, 1.9 MB/s

Verifique los valores mostrados en los parámetros in y out correspondan, de lo contrario la imagen no habrá sido exitosamente creada.

# ls -l centos6-livesusb.img

-rwxrwxrwx. 1 root root 4039114752 Aug 21 18:16 centos6-livesusb.img

# file centos6-livesusb.img 

centos6-livesusb.img: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 7884801 sectors, code offset 0xb8

Restaurar la imagen de la LiveUSB.

Después de creada la imagen de la unidad LiveUSB esta puede replicarse cuantas veces se desee en otras unidades USB.  Para hacer esto se realiza el procedimiento contrario utilizando también dd.

# dd if=centos6-livesusb.img of=/dev/sdb bs=4M

Crear una LiveUSB con persistencia utilizando Scientific Linux y CentOS 6.x

Introducción.

En el presente artículo se expondrá el procedimiento necesario para crear una LiveUSB con CentOS 6 mediante el uso de la herramienta livecd-iso-to-disk.

A diferencia de otros procedimientos para la creación de LiveUSB que he explorado hasta ahora, este permite establecer un espacio para la persistencia de los datos (overlay), tanto para la partición raíz donde se almacenará el sistema operativo como para la partición /home donde se almacenarán los archivos del usuario.  Para esto se crean dos archivos: LiveOS/squashfs.img (Squashfs) para el directorio raíz y LiveOS/home.img (ext4) para el sistema de archivos de los usuarios.

Este procedimiento se realizó utilizando una máquina que ejecutaba también GNU/Linux CentOS 6.

Obtener la distribución Livede GNU/Linux Scientific Linux o CentOS.

Descargar la versión deseada del LiveCD o LiveDVD de Scientific Linux desde la siguiente ubicación.

http://ftp.scientificlinux.org/linux/scientific/

Si se desea utilizar CentOS, descargar la imagen ISO correspondiente desde la siguiente ubicación.

http://mirror.centos.org/centos/6/isos/

En este caso se utilizará la versión LiveCD de CentOS 6 con 32 bits.

# wget  http://mirror.nuvio.com/pub/centos/6.0/isos/i386/CentOS-6.0-i386-LiveCD.iso

Obtener las herramientas necesarias.

Descargar la versión mas reciente de livecd-iso-to-disk.

# wget “http://git.fedorahosted.org/git/?p=livecd;a=blob_plain;f=tools/livecd-iso-to-disk.sh;hb=HEAD” -O livecd-iso-to-disk.sh

# chmod +x livecd-iso-to-disk.sh

Limpiar el MBR de la unidad USB.

Insertar la unidad USB y determinar el dispositivo al cual fue conectada.  Es muy importante que este dispositivo se determine muy bien ya que un error a partir de este paso puede significar la pérdida del acceso al sistema operativo o aún peor, la pérdida de información.  Realice estos pasos con mucho cuidado y bajo su propia responsabilidad.

En este caso se supondrá que la unidad USB intervenida corresponde con el dispositivo /dev/sdb.  Modifique este valor apropiadamente según su contexto.

# dd if=/dev/zero of=/dev/sdb bs=512 count=1

Acerca de los tamaños para la persistencia.

Los tamaños elegidos para las particiones que soportarán la persistencia de los datos deberán estar de acuerdo con el tamaño de la unidad USB utilizada y el tamaño de la imágen LiveCD que se integrará.

  + Size of live image:        683  MiB  
  + Overlay size:             1600  MiB
  + Home directory size:      1200  MiB
  = Total requested space:    3483  MiB  
  - Space available:          3528  MiB

En este caso la imagen base del sistema operativo utiliza 683MB, se crearán particiones con tamaños de 1600MB (raíz) y 1200MB (home), y se utilizará una memoria USB con capacidad de 3528MB.

Debido a las restricciones del sistema de archivos FAT las particiones no podrán ser mayores a 2047MB.  Para mas información acerca de las limitaciones consultar la sección Data Persistence and its Limitations.

Crear la LiveUSB con persistencia.

# ./livecd-iso-to-disk.sh –format –overlay-size-mb 1600 –home-size-mb 1200 –unencrypted-home /u/vms/ISO/CentOS-6.0-i386-LiveCD.iso /dev/sdb 

La ejecución del comando anterior se ve regida por los siguientes parámetros.

–format Formatea la unidad y crea una tabla de particiones MS-DOS.
–overlay-size-mb Establece el tamaño para la partición raíz.
–home-size-mb Establece el tamaño para la partición de /home.
–unencrypted-home Indica que no se cifre la partición de /home.
Archivo ISO Especifica la imagen ISO del LiveCD a utilizarse.
Dispositivo (/dev/sdb) Especifica el dispositivo que corresponde con la unidad USB intervenida.

El comando livecd-iso-to-disk incluye varios parámetros de línea de comando que permiten modificar el resultado final de la unidad LiveUSB generada.  Consultar el código fuente del script para mayor información.

Enlaces.