En este apunte describo cómo crear una máquina virtual Linux (Gentoo) en un Hypervisor KVM con la particularidad de que su disco duro residirá en una NAS vía iSCSI. El Host es un NUC5i5RYK con 16GB de RAM y dedicaré un core virtual y 2GB de RAM a la VM.
iSCSI, de Internet SCSI, permite usar el protocolo SCSI sobre redes TCP/IP para acceder al almacenamiento, se trata de una alternativa a las soluciones SAN basadas en Fibre Channel.
NAS con soporte iSCSI
En este apunte vamos a ver cómo una NAS casera (QNAP) es capaz de entregar almacenamiento a través de iSCSI. Para situarnos, en terminología iSCSI un Target es un grupo de volúmenes (LUNs). Puedes optar por crear un único target con múltiples LUNs o varios targets donde cada uno solo tienen una única LUN. Esta última es la opción por la que he optado, para cada VM creo un «Target(grupo) con una única LUN». Las voy a crear desde el administrador web de QNAP.
Veamos un ejemplo donde creo un Target con su LUN asignándole 15GB de espacio libre a nivel de bloque (acceso en modo directo al disco, en vez de en modo fichero), que además se presentará al sistema operativo como si fuese un disco físico.
Lo anterior era un ejemplo, veamos a continuación los tres Targets, cada uno con su LUN, que he creado para que puedan ser consumidos por las futuras VM’s de KVM.
Los nombres de los Targets son realmente impronunciables, pero es lo que hay… así que fíjate bien en cual es el nombre de tu Target porque lo usaremos a continuación. Para este ejemplo voy a usar el Target que llamé «TVMgentoo» y que el QNAP tradujo a: iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1.
iSCSI en virt-manager
Antes de iniciar la instalción de la VM, lo primero es configurar las fuentes iSCSI en el Host y para hacerlo la forma más sencilla es utilizar el programa virt-manager, nos conectaremos con el o los grupos (Targets) para que puedan ser consumidos por la VM más adelante.
Esto se hace obviamente en el Host (Hypervisor) y es muy importante que su Kernel soporte iSCSI (es Linux quien debe soportarlo, no KVM), así que asegúrate de tenerlo bien configurado (consulta este otro apunte sobre KVM donde explico cómo hacerlo. Asumiendo que tengo configurados los targets y que mi Host soporta iSCSI, arranco el gesto de VM’s virt-manager, selecciono mi propio hypervisor KVM, botón derecho y entro en Detalles.
Desde la lengüeta «Almacenamiento», pulsamos en el símbolo «+» para añadir un nuevo grupo (datastore) de tipo Target iSCSI (destino iSCSI).
Debes poner la dirección IP del NAS, en vez del nombre DNS, en el campo «Nombre del equipo».
Si todo ha ido bien, deberías ver lo siguiente:
Ya tengo un disco adicional disponible que usaré durante la instalación de la máquina virtual
Comandos útiles iSCSI
Dejo aquí unos comandos útiles que te pueden venir bien cuando trabajas con discos iSCSI.
- Conectar disco iSCSI, desde línea de comandos o virt-manager
1 2 3 4 5 | marte ~ # iscsiadm -m node -T iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1 -p 192.168.1.2 --login Logging in to [iface: default, target: iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1, portal: 192.168.1.2,3260] Login to [iface: default, target: iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1, portal: 192.168.1.2,3260] successful. |
* Desconectar disco iSCSI, desde línea de comandos o
virt-manager
1 2 3 4 5 | marte ~ # iscsiadm -m node -T iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1 -p 192.168.1.2 --logout Logging out of session [sid: 1, target: iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1, portal: 192.168.1.2,3260] Logout of [sid: 1, target: iqn.2004-04.com.qnap:ts-569pro:iscsi.tvmgentoo.d70ea1, portal: 192.168.1.2,3260] successful. |
Instalar la máquina virtual
Ya estamos listos para crear la máquina virtual, así que nos vamos a virt-manager y la creamos utilizando el ISO de instalación del sistema operativo como disco de arranque. Como es «gentoo» voy a darle bastante memoria (8GB) y cpu (4 vCores) para que las compilaciones vayan rápido. Al terminar modificaré la VM para dejarla con 2GB y 1 vCore
Selecciono la opción Elija administrado, o algún otro tipo de almacenamiento existente
Selecciono la unidad que apunta a mi Target
Selecciono la interfaz de red virtual adecuada y la opción «Personalizar configuración antes de instalar» y hago clic en Finalizar
Ahora podemos parametrizar la VM antes de arrancarla.
- Añado «input->Tableta Gráfica USB EvTouch» para que el ratón responda correctametne cuando manipulo más adelante la VM desde virt-manager.
- MUY IMPORTANTE: Cambiar los controladores de Disco y Red a VirtIO. Ambos ofrecen un rendimiento mejor y es mucho mejor cambiarlo ahora (sobre todo el de disco) que más adelante.
Ya puedo aplicar los cambios y hacer clic en Iniciar instalación
Te recomiendo que dejes de trabajar en la consola y pases a un puesto de trabajo remoto vía SSH, asigno una contraseña a root y arranco el daemon:
1 2 3 | livecd ~ # passwd : livecd ~ # /etc/init.d/sshd start |
1 2 3 | obelix:~ luis$ ssh -l root 192.168.1.107 |
Crear las particiones del disco con Parted
El disco que KVM presenta a la VM realmente está en la NAS (vía iSCSI), pero esto es transparente para la VM, que lo reconoce como un disco real físico y le asigna el nombre de dispositivo /dev/vda (recuerda que usamos el driver Virtio)
1 2 3 4 5 6 7 8 | livecd ~ # fdisk -l Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes |
Empiezo a preparar las particiones. Notar que voy a usar UEFI y GPT (en vez de MBR):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | livecd ~ # parted -a optimal /dev/vda : GNU Parted 3.2 Using /dev/vda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) unit mib (parted) mkpart primary 1 3 (parted) name 1 grub (parted) set 1 bios_grub on (parted) mkpart primary 3 131 (parted) name 2 boot (parted) mkpart primary 131 643 (parted) name 3 swap (parted) mkpart primary 643 -1 (parted) name 4 rootfs (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 3146kB 2097kB grub bios_grub 2 3146kB 137MB 134MB boot 3 137MB 674MB 537MB swap 4 674MB 10.7GB 10.1GB rootfs (parted) quit |
A continuación creo los file systems
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | livecd ~ # fdisk -l Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: DFA5DB69-5DA5-4AAB-8C4F-0266592CFB48 Device Start End Size Type /dev/vda1 2048 6143 2M BIOS boot partition /dev/vda2 6144 268287 128M Linux filesystem /dev/vda3 268288 1316863 512M Linux filesystem /dev/vda4 1316864 20969471 9.4G Linux filesystem livecd ~ # mkfs.ext2 /dev/vda2 livecd ~ # mkfs.ext4 /dev/vda4 livecd ~ # mkswap /dev/vda3 livecd ~ # swapon /dev/vda3 |
Montamos los file systems
1 2 3 4 5 | livecd ~ # mount /dev/vda4 /mnt/gentoo livecd ~ # mkdir /mnt/gentoo/boot livecd ~ # mount /dev/vda2 /mnt/gentoo/boot |
Ajustar la hora
1 | livecd ~ # date 060711572015 <== MMDDHHMMAAAA |
Descarga de Stage 3
El «Stage 3» es un «paquete» que contiene un entorno Gentoo mínimo (ya compilado) que facilita el proceso de instalación. Te recomiendo consultar en paralelo el Gentoo Handbook que encontrarás en la Wiki de Gentoo.
1 2 3 4 | livecd ~ # cd /mnt/gentoo livecd gentoo # links http://distfiles.gentoo.org |
Descargo el último «stage3», el último «portage»:
1 2 3 4 5 6 7 8 | ../releases/amd64/autobuilds/current-stage3-amd64/ --> stage3-amd64-<FECHA>.tar.bz2 ../snapshots --> portage-latest.tar.bz2 : livecd gentoo # tar xjpf stage3-*.tar.bz2 livecd gentoo # cd /mnt/gentoo/usr livecd usr # tar xjpf ../portage-*.tar.bz2 |
chroot al nuevo entorno
A partir de ahora «/» (root) apuntará al disco SSD que hemos formateado y donde hemos descomprimido Stage 3 y Portage. Antes de hacer el chroot debes copiar el /etc/resolv.conf para que la red siga funcionando (sobre todo la resolución de nombres :-))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ___ NO OLVIDES COPIAR RESOLV.CONF ____ cp /etc/resolv.conf /mnt/gentoo/etc ___ COMANDOS PARA HACER EL CHROOT ____ mount -t proc none /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys mount --rbind /dev /mnt/gentoo/dev chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) $PS1" (chroot) livecd / # |
Modificamos el fichero make.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # # Opciones de compilacion, by LuisPa. -l'n' n=+1 CPUs CFLAGS="-O2 -march=native -pipe" CXXFLAGS="${CFLAGS}" MAKEOPTS="-j5 -l10" EMERGE_DEFAULT_OPTS="--nospinner --keep-going --jobs=5 --load-average=10" # CHOST CHOST="x86_64-pc-linux-gnu" # USE Flags (NOTAR QUE QUITO udev, porque usaré "mdev"/busybox) USE="aes avx fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3 -gnome -kde -bindist" # Nuevo CPU Flags CPU_FLAGS_X86="aes avx fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" # Ubicaciones de portage PORTDIR="/usr/portage" DISTDIR="${PORTDIR}/distfiles" PKGDIR="${PORTDIR}/packages" # Lenguaje LINGUAS="es en" # Mirrors GENTOO_MIRRORS="http://gentoo-euetib.upc.es/mirror/gentoo/" # Teclado y graficos INPUT_DEVICES="keyboard mouse vmmouse evdev" VIDEO_CARDS="fbdev nv vesa vmware intel" # PHP TARGETS PHP_TARGETS="php5-6" |
Leemos todas las «News»
1 2 3 4 | (chroot) livecd ~ # eselect news list (chroot) livecd ~ # eselect news read ’n’ |
Establecemos la Zona horaria
1 2 3 4 5 | (chroot) livecd ~ # cd / (chroot) livecd / # cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime (chroot) livecd / # echo "Europe/Madrid" > /etc/timezone |
Preparo el /etc/fstab
1 2 3 | /dev/vda2 /boot ext2 noauto,noatime 1 2 /dev/vda3 none swap sw 0 0 /dev/vda4 / ext4 noatime 0 1 |
Instalo herramientas útiles
Instalo herramientas útiles a la hora de trabajar con Portage y con el sistema en general.
1 2 3 4 | (chroot) livecd ~ # emerge -v eix genlop pciutils gentoolkit (chroot) livecd ~ # eix-update |
Instalo v86d y Python
1 2 3 4 | (chroot) livecd / # emerge -v v86d (chroot) livecd / # eselect python set --python3 python3.3 |
Instalo DHCP Cliente
Para el futuro arranque tras el primer boot, mejor instalar ahora el paquete cliente de DHCP
1 2 3 | (chroot) livecd / # emerge -v dhcpcd |
Preparo portage
Preparo los ficheros de portage
1 2 3 4 5 6 7 8 | # Virtualizador Docker app-emulation/docker ~amd64 # New Kernel sys-kernel/gentoo-sources ~amd64 # Benchmark app-benchmarks/phoronix-test-suite ~amd64 |
1 | net-misc/iputils -caps -filecaps |
1 | dev-lang/php truetype curl gd pcntl zip |
Descargo y compilo el último Kernel
Primero nos bajamos los fuentes del Kernel con el comando siguiente:
1 2 3 | (chroot) livecd / # emerge -v gentoo-sources |
Los fuentes quedan instalados en /usr/src/linux (realmente es un link simbólico), a continuación lo parametrizas con «make menuconfig» y luego compilas con «make» y «make modules_install».
Si tienes experiencia en parametrizar el kernel, adelante con ello. Si lo prefieres y para facilitarte el trabajo, empieza por un kernel «ya probado» para esta versión concreta de kernel. Este que comparto a continuación tiene soporte para ejecutarse en KVM. Lo dejo en mi repositorio de GitHub, en concreto tienes que bajarte el fichero 2015-05-07-config-4.0.4-Gentoo_KVM_Guest.txt y copiarlo como /usr/src/linux/.config. Luego compilas e instalas el kernel.
1 2 3 4 5 6 7 8 9 | cd /usr/src/linux wget https://raw.githubusercontent.com/LuisPalacios/Linux-Kernel-configs/master/configs/2015-05-07-config-4.0.4-Gentoo_KVM_Guest.txt -O .config make && make modules_install cp arch/x86_64/boot/bzImage /boot/kernel-4.0.4-gentoo cp System.map /boot/System.map-4.0.4-gentoo |
Instalo «systemd»
Selecciono el Perfil systemd
Voy a configurar esta VM con systemd, así que selecciono el perfil adecuado:
1 2 3 4 5 6 7 8 | (chroot) livecd / # eselect profile list : [5] default/linux/amd64/13.0/desktop/gnome/systemd : (chroot) livecd / # eselect profile set 5 |
Recompilo con el nuevo Profile systemd
Una vez que se selecciona un Profile distinto lo que ocurre es que cambias los valores USE de por defecto del sistema y esto significa que tenemos que «recompilarlo» por completo, así que lo siguiente que vamos a hacer es un emerge que actualice «world» :
1 2 3 4 5 | # emerge -avDN @world |
NOTA: El proceso re-compila más de 150 paquetes y es normal que tarde varias horas (2 en mi caso), por eso asigné 4 virtual cpu’s a esta VM, para acortar este tiempo al máximo.
Hostname
Con systemd se deja de usar /etc/conf.d/hostname, así que voy a editar a mano directamente los dos ficheros que emplea systemd. – Llamé a mi servidor «edaddepiedrix» (como siempre haciendo alusión a la aldea gala)
1 | gentoo |
1 2 | PRETTY_NAME="KVM Gentoo Linux" ICON_NAME="gentoo" |
Contraseña de root
Antes de rearrancar es importante que cambies la contraseña de root.
1 2 3 4 5 6 | (chroot) livecd ~ # passwd New password: Retype new password: passwd: password updated successfully |
Fichero mtab
Es necesario realizar un link simbólico especial:
1 2 3 4 | # rm /etc/mtab # ln -sf /proc/self/mounts /etc/mtab |
Grub 2
Necesitamos un «boot loader» y nada mejor que Grub2.
1 2 3 | # emerge -v grub:2 |
Instalamos el boot loader en el disco
1 2 3 | # grub2-install /dev/vda |
Modifico el fichero de configuración de Grub /etc/default/grub, la siguientes son las líneas importantes:
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd quiet rootfstype=ext4"
GRUB_TERMINAL=console
GRUB_DISABLE_LINUX_UUID=true
Ah!, en el futuro, cuando te sientas confortable, cambia el timeout del menu que muestra Grub a «0», de modo que ganarás 5 segundos en cada rearranque de tu servidor Gentoo desde vSphere Client 🙂
GRUB_TIMEOUT=0
Cada vez que se modifica el fichero /etc/default/grub hay que ejecutar el programa grub2-mkconfig -o /boot/grub/grub.cfg porque es él el que crea la versión correcta del fichero de configuración de Grub: /boot/grub/grub.cfg.
1 2 3 4 | # mount /boot (por si acaso se te había olvidado :-)) # grub2-mkconfig -o /boot/grub/grub.cfg |
Nota, si en el futuro tienes que modificar el Kernel, no olvides ejecutar grub2-mkconfig tras la compilación (y posterior copiado a /boot) del kernel, tampoco te olvides de haber montado /boot (mount /boot) previamente.
Preparo la red
Uso «nombres de interfaces predecibles», un servicio de udevd bien descrito upstream. Asigno un nombre específico a la interfaz principal (cambia la MAC a la de tu interfaz).
1 2 | # Interfaz conectada a la red ethernet SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:ae:ed:12:34:56", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" |
En la sección de KVM veremos la configuración completa de La Red. De momento creo un fichero bajo /etc/systemd/network, el nombre puede ser cualquiera pero debe terminar en .network. En este caso solo tengo una interfaz física:
1 2 3 4 5 6 7 8 9 10 | # # Interfaz principal de la VM # [Match] Name=eth0 [Network] Address=192.168.1.24/24 DNS=192.168.1.1 Gateway=192.168.1.1 |
A continuación debes habilitar el servicio para el próximo arranque con: systemctl enable systemd-networkd
Otras opciones:
* Arrancar manualmente:
systemctl start systemd-networkd
* Re-arrancar (si cambias algo):
systemctl restart systemd-networkd
* Verificar:
networkctl
Reboot
Salgo del chroot, desmonto y rearranco el equipo…
1 2 3 4 5 6 | # exit # cd # umount -l /mnt/gentoo/dev{/shm,/pts,} # umount -l /mnt/gentoo{/boot,/proc,} : # reboot |
Terminar la configuración
Tras el primer reboot nos faltan piezas importantes, vamos a arreglarlo empezando por lo básico, el teclado 🙂
Teclado y Locale
Parametrizo con systemd el teclado y los locales ejecutando los tres comandos siguientes:
El primer comando modifica /etc/vconsole.conf
1 2 3 | localectl set-keymap es |
El siguiente modifica /etc/X11/xorg.conf.d/00-keyboard.conf
1 2 3 | localectl set-x11-keymap es |
El siguiente modifica /etc/locale.conf
1 2 3 | localectl set-locale LANG=es_ES.UTF-8 |
El ultimo simplemente para comprobar
1 2 3 4 5 6 | localectl System Locale: LANG=es_ES.UTF-8 VC Keymap: es X11 Layout: es |
Preparo el fichero locale.gen
1 2 3 4 5 6 7 | en_US ISO-8859-1 en_US.UTF-8 UTF-8 es_ES ISO-8859-1 es_ES@euro ISO-8859-15 es_ES.UTF-8 UTF-8 en_US.UTF-8@euro UTF-8 es_ES.UTF-8@euro UTF-8 |
Compilo los «locales»
1 2 3 | edaddepiedrix ~ # locale-gen |
Activo SSHD
Otro indispensable, habilito y arranco el daemon de SSH para poder conectar vía ssh. Si en el futuro quieres poder hacer forward de X11 recuerda poner X11Forwarding yes en el fichero /etc/ssh/sshd_config
1 2 3 | # systemctl enable sshd.service |
Vixie-cron
Instalo, habilito y arranco el cron
1 2 3 4 5 | edaddepiedrix ~ # emerge -v vixie-cron edaddepiedrix ~ # systemctl enable vixie-cron.service edaddepiedrix ~ # systemctl start vixie-cron.service |
Fecha y hora
Para configurar fecha/hora debe utilizarse «timedatectl». No te pierdas este apunte sobre cómo montar además el servicio NTP.
1 2 3 4 5 6 | edaddepiedrix ~ # timedatectl set-local-rtc 0 edaddepiedrix ~ # timedatectl set-timezone Europe/Madrid edaddepiedrix ~ # timedatectl set-time 2012-10-30 18:17:16 <= Ponerlo primero en hora. edaddepiedrix ~ # timedatectl set-ntp true <= Activar NTP |
Actualizo portage
Lo primero es hacer un «perl-cleaner» y luego un update completo.
1 2 3 4 5 6 7 8 | : edaddepiedrix ~ # perl-cleaner --reallyall : edaddepiedrix ~ # emerge --sync edaddepiedrix ~ # edaddepiedrix ~ # emerge -DuvN system world |
Usuario y rearranque
Desde una shell añado un usuario normal y por último rearranco el equipo. Mira un ejemplo:
1 2 3 4 5 6 7 8 9 | edaddepiedrix ~ # groupadd -g 1400 luis edaddepiedrix ~ # useradd -u 1400 -g luis -m -G cron,audio,cdrom,cdrw,users,wheel -d /home/luis -s /bin/bash luis : edaddepiedrix ~ # passwd luis Nueva contraseña: Vuelva a escribir la nueva contraseña: : |
Instalo herramientas y paquetes adicionales
1 2 | x11-libs/cairo X dev-libs/libxml2 python |
1 2 3 | edaddepiedrix ~ # emerge -v mlocate sudo emacs tcpdump traceroute mlocate xclock gparted procmail net-snmp bmon dosfstools sys-boot/syslinux |
nfs-utils para montar volúmenes remotos desde mi NAS
1 2 3 4 5 | # emerge -v nfs-utils : |
Tienes dos opciones, utilizar /etc/fstab o automount.
Ejemplo con /etc/fstab para acceder a recursos remotos NFS.
1 2 | # Recursos en la NAS via NFS nas.parchis.org:/NAS /mnt/NAS nfs auto,user,exec,rsize=8192,wsize=8192,hard,intr,timeo=5 0 0 |
Ejemplo usando automount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [Unit] Description=Montar por NFS el directorio NAS Wants=network.target rpc-statd.service After=network.target rpc-statd.service [Mount] What=panoramix.parchis.org:/NAS Where=/mnt/NAS Options= Type=nfs StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target |
1 2 3 4 5 6 7 8 | [Unit] Description=Automount /mnt/NAS [Automount] Where=/mnt/NAS [Install] WantedBy=multi-user.target |
En mi caso prefiero el segundo método:
1 2 3 4 5 6 | edaddepiedrix ~ # systemctl enable rpcbind.service edaddepiedrix ~ # systemctl enable mnt-NAS.mount edaddepiedrix ~ # systemctl enable mnt-NAS.automount edaddepiedrix ~ # mkdir /mnt/NAS |
Por fin, rearranco de nuevo el equipo, deberías tener ya todos los servicios que hemos configurado.
1 2 3 | edaddepiedrix ~ # reboot. (O bien "halt" para pararla) |
Pruebas de rendimiento
Benchmark con Phoronix
Si quieres comprobar el rendimiento te recomiendo el benchmark pts/aio-stress de Phoronix:
1 2 3 4 5 6 7 | # emerge -v phoronix-test-suite # phoronix-test-suite benchmark pts/aio-stress |
Los resultados del benchmark está disponibles aquí, pero como se puede ver el rendimiento no está nada mal.
Backup y Recuperación
Backup de la VM
Para hacer backup de este tipo de VM lo que hacemos es backup del «disco iSCSI» usando las herramientas de la propia NAS guardándolo en un fichero en un NFS externo.
- Antes de empezar, configuro el servidor NFS. En mi caso iMAC OSX que incluye el servidor NFS y está siempre activo, lo único que tienes que hacer es modificar el fichero
/etc/exports y automáticamente empezará a exportar:
Apago la máquina virtual desde virt-manager o ejecutando un shudown o halt en el Linux.
Desde un navegador y el interfaz GUI de mi NAS creo un trabajo de Backup instantáneo hacia un fichero en un directorio NFS remoto (/Volumes/Terabyte/0.BACKUP/iSCSI) en mi OSX (obelix.parchis.org):
- Se pondrá inmediatamente a trabajar. Observa el resultado final, tanto en la pantalla de configuración del QNAP como en el Finder de mi iMAC, vemos un fichero de ~10GB que contiene el backup completo del disco físico utilizado para esta máquina virtual.
- Conecto de nuevo el disco iSCSI desde virt-manager para poder volver a trabajar con la VM.
Nota: En el caso de haber activado la compresión (mientras indicas la ubicación del fichero destino) el proceso tarda mucho más, pero obtendrás a cambio un fichero mucho más pequeño, mira la diferencia:
Restaurar la VM
Para restaurar la VM volvemos a usar las herramientas que incluye la propia NAS. Voy a mostrar un ejemplo simulando que hemos perdido por completo el NAS, así que parto de una instalación de un NAS vacío donde tengo que volver a crear los grupos (targets) y LUN’s de nuevo para recuperar el BACKUP desde el fichero en el servidor NFS remoto que utilicé en el paso anterior. Recomiendo hacer este tipo de pruebas para verificar que efectivamente tus backups funcionan 🙂
- Desde el QNAP, creo un nuevo target/LUN de 10GB.
- Desde el QNAP, nuevo trabajo de recuperación para restaurar desde el fichero de backup
- Desde el Host KVM y
virt-manager elimino el Target/LUN antiguo, creo el nuevo
iqn.2004-04.com.qnap:ts-569pro:iscsi.vmgentoo.d70ea1
y en la VM borro el disco antiguo y creo uno nuevo asociando el nuevo recurso disponible.
- A partir de ahí ya puedo volver a arrancar la VM y ver que funciona correctamente.
Leave a Reply