Cuando tenemos un entorno de virtualización Proxmox VE con almacenamientos ZFS y se avería el disco que contiene el propio Proxmox VE ¿se pueden recuperar los ZFS sin perder datos? Explicamos en este tutorial cómo reinstalar Proxmox VE en un equipo que ya tenía almacenamientos ZFS y cómo recuperarlos sin pérdida de datos.
- Escenario inicial, avería de disco con Proxmox VE.
- 1. Reinstalación de Proxmox VE.
- 2. Descubrimiento e importación de los pools ZFS existentes.
- 3. Visualización y activación en la interfaz web de Proxmox.
- Volver a agregar el nodo al clúster Proxmox VE.
- Agregar máquinas virtuales de ZFS a nodo recuperado.
Escenario inicial, avería de disco con Proxmox VE
Partimos de un nodo Proxmox VE que pertenecía a un clúster. Dicho host tenía dos almacenamientos ZFS en RAID 1: raid1-1tb u raid1-1tb-backup. El sistema operativo de Proxmox VE estaba instalado en una unidad de almacenamiento USB (pendrive), dicho almacenamiento se averió, con lo que Proxmox no arrancaba.
Lo que se pretende es reinstalar Proxmox desde cero en una nueva unidad y recuperar los dos pool ZFS sin perder sus datos.
1. Reinstalación de Proxmox VE
El primer paso consiste en volver a desplegar el sistema operativo en el nodo afectado. En el siguiente enlace se puede consultar un tutorial donde explicamos cómo instalar Proxmox VE desde cero:
⚠️ Nota importante: durante el asistente de la instalación de Proxmox VE, hay que prestar máxima atención a la pantalla de selección del disco de destino (Target Harddisk). Nos aseguraremos de elegir única y exclusivamente la nueva unidad física (el nuevo pendrive o SSD destinado al sistema operativo). No debemos seleccionar ninguno de los discos que formaban parte de las configuraciones ZFS previas. ZFS mantiene toda la información en los propios discos, por lo que si no se alteran, podremos recuperarlos sin problema. En caso de dudas, lo mejor es apagar el equipo, desconectar todos los discos ZFS y dejar conectado solo la unidad de arranque con el SO Proxmox y la unidad nueva de destino de la instalación. Posteriormente, una vez instalado Proxmox, apagamos y conectamos todos sus discos.
2. Descubrimiento e importación de los pools ZFS existentes
Una vez instalado el nuevo Proxmox e iniciado el sistema con todos los discos conectados, seleccionaremos el nodo y pulsaremos en «Disks», deberían aparecer todos los discos de los ZFS y el nuevo disco que contiene el SO de Proxmox VE:

En este punto, aún no podemos usar el almacenamiento ZFS, porque si bien los discos han sido detectados en el arranque, los pools ZFS hay que importarlos, como indicamos a continuación.
Abriremos una ventana de Shell en el nodo:

Para comprobar que los discos han sobrevivido y que Proxmox los reconoce, ejecutamos el comando de diagnóstico:
|
1 |
zpool import |
El sistema escaneará las controladoras y nos devolverá los metadatos de los pools huérfanos. En la salida se deberían ver los pools con sus nombres originales, en este caso: raid1-1tb y raid1-1tb-backup, mostrando un estado ONLINE (o DEGRADED si a alguno le falta un disco físico, lo cual aun así permitiría la importación):

En este estudio de caso, además de haber perdido el almacenamiento donde estaba el sistema operativo Proxmox VE, se averió un disco de uno de los pool ZFS, que estaba en RAID 1, por lo que no hay pérdida de información, aunque se marca con estado DEGRADED.
Dado que suponemos que la avería de Proxmox anterior no realizó una exportación limpia, obligaremos al sistema a tomar el control de los pools utilizando el parámetro -f (force), introduciendo el nombre de cada pool (obtenido en el comando anterior):
|
1 2 |
zpool import -f raid1-1tb zpool import -f raid1-1tb-backup |

Verificaremos el estado de los pool ZFS, con el comando:
|
1 |
zpool status |

3. Visualización y activación en la interfaz web de Proxmox
Los pools ya están activos en el sistema operativo, pero la interfaz web (GUI) de Proxmox todavía no los conoce. Para integrarlos y que podamos gestionar los discos virtuales de nuestras VM, seguiremos estos pasos:
- Accedemos a la interfaz web de Proxmox VE, en el menú lateral izquierdo haremos clic en Datacenter. Pulsaremos en la pestaña Storage y haremos clic en el botón Add y en ZFS.

- Configuraremos los siguientes parámetros para el primer pool:

- Repetiremos el mismo proceso para el resto de pool a recuperar (en este caso el
raid1-1tb-backup).

Los almacenamientos aparecerán en el árbol del nodo y tendremos acceso inmediato a los datos.

Volver a agregar el nodo al clúster Proxmox VE
Si el equipo Proxmox pertenecía a un clúster, antes de recuperar las máquinas virtuales que haya en los ZFS, conviene volver a agregarlo al clúster. Para ello, seguiremos los pasos del siguiente tutorial:
Agregar máquinas virtuales de ZFS a nodo recuperado
Si no disponíamos de réplica, ni backup ni HA en el nodo Proxmox caído y queremos recuperar las máquinas virtuales que contenían los pool ZFS, procederemos de la siguiente forma. En primer lugar, anotaremos el ID de cada disco de los que aparezcan en el ZFS, el ID de la máquina virtual que crearemos debe coincidir con el ID asignado al disco.

Por ejemplo, vamos a recuperar la máquina correspondiente al disco vm-108-disk-0, anotaremos el ID 108. Estamos suponiendo que no teníamos copia de seguridad de la máquina, por lo que sus datos: RAM, CPU, Sistema Operativo, adaptador de red, etc. estaban almacenados en un fichero .cfg en el disco averiado, por lo que los hemos perdido. Pero no es problema puesto que los datos reales y el sistema operativo están a salvo en el ZFS, lo único que tendremos que hacer es volver a crear la máquina virtual y asignarle el disco duro. Para esto, si sabíamos qué sistema operativo tenía la máquina y el nombre, directamente crearemos la máquina, si no lo conocemos podemos instalar esta herramienta guestfish:
|
1 |
apt-get install libguestfs-tools -y |

Una vez instalada la herramienta, para obtener el sistema de ficheros de un disco duro virtual, conociendo el nombre del almacenamiento ZFS (raid1-1tb)y el nombre del disco (vm-108-disk-0), ejecutaremos:
|
1 |
virt-filesystems -a /dev/zvol/raid1-1tb/vm-108-disk-0 --filesystems |
Nos devolverá los discos de la máquina, si tienen formato /dev/… será Linux, en otro caso, será Windows.

También podemos ejecutar este otro comando, que nos dará información más precisa de la máquina:
|
1 |
virt-inspector -a /dev/zvol/raid1-1tb/vm-108-disk-0 | grep -E "<distro>|<product>" |
En este caso, nos devolverá la distribución del SO del disco duro:

Pulsaremos con el botón derecho del ratón en el nodo y elegiremos «Create VM»:

Le asignaremos el mismo ID que el disco duro, en este caso 108, el nombre da igual, si sabemos el que tenía le podemos asignar el mismo:

No indicaremos CD/DVD:

Eliminaremos el disco virtual que nos propone crear el asistente, dado que le asignaremos el que ya existe más adelante:

Estableceremos la CPU:

La RAM y la red:

No iniciaremos la máquina virtual, dado que no tiene aún disco duro ni unidad de CD/DVD, por lo que no arrancaría.
Si hemos asignado el mismo ID a la máquina que el ID del disco, desde el shell del nodo, ejecutaremos el siguiente comando:
|
1 |
qm rescan --node n3 |
Cambiaremos «n3» por el nombre del nodo que contiene la máquina y el disco.
Lo que hace el comando anterior es revisar todos los ZFS del nodo, si encuentra un disco que empiece por vm-108-disk… lo asignará automáticamente a la máquina creada anteriormente 108.
En el caso de que el ID de la máquina no coincida con el ID del disco, podremos asignarlo manualmente, por ejemplo, si la máquina la hemos creado con el ID 118 y el disco tiene el 108, podremos asignarle el disco manualmente con el comando:
|
1 |
qm set 118 -scsi0 raid1-1tb:vm-108-disk-0 |

El disco duro quedará agregado a la máquina virtual:

Si hemos usado el comando de descubrimiento del disco duro automático, tendremos que activar el disco duro, desde la interfaz web, eligiendo la máquina virtual, pulsando en Hardware, abajo del todo aparecerá una línea Unused Disk 0, es el disco real con todos los datos, haremos doble clic sobre él y pulsaremos en Add .
Tanto si hemos agregado el disco de forma automática o manual, tendremos que cambiar el orden de arranque, para ello, seleccionaremos la máquina, pulsaremos en Options y haremos doble clic en Boot Order:

Marcaremos el disco añadido y lo arrastraremos a la primera posición:

Ahora ya podremos iniciar la máquina virtual, comprobando que arranca perfectamente:

En este caso, el SO Linux Ubuntu del disco duro, se iniciará de forma normal:
