Montaje de Sistema de Archivos NFS Usando Autofs
Replicar, Recuperar Pool Root ZFS FreeBSD
Contruir o reconstruir un sistema a partir de instantáneas (snapshot)
Replicar instantáneas en otro sistema es una característica de OpenZFS que mejora la administración de datos, proporciona un mecanismo para manejar una falla de hardware con una pérdida de datos y un tiempo de inactividad mínimos. La replicación también es una forma conveniente de transferir una copia de un sistema existente a otro, por ejemplo, implementar un laboratorio completo de sistemas similares.
Escenario
Servidor: tormenta FreeBSD 13.1 NUC 11 Essential DDR4-2933 CPU 4 \
32GB RAM M.2 NVMe PCIe 3.0
Cliente: solaris FreeBSD 13.1 Dell Latitude 7390 DDR4-2400 CPU 8 \
16GB RAM M.2 NVMe PCIe 3.0
Enviar una copia de seguridad al servidor vía ssh utilizando zfs send receive
% cat /etc/hosts | grep tormenta ... 192.168.88.160 tormenta ...
Configurar acceso SSH
OpenZFS utiliza SSH para cifrar la replicación durante la transferencia de red.
Puede generar un par de claves con ssh-keygen y luego enviar una copia de la clave pública al servidor. Presione enter en todas las indicaciones para aceptar los valores predeterminados y no solicitar una frase de contraseña.
Dado que root enviará la replica, cambie esta línea en el archivo de configuración del demonio SSH /etc/ssh/sshd_config
#PermitRootLogin no
a
PermitRootLogin yes
Recargar la configuración del demonio SSH
service sshd reload
Enviar una copia de la clave pública al sistema recector (tormenta)
cat ~/.ssh/id_rsa.pub | ssh 192.168.88.160 'cat >>.ssh/authorized_keys' Password for root@192.168.88.160: exit
Crear un conjunto de datos para almacenar las instatáneas replicadas /usr/backup/poolrecovery.
tormenta # zfs create -p zroot/usr/backup/poolrecovery
Creamos la instantánea recursiva del conjunto de datos del pool zroot que incluye los sistemas de archivos secundarios
solaris # zfs snapshot -r zroot@zroot.snap1_dell
Comprobar los recursos compartidos por el servidor tormenta
solaris % showmount -e tormenta Exports list on tormenta: ... /usr/backup/poolrecovery 192.168.88.0 ...
Montar el recurso compartido
# mount -o soft,intr,rw tormenta:/usr/backup/poolrecovery /mnt
Enviar la instantánea de forma recursiva, redirigimos (como archivo comprimido .gz) a la ubicación compartida para poder acceder a esta ubicación al construir el cliente
# zfs send -Rv zroot@snap1_dell | gzip > /mnt/zroot.snap1.gz
Enviar a un sistema que se encuentra en otra ubicación geografica a través de una conexión ssh
zfs send -Rv zroot@snap-20241125 | ssh root@185.166.84.138 "gzip > \ /export/recovery/solaris/zroot@snap-solaris-20241125.gz"
Enviar al servidor de la red local a través de una conexión ssh
zfs send -Rv zroot@snap-20241125 | ssh root@192.168.88.160 "gzip > \ /export/recovery/solaris/zroot@snap-solaris-20241125.gz"
Proceso de recuperación
Asumimos que ha realizado una instalación limpia en el sistema a restaurar eligiendo el particionado auto ZFS en el instalador FreeBSD.
Iniciar con una memoria usb que contenga una img de FreeBSD 13.1 (misma RELEASE usada en la instalación del sistema a recuperar)
En la pantalla de instalacion
Install Shell Live cd
Elegir (live cd)
login: root
Intro (no necesita contrasena)
Iniciar la red con el comando
dhclient em0
Ver información de la conexión
# ifconfig
Comprobar conectividad
# ping freebsd.org
Importar el zpool
mkdir /tmp/zroot zpool import -fR /tmp/zroot zroot
Para poder recibir directamente sobre zroot (sin el error de hijos), renombrar los conjuntos de datos de la instalación limpia a .old antes de lanzar el zfs receive.
Alternativa más elegante (un solo comando para todos)
Renombrar TODOS los hijos directos de zroot
for ds in $(zfs list -H -o name zroot | grep -v "^zroot$"); do
zfs rename -r "$ds" "${ds}.old"
done
Esto captura ROOT, tmp, usr, var, home y cualquier otro que haya aparecido.
Inspeccionar el contenido del backup antes de recibirlo (por comprobar su estructura)
ssh root@192.168.88.160 "cat /zbackup/recovery/solaris/zroot@snap-freebsd-14.3-release-p7-2026-5-enero.gz" | gzcat | zfs receive -nv zroot
La opción -n (dry-run) simula la recepción y muestra qué datasets se crearían, sin escribir nada.
Si se quere ver el progreso en porcentaje durante la transferencia, se puede intercalar pv (si está instalado)
ssh root@192.168.88.160 "cat /zbackup/recovery/solaris/zroot@snap-freebsd-14.3-release-p7-2026-5-enero.gz" | gzcat | pv | zfs receive -Fv zroot
Justo después de renombrar los datasets viejos (.old), y antes del zfs receive real, puedes añadir este paso de verificación robusta:
Verificación robusta
Verificación con zstreamdump (muestra resumen + checksum). zstreamdump puede ser lento con backups grandes y es opcional, pero muy recomendable para detectar corrupción antes de empezar.
ssh root@192.168.88.160 "cat /zbackup/recovery/solaris/zroot@snap-freebsd-14.3-release-p7-2026-5-enero.gz" | gzcat | zstreamdump
Si todo está bien, verás algo parecido a
BEGIN record ... Total write size = 1234567890 END checksum = f1e2d3c4b5a6...
Pasar el archivo por red sin montar ningún directorio
Restaurar el backup (recibe directamente sobre zroot)
ssh root@192.168.88.160 "cat /zbackup/recovery/solaris/zroot@snap-freebsd-14.3-release-p7-2026-5-enero.gz" | gzcat | zfs receive -Fv zroot
VERIFICAR la Estructura Restaurada ANTES DE REINICIAR
Listar toda la jerarquía restaurada
zfs list -r zroot
Buscar el dataset que contiene el directorio /boot (señal inequívoca de sistema base)
zfs list -r zroot/ROOT NAME USED AVAIL REFER MOUNTPOINT zroot/ROOT 110G 177G 96K none zroot/ROOT/default 110G 177G 26.5G /
Confirmar el arranque apuntando a este conjunto de datos
zpool set bootfs=zroot/ROOT/default zroot
Ajustar el punto de montaje para que al reiniciar se monte en /
zfs set mountpoint=/ zroot/ROOT/default
Exportar el zpool y reiniciar
zpool export zroot shutdown -r now
Si después de reiniciar todo funciona, limpiar los restos de la vieja instalación (ya dentro del nuevo sistema)
zfs destroy -rf zroot/ROOT.old zroot/tmp.old zroot/usr.old zroot/var.old zroot/home.old
-r recursivamente destruye todos los hijos -f Si algún dataset está montado fuerza el desmontaje del conjunto de datos
FreeBSD es genial!.
No hay comentarios:
Publicar un comentario