no se encontraron servicios coincidentes
Instalación de ZFS en Root en un VPS en Ejecución
Esta guía explica cómo instalar ZFS como el sistema de archivos raíz de un VPS que contiene una instalación existente de Linux sin causar pérdida de datos. El VPS tendrá una pequeña partición de arranque EXT4 para GRUB2 con el kernel y initrd, y un gran grupo ZFS montado en root con compresión habilitada. La mayoría de los comandos se ejecutarán desde una imagen de CD en vivo y se mostrará una solución alternativa si el VPS no admite el montaje de imágenes ISO.
- Índice:
- 1. Hacer una copia de seguridad de los datos
- 2. Arrancar una imagen de sistema operativo en vivo
- 3. Instalar ZFS en el entorno del sistema operativo en vivo
- 4. Particionar el disco del VPS
- 5. Instalar ZFS en el disco del VPS
- 6. Restaurar la copia de seguridad en el nuevo sistema de archivos raíz ZFS
- 7. Instalar GRUB2
- 8. Arrancar en el pool raíz ZFS
- Paso 1: Hacer una copia de seguridad de los datos
-
Si tienes un segundo VPS o un ordenador en casa con suficiente espacio para almacenar los datos de la copia de seguridad, desde ese ordenador ejecuta:
donde target es el nombre de host del VPS que se está convirtiendo. Esto copiará todo el sistema de archivos raíz a través de SSH a la máquina de respaldo, y restaurar esta copia de seguridad en el VPS objetivo más adelante será sencillo. Si necesitas comprimir la copia de seguridad por falta de espacio, puedes crear un archivo TGZ comprimido:
# rsync -aqrxz root@target:/ backup.d
Sin embargo, al restaurar un sistema de archivos raíz desde un archivo TAR, será necesario recrear todos los enlaces simbólicos cuyos objetivos tengan nombres de ruta absolutos, porque TAR convierte sus objetivos en nombres de ruta relativos, por lo que usar rsync es la alternativa más simple. Más adelante se mostrará cómo restaurar correctamente el archivo TAR.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Paso 2: Iniciar una imagen de sistema operativo en vivo
-
La conversión a ZFS se realizará desde un sistema operativo en vivo en un CD. Dependiendo de las capacidades de tu panel de control del VPS, es posible que ya tenga una imagen de sistema operativo en vivo lista para iniciar. Alternativamente, puedes descargar una ISO en vivo de Debian desde el espejo de Debian y subirla a tu panel de control del VPS, luego iniciar la ISO desde allí; esto funcionará bien incluso si tu VPS ejecuta una distribución diferente. Ten cuidado de usar una imagen ISO de sistema operativo en vivo, no una ISO de instalación, porque las imágenes de instalación carecen de apt y no pueden instalar el software necesario en el entorno en vivo. Si tu panel de control del VPS admite el inicio desde una imagen ISO proporcionada por el usuario, salta al Paso 3; de lo contrario, aún puedes iniciar la ISO descargada convirtiendo una partición de intercambio, si está presente, en EXT4 y almacenando la ISO en ese espacio de almacenamiento recuperado, luego GRUB2 puede configurarse para iniciar desde esa ISO. Esto se hace de la siguiente manera:
Este VPS tiene una partición de intercambio de 2GB en /dev/vda2 que es lo suficientemente grande para almacenar la ISO. Crea el sistema de archivos EXT4, móntalo y descarga la ISO en él:
# fdisk --list /dev/vda
Disco /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador de disco: 0x495b5ce4
Dispositivo Inicio Fin Sectores Tamaño Id Tipo
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
luego instruye a GRUB2 para que arranque desde esta ISO; edita /etc/grub.d/40_custom de la siguiente manera:# swapoff /dev/vda2 # deshabilitar la partición de intercambio
# mkfs.ext4 /dev/vda2 # crear el sistema de archivos EXT4
# mount /dev/vda2 /mnt # montar el espacio reclamado
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
y aplica la configuración con#!/bin/sh
exec tail -n +3 $0
# Este archivo proporciona una manera fácil de agregar entradas personalizadas al menú. Simplemente escribe las
# entradas del menú que deseas agregar después de este comentario. Ten cuidado de no cambiar
# la línea 'exec tail' anterior.
menuentry "Live ISO" {
set ISOFile="/images/image_file.iso"
loopback loop (hd0,2)$ISOFile
linux (loop)/live/vmlinuz boot=live findiso=$ISOFile
initrd (loop)/live/initrd.img
}
Cuando reinicies el VPS, el menú de GRUB2 ofrecerá la opción de arrancar desde la imagen en vivo. Procede desde allí utilizando la consola de rescate VNC ofrecida por el panel de control del proveedor.update-grub2
- Paso 3: Instalar ZFS en el entorno del sistema operativo en vivo
-
Arranca la imagen del sistema operativo en vivo y accede a su terminal. Luego, instala los paquetes de ZFS en el entorno del sistema operativo en vivo:
Ahora el sistema operativo en vivo tiene el módulo del kernel de ZFS y las utilidades de ZFS necesarias para formatear el sistema de archivos raíz de tu VPS.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Paso 4: Particionar el disco del VPS
-
Hay dos escenarios alternativos para particionar el disco del VPS:
- Si almacenaste la ISO en vivo en /dev/vda2, no puedes alterar esa partición ahora porque el sistema en vivo depende de ella, y no se realizará ningún particionamiento en el disco del VPS. ZFS se formateará en la partición existente /dev/vda2, y /dev/vda1 permanecerá como está y luego se reutilizará como tu partición de arranque permanente para almacenar el kernel y el initrd. Salta al Paso 5 .
-
Si tu entorno en vivo no depende de un archivo ISO almacenado en el disco del VPS, reparticiona el disco creando una pequeña partición de arranque para GRUB2 y una partición grande para la raíz de ZFS que se extienda sobre todo el espacio restante del disco. Ejecuta fdisk para crear las dos siguientes particiones:
Crea una partición de arranque primaria de 100MB de ancho y márcala como booteable con un asterisco (*), con un ID de partición = 83 (Linux). Se formateará como EXT4 para compatibilidad con GRUB2, y contendrá los datos de arranque. Luego, crea otra partición primaria para ZFS, con ID = bf (Solaris). Escribe los cambios en el disco y cierra fdisk. Ahora que el disco está correctamente particionado, puedes formatear la partición de arranque:
# fdisk /dev/vda
Comando (m para ayuda): p
Disco /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador de disco: 0x495b5ce4
Dispositivo Arranque Inicio Fin Sectores Tamaño Id Tipo
/dev/vda1 2048 69203583 69201536 33G bf Solaris
/dev/vda2 * 69203584 73397887 4194304 2G 83 Linux
# mkfs.ext4 /dev/vda2
- Paso 5: Instalar ZFS en el disco del VPS
-
Formatea /dev/vda1 como un volumen ZFS:
Este conjunto de opciones es recomendado por la documentación de ZFS para la mayor compatibilidad con los discos más nuevos y futuros. La opción compression=zstd habilita el algoritmo de compresión ZSTD, que tiene una tasa de compresión más alta que el predeterminado LZ4, aunque puedes usar compression=lz4 para reducir el uso de CPU si tu VPS tiene un alto I/O de disco. El pool se llama rpool, que es el nombre más comúnmente utilizado para los pools raíz. Cuando este comando se complete, rpool se montará en el directorio /mnt del entorno en vivo, como se especifica en la opción -R /mnt anterior, pero se montará automáticamente en / en cada arranque posterior. Montarlo en /mnt es necesario para restaurar tu copia de seguridad en él desde el entorno en vivo.
# zpool create -o ashift=12 \
-O acltype=posixacl -O canmount=on -O compression=zstd \
-O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \
-O mountpoint=/ -R /mnt \
rpool /dev/vda1
- Paso 6: Restaurar la copia de seguridad en el nuevo sistema de archivos raíz ZFS
-
Instala el servidor OpenSSH en el entorno en vivo para recibir los datos de la copia de seguridad desde el VPS de respaldo:
Para simplificar, habilite PermitRootLogin yes en /etc/ssh/sshd_config del entorno en vivo, luego establezca una contraseña segura para root y reinicie OpenSSH:
# apt install openssh-server
e inicie la restauración de los datos de respaldo desde el VPS de respaldo, lo que poblará el grupo de raíz ZFS montado en /mnt:# passwd
# service restart ssh
o si usó TAR para crear un archivo de respaldo, restáurelo con:## desde el VPS de respaldo
# rsync -arxz backup.d/* root@target:/mnt/
sin embargo, como escribí en Paso 1, al extraer, TAR convierte la ruta de destino de los enlaces simbólicos absolutos en rutas relativas; estos enlaces simbólicos se pueden restaurar correctamente de la siguiente manera. Tenga en cuenta que esta restauración no es necesaria si no usó TAR para respaldar el sistema de archivos raíz. Desde el VPS de respaldo, liste todos los enlaces simbólicos contenidos en el archivo:## desde el VPS de respaldo
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
luego copia la lista al VPS de destino en /mnt, que ahora contiene el sistema de archivos raíz repoblado desde la copia de seguridad:## desde el VPS de respaldo
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
Desde el VPS de destino, chroot en /mnt y ejecuta este script de Bash para restaurar todos los enlaces simbólicos absolutos:## desde el VPS de respaldo
# scp list_of_symlinks.txt root@target:/mnt/root/
Tu sistema de archivos raíz ahora está completamente restaurado desde la copia de seguridad y puede ser arrancado, pero primero necesitas un gestor de arranque funcional.## desde el entorno chroot
while read -r row; do
src=$(echo "$row" | grep -Po '(?<=[0-9]{2}:[0-9]{2} )[^ ]+')
tgt=$(echo "$row" | grep -Po '(?<= -> ).+')
echo "enlazando: $src -> $tgt"
ln -fs "$tgt" "$src"
done </root/list_of_symlinks.txt
- Paso 7: Instalar GRUB2
-
Si estás dentro del entorno chroot, sal de él y regresa al entorno en vivo. Luego, enlaza los sistemas de archivos virtuales a /mnt y monta la partición de arranque:
Puedes optar por copiar cualquier contenido preexistente de /mnt/boot/ a la nueva partición de arranque. Ingresa al entorno chroot en el pool raíz y, desde allí, instala el hook initramfs de ZFS, el módulo del kernel de ZFS y las herramientas de espacio de usuario de ZFS necesarias para generar el initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
luego instala el paquete GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
edita /etc/default/grub para configurar el pool ZFS como el dispositivo raíz, modificando la variable GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
luego aplica la configuración:## esto es /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
y finalmente instala GRUB2 en el MBR:# update-grub
# grub-install /dev/vda
- Paso 8: Arrancar en el pool raíz ZFS
-
El sistema está listo, completamente restaurado desde la copia de seguridad, y puede ser arrancado. Sale del chroot y desmonta todos los sistemas de archivos virtuales, luego exporta el pool raíz ZFS:
Ahora puedes eliminar la imagen ISO desde el panel de control del VPS, si utilizaste esta opción, o borrar la ISO del disco duro, y reiniciar el sistema en el grupo de almacenamiento ZFS:
# exit # sale del chroot del rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
La conversión del sistema de archivos raíz del VPS de EXT4 a ZFS está completa, y el VPS arrancará en tu sistema instalado anterior como de costumbre.# reboot
Leer más artículos
