El Nas ha muerto, viva el Nas
· 10min · nas
Introducción
Los más antiguos de blog recordarán que en 2019 y los siguientes años publiqué una serie de entradas:
- Nuevo servidor NAS reciclado en CursosDeDesarrollo
- Servidor Nas Reciclado: Una historia graciosa de un informático en apuros
- Servidor Nas: Creando un backup en la nube: backblaze
- Antiguo servidor NAS reciclado en CursosDeDesarrollo dos años después
Pues resulta que el NAS ha muerto. Literalmente. Primero dio un fallo con la pila de la placa base, que podría haberse solucionado con un simple cambio de pila. Pero no dio tiempo a más. Un día luego de un corte de luz, el NAS no volvió a ser accesible. Si recordáis tenemos un JetKVM que nos permite acceder a la consola del NAS remotamente, y al intentar arrancarlo, la JetKVM no reconocía la entrada HDMI. Que usaba un adaptador de VGA a HDMI porque la placa base solo tenía VGA. Probamos a cambiar el cable, el adaptador, pero nada. La placa base había muerto. Aunque las luces de los discos duros se encendían, no había forma de acceder a los datos.
Nuevo NAS
Lo primero que hice fue montar el nuevo NAS un Slimbook Nas Cube que habíamos comprado para que pudiera substituir al NAS antiguo. Venía con las siguientes características:
- Procesador: AMD Ryzen™ 7 8845HS
- 8 núcleos 16 hilos, hasta 5.1GHz
- Gráficos: AMD Radeon 780M
- Puertos: 1x USB-C USB 4.0
- Puertos: 3x USB-A 3.2 Gen1
- Conectividad: 4x RJ45 2.5Gb
- Conectividad: 1x RJ45 10Gb
- Material: aluminio
- Memoria RAM: 64GB DDR5
- Discos: 2x SSD NVMe PCIe 4.0 M.2 de 500GB
- Bahías discos: 8x 3.5” HDD
- Fuente de alimentación: 850W 80 Plus Gold
Coste: 1.972€
También compramos 2 discos duros Seagate IronWolf de 8TB y otros dos Western Digital Red Plus de 8TB para montar un RAID 10 con 4 discos de 8TB. Con la idea de que el NAS tuviera 24TB útiles (32TB brutos menos un disco por el Zraid1 de ZFS). Que costaron unos 1000€ los cuatro.
Por un coste total de 1.972€ + 1000€ = 2.972€
Instalación del NAS
La instalación del NAS fue sencilla. Usamos Debian 13 como sistema operativo base pero teníamos dos discos SSD NVMe de 500GB para el sistema operativo. Decidimos instalar Debian 13 en RAID 1 con los dos discos NVMe para tener redundancia en el sistema operativo. De cara a realizar la instalación de Debian 13 usamos la capacidad de crear un medio virtual de JetKVM para montar la ISO de Debian 13 y poder instalar el sistema operativo remotamente. Tarda un poco en subir el fichero ISO, pero luego la instalación es sencilla. Después debimos realizar primero una partición en cada disco NVMe para crear una partición EFI de 1GB en cada disco. Luego ya dejamos el resto del disco para la partición raid que luego crearemos un raid 1. Para después crear un LVM sobre el RAID 1 y crear los volúmenes lógicos para el sistema operativo. El proceso de instalación de Debian 13 con RAID 1 y LVM es sencillo y está bien documentado en la web de Debian. Con el sistema operativo instalado, podíamos continuar con la configuración del NAS.
Instalación de ZFS
Y teníamos que instalar y configura ZFS para gestionar los discos.
Para instalar ZFS en Debian 13, seguimos estos pasos como root:
apt update
apt install linux-headers-amd64 zfs-dkms zfsutils-linux
Luego cargamos el módulo ZFS:
modprobe zfs
Recuperación de los discos del NAS antiguo
El siguiente paso fue recuperar los discos del NAS antiguo. El NAS antiguo tenía 4 discos duros de 4TB cada uno en Zraid1 de ZFS. Así que sacamos los discos del NAS antiguo.
La caja que viene con el Slimbook Nas Cube es la Jonsbo N3 Black que permite montar hasta 8 discos de 3.5”. Montamos los discos antiguos de 4TB usando los bumpers de goma que vienen con la caja para evitar vibraciones y los tiradores para poder sacar los discos fácilmente. Con los bumpers de goma, no es necesario atornillar los discos a la caja, lo que facilita mucho la instalación y el mantenimiento. Y encajan perfectamente en la caja para conectarlos al backplane de la caja. Lo mismo hicimos con los discos nuevos de 8TB que íbamos a usar para el nuevo pool ZFS. Arrancamos el NAS y ya podíamos ver los discos conectados con el comando:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Y pudimos ver los discos antiguos y los nuevos.
Importación del pool ZFS antiguo
Luego, para importar el pool ZFS del NAS antiguo, usamos el siguiente comando:
zpool import
Esto nos mostró el pool disponible para importar. Luego importamos el pool con el siguiente comando:
zpool import nombre_del_pool
Donde “nombre_del_pool” es el nombre del pool que vimos en el comando anterior. Una vez importado el pool, pudimos acceder a los datos del NAS antiguo. Como los discos venían de un sistema con una tarjeta raid, tenían un particionado extraño. Pero ZFS pudo reconocer los discos y montar el pool sin problemas.
Con el siguiente comando pudimos el status del pool:
zpool status
Y el pool estaba bien sin errores.
El directorio de montaje del pool estaba en /DataPool
Creación del nuevo pool ZFS
El siguiente paso fue crear el nuevo pool ZFS con los discos nuevos.
El primero comando debe ser localizar los discos nuevos:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Con este comando vimos los discos nuevos que eran sdd, sde, sdg y sdh (los discos de 8TB) Pero lo suyo es usar los identificadores de los discos en /dev/disk/by-id para evitar problemas si el orden de los discos cambia. Por ello buscamos los identificadores con el siguiente comando:
ls -l /dev/disk/by-id/
Y vimos que los discos nuevos eran:
lrwxrwxrwx 1 root root 9 Jan 3 17:35 ata-ST8000VN002-2ZM188_WPV2WSXD -> ../../sdd
lrwxrwxrwx 1 root root 9 Jan 3 17:35 ata-ST8000VN002-2ZM188_WPV2PVEP -> ../../sde
lrwxrwxrwx 1 root root 9 Jan 3 17:35 ata-WDC_WD80EFPX-68C4ZN0_WD-RD3BG96G -> ../../sdg
lrwxrwxrwx 1 root root 9 Jan 3 17:35 ata-WDC_WD80EFPX-68C4ZN0_WD-RD3B1NEG -> ../../sdh
Con los identificadores de los discos, ya podíamos crear el pool ZFS.
Usamos el siguiente comando para crear el pool ZFS en Zraid1:
zpool create -o ashift=12 \
datos \
raidz1 \
/dev/disk/by-id/ata-ST8000VN002-2ZM188_WPV2WSXD \
/dev/disk/by-id/ata-ST8000VN002-2ZM188_WPV2PVEP \
/dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD3BG96G \
/dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD3B1NEG
Con este comando creamos un pool llamado “datos” en Zraid1 con los cuatro discos de 8TB. Luego verificamos el estado del pool con:
zpool status datos
Y vimos que el pool estaba creado correctamente.
Migración de datos
El siguiente paso fue migrar los datos del pool antiguo al nuevo pool. Para ello usamos las herramientas de ZFS para enviar y recibir los datos. Primero creamos un snapshot del pool antiguo:
zfs snapshot DataPool@migra
Luego usamos el comando zfs send para enviar el snapshot al nuevo pool:
zfs send -R DataPool@migra | zfs receive -F datos
Con este comando enviamos el snapshot del pool antiguo al nuevo pool. El proceso de migración puede tardar un tiempo dependiendo de la cantidad de datos. En nuestro caso tardó unas 14 horas para unos 8TB de datos en el pool antiguo. No es un que muestre progreso, por lo que deberemos esperar a que termine. Pero podemos monitorizar la velocidad de transferencia con el comando:
zpool iostat -v 5
Este comando nos muestra la velocidad de lectura y escritura en el pool cada 5 segundos.
O podemos instalar iotop para ver la actividad de los discos:
apt update
apt install iotop
iotop -oPa
Con esto podemos ver qué procesos están usando los discos y a qué velocidad. Una vez terminado el proceso de migración, verificamos que los datos estaban correctamente en el nuevo pool:
zfs list datos
Y vimos que los datos estaban correctamente en el nuevo pool.
Pero luego debimos cambiar el punto de montaje de los pool.
Para ello usamos los siguientes comandos:
zfs set mountpoint=/DataPool datos
zfs set mountpoint=/DataPool_old DataPool
Con estos comandos cambiamos el punto de montaje del nuevo pool a /DataPool y el antiguo pool a /DataPool_old Y pudimos ver que el contenido estaba correctamente en /DataPool
Otro método de migración
Otra forma de migrar los datos es montar ambos pools y usar rsync para copiar los datos. Por ejemplo, montamos el pool antiguo en /DataPool y el nuevo pool en /datos Luego usamos el siguiente comando rsync para copiar los datos:
rsync -avh --progress /DataPool/ /datos/
Con este comando copiamos todos los datos del pool antiguo al nuevo pool. Este método es más lento que usar zfs send/receive, pero es más sencillo de entender. Además, con rsync podemos ver el progreso de la copia de datos.
Contenedores Docker
Finalmente, tuvimos que instalar Docker para ejecutar los contenedores que teníamos en el NAS antiguo. Instalamos Docker siguiendo la guía oficial de Docker para Debian
Después pudimos ir levantando los contenedores usando docker compose con los ficheros compose.yml que teníamos en el NAS antiguo
Caso especial fue el dongle usb de Zigbee que usábamos para el Zigbee2mqtt que tuvimos que pasar al nuevo NAS y configurar Docker para que el contenedor pudiera acceder al dispositivo USB. Pero lo reconocía sin problemas. Y pudimos levantar el contenedor sin problemas.
Conclusión
Y con esto, el nuevo NAS estaba funcionando correctamente con los datos migrados del NAS antiguo. El proceso de migración fue sencillo gracias a las herramientas de ZFS. Y ahora tenemos un NAS más potente y moderno con más capacidad de almacenamiento.