FreeBSD México

Comunidad Mexicana de FreeBSD

Clonando una Máquina FreeBSD/ZFS con ‘zfs send’

Esta es una traducción del siguiente sitio: http://blather.michaelwlucas.com/archives/2108
FreeBSD Logo

Los servidores de correo electrónico de mi patrón corren DirectAdmin en FreeBSD, con ZFS. El servidor de correo es importante en la compañía. Queremos ser capaces de restaurar rápida y fácilmente. Mientras que regularmente lo respaldamos, teniendo sistema base “que se sabe que esta bien” con todo el software instalado, donde podemos restaurar los spools de mail y la información de las cuentas, todo estará bien.

Como corre con ZFS, enviemos los sistemas de archivos a traves de la red a una máquina en blanco.

Primero se necesita un ISO de instalación de la misma liberación y arquitectura de FreeBSD. (¿Podría usar una liberación diferente? Quizas. Pero si tengo algun error, la primera cosa será probar el medio de instalación correcto. Vamos a saltarnos los preliminares.)

También se necesita un servidor web, para almacenar el archivo de la llave pública SSH del usuario.

Yo provisioné una máquina virtual nueva con exactamente la misma cantidad de disco duro, memoria y procesador que el equipo original.

Se arrancó desde el disco de instalación. Seleccione “Live CD” en lugar de install.. Inicie sesión como root (sin  password).

Para FreeBSD 9.2 o anterior, tome en cuenta el bug 168314. el Live CD no puede configurar resolv.conf en la instalación por defecto porque el directorio /tmp/bsdinstall_etc no esta presente y /etc/resolv.conf es una liga simbólica a /tmp/bsdinstall_etc/resolv.conf.

# mkdir /tmp/bsdinstall_etc
# touch /tmp/bsdinstall_etc/resolv.conf

Mi disco es /dev/vtbd0. A este disco le di un formato exacto al disco del servidor original. La instalación original se grabó en un script, lo cual me salvó de los problemas de copiar el particionamiento de la máquina original.

# gpart destroy -F vtbd0
# gpart create -s gpt vtbd0
# gpart add -s 222 -a 4k -t freebsd-boot -l boot0 vtbd0
# gpart add -s 8g -a 4k -t freebsd-swap -l swap0 vtbd0
# gpart add -a 4k -t freebsd-zfs -l disk0 vtbd0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 vtbd0
# gnop create -S 4096 /dev/gpt/disk0
# kldload zfs
# zpool create -f -o altroot=/mnt -O canmount=off -m none zroot /dev/gpt/disk0.nop
# zfs set checksum=fletcher4 zroot

Nuestro sistema de archivos destino ya esta configurado. Pero necesitaremos un daemon SSH para recibir conexiones. Los únicos directorios con permiso de escritura son /tmp y /var, así que cree un archivo  /tmp/sshd_config que contiene:

HostKey /tmp/ssh_host_ecdsa_key
PermitRootLogin yes
AuthorizedKeysFile /tmp/%u

Necesito un archivo de host key. ssh-keygen con una bandera  -A para crear claves de host automáticamente, pero intenta ponerlas en /etc/ssh. si quieres crear las claves en otra ubicación, debes hacerlo manualmente.

# ssh-keygen -f ssh_host_ecdsa_key -N '' -t ecdsa

Ahora arrancamos sshd y la red.

# /usr/sbin/sshd -f /tmp/sshd_config
# dhclient vtnet0

Tu máquina original ahora debe ser capaz de dar ping y conectarse vía SSH al host en blanco. El host en blanco debe ser capaz de dar ping a tu servidor web.

Este es el momento en que te das cuenta de que la dirección configurada por DHCP esta actualmente en uso por otra máquina, necesitas reiniciar y empezar de nuevo.

Copia un archivo de claves autorizadas (authorized_keys) desde tu web server al directorio /tmp/root. También configura los permisos en /tmp de tal forma que sshd aceptará ese archivo de claves. (El sticky bit hará que sshd rechaze el archivo de claves.)

# fetch http://webserver/authorized_keys .
# mv authorized_keys root
# chmod 755 /tmp

En este punto, la máquina original debería ser capaz de conectarse vía SSH en la máquina objetivo como root. Esta fue la parte dificil. Ahora hay que copiar recursivamente el snapshot ZFS a traves de la red.

# zfs snapshot -r zroot@backup
zfs send -R zroot@backup | ssh root@newhost zfs recv -F zroot

Ahora nos retiramos y permitimos que gigas y gigas de datos fluyan a traves de la WAN. Para verificar el progreso, ve a la maquina destino y ejecuta el siguiente comando:

# zfs list -t snapshot

Cuando una instantanea individual termina, aparecerá en la lista.

Una vez que el ZFS send se completa, se puede reiniciar y tener un sistema clonado, verdad?

Mmmmh, aún no. (Sospecho que todo lo que sigue se pudo haber realizado antes del reinicio previo, pero no sabía si tenía que hacerlo. Lectores, por favor hagan lo que sigue antes de su primer reinicio y dejenme saber si funcionó o no.)

Si reinicia en esta etapa y obtendrá un mensaje de error como el siguiente:

Can't find /boot/zfsloader

Can't find /boot/kernel

¿Entonces que hacer? Primero que nada, aún no hay un cargador de arranque. Pude haber realizado esto antes, pero no lo pensé. Reinicia nuevamente en el live CD e instale los cargadores necesarios.

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 vtbd0
bootcode written to vtbd0

Mientras estas en el live CD, verifique el tanque de volúmenes ZFS.

# zpool status
no pools available

¡Un momento… Yo se que hay una tanque de volúmenes aquí! Yo lo vi antes de reiniciar. Ejecutar “zpool import" me muestra mi tanque de volúmen zroot como una opción, así que intentemos nuevamente.

# zpool import zroot
cannot import 'zroot': pool may be in use from other system
use '-f' to import anyway

Nosotros sabemos que el tanque de volúmenes no esta en uso, así que vamos a importarlo a la fuerza. Como estoy arrancando desde el live CD, Yo lo montaré temporalmente en  /mnt.

# zpool import -o altroot=/mnt -f zroot

Ahora que ya podemos comunicarnos con el tanque de volúmenes, le podemos decir a FreeBSD desde cual ZFS debería de arrancar.

# zpool set bootfs=zroot/DEFAULT/root zroot

Quiero asegurarme de que este tanque de volúmenes puede ser importado y exportado limpiamente, así que hago lo siguiente:

# zpool export zroot
# zpool import zroot

En este punto, he montado el sistema de archivos ZFS sobre el sistema de archivos del live CD. Ya no muevan nada aquí, solo reinicien el sistema.

Y su sistema esta clonado.

Ahora tengo que resolver como actualizar esta copia con instantaneas incrementales, Pero eso será un post separado en mi blog.

 

_________________________

Nos leeremos en el siguiente artículo.

FreeBSD rulez!

Si esta información te resultó útil considera hacer una donación a mis cuentas de BitCoin o LiteCoin:

BTC:   37Eyuc6a9YFw3NYAWriBRdsNztjeUCjeBY

LTC:    LhyHJC2eXVCrwHKX1jnMuSHgSijW3XHX2j

_________________________

Eric De La Cruz Lugo, es Licenciado en Informática Administrativa (LIA) con especialidad en sistemas, egresado del Instituto Tecnológico y de Estudios Superiores de Occidente (ITESO), ha sido usuario de FreeBSD desde 1993 y de sistemas UNIX desde 1992, y de Linux desde 1997 (actualmente cuenta con certificación Linux+CompTIA) es profesor de asignatura de la Universidad Tecnológica Metropolitana en Mérida, Yucatán, donde administra servidores corriendo con FreeBSD que hospedan aplicaciones administrativas y la plataforma educativa en línea de la división de TIC (Tecnologías de la Información y Comunicación) de la Universidad. También brinda de forma independiente consultoría profesional a empresas e instituciones, e imparte cursos relacionados con UNIXLinux y desde luego FreeBSD!, forma parte del equipo de traducción al español del sitio bsdcertification.org, así como Proofreader y betatester de artículos de la revista BSDMag editada en Polonia, que se puede leer mensualmente en bsdmag.org,  también es astrónomo amateur y asesor externo del Planetario Arcadio Poveda Ricalde de Mérida, Yucatán y esta felizmente casado con su amada esposa Marisol Alvarez, puede ser alcanzado en: eric@freebsd.mx, eric_delacruz@yahoo.com y en eric@iteso.mx y en twitter: @COSMICBOY123)

 

No Responses to “Clonando una Máquina FreeBSD/ZFS con ‘zfs send’”

No comments have been made on this post



Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*