Problema
En entornos de virtualización con Proxmox, es frecuente usar ZFS en modo mirror para el disco del sistema. Cada disco contiene tres particiones típicas: BIOS BOOT, EFI System Partition (ESP) y la partición ZFS. Cuando una de las unidades falla y se sustituye, el proceso de clonar particiones y resilver el pool puede dejar el sistema sin un gestor de arranque funcional. El síntoma clásico es el mensaje de la BIOS “Error 1962: No operating system found” o la ausencia del nuevo disco en la lista de dispositivos de arranque, aunque el pool ZFS sigue saludable.
Este escenario no es exclusivo de un caso concreto; cualquier administrador que gestione un boot pool ZFS con EFI y realice sustituciones de hardware puede encontrarse con la misma pérdida de la entrada de arranque.
Causa
-
ESP no registrada en la tabla de arranque UEFI
Copiar la partición EFI conddreplica los datos, pero no actualiza la NVRAM. Si el firmware no reconoce la nueva ESP, el disco no aparece como opción de arranque. -
Identificadores de partición (GUID) diferentes
ZFS usa los GUID de los dispositivos para mapear la raíz del pool. Al crear una nueva unidad, los GUID cambian; si elbootfsdel pool sigue apuntando al antiguo GUID, el gestor de arranque no encuentra el dataset raíz. -
Bootloader no instalado en la nueva ESP
Proxmox usasystemd-boot(ogruben configuraciones legacy). Simplemente clonar la partición no garantiza que los archivos de arranque estén presentes o que elloader.confapunte al pool correcto. -
proxmox-boot-toolno ejecutado contra la nueva partición
La herramienta prepara la ESP, escribe la firma de arranque y actualiza la variablebootctl. Omitir este paso deja el disco “vacío” a los ojos del firmware. -
Resilver incompleto o pool en estado degraded
Si el pool sigue degradado, el sistema puede arrancar, pero la redundancia está comprometida y ZFS puede rechazar montar el dataset de arranque por consistencia.
Solución
La reparación se basa en tres pilares: re‑crear la ESP, actualizar la variable de arranque UEFI y forzar que ZFS apunte al nuevo disco. A continuación se describe un flujo que funciona tanto para discos recién creados como para unidades clonadas.
1. Preparar la nueva unidad
-
Crear particiones idénticas
Usasgdiskpara replicar la tabla de particiones del disco sano.sgdisk -R=/dev/sda /dev/sdb # copia tabla de sdb (bueno) a sda (nuevo) sgdisk -G /dev/sda # genera nuevos GUIDs -
Formatear la ESP
mkfs.fat -F32 /dev/sda2 -
Montar la ESP y copiar los archivos de arranque
mount /dev/sda2 /mnt/esp cp -a /boot/efi/* /mnt/esp/ umount /mnt/esp
2. Ejecutar proxmox-boot-tool
Esta herramienta escribe la firma de arranque y registra la ESP en la NVRAM.
proxmox-boot-tool init /dev/sda2
proxmox-boot-tool refresh
Si el pool usa
systemd-boot, el comando anterior crealoader/entriesapuntando al datasetrpool/ROOT/.... En caso degrub, la herramienta también instala los módulos necesarios.
3. Ajustar el bootfs de ZFS
Verifica el GUID actual del nuevo disco y actualiza la propiedad bootfs del pool:
zpool status -v
zpool set bootfs=rpool/ROOT/default rpool
Si el pool sigue señalando al GUID antiguo, reemplázalo con:
zpool export rpool
zpool import -d /dev/disk/by-id rpool
El flag -d permite que ZFS descubra los dispositivos por su ID, evitando conflictos de GUID.
4. Resilver y verificación
Una vez que la ESP está lista y el bootfs apunta al nuevo disco, inicia el resilver si aún no se completó:
zpool attach rpool /dev/sdb3 /dev/sda3
zpool status rpool # espera a que el estado sea ONLINE
5. Actualizar la orden de arranque del firmware
Reinicia y entra al menú UEFI. Debería aparecer una entrada llamada Proxmox o systemd-boot asociada al nuevo disco. Si no, crea manualmente:
bootctl --path=/boot/efi install
bootctl set-default proxmox
6. Test de arranque
Apaga la máquina, desconecta el disco antiguo y verifica que el servidor arranca únicamente con el nuevo disco. Si el arranque falla, repite el paso 2 asegurándote de que la ESP esté montada en /boot/efi antes de ejecutar proxmox-boot-tool.
Cuándo aplicar esta solución
- Síntomas: Mensaje de BIOS “No operating system found”, la ESP del nuevo disco no aparece en la lista de arranque, o el pool ZFS está degradado tras reemplazo de disco.
- Entorno: Proxmox VE con ZFS como pool raíz, usando EFI (no BIOS legacy).
- No aplica: Sistemas que usan
GRUBen modo BIOS sin ESP, o configuraciones donde el arranque se gestiona mediante iPXE/Network boot.
Código
# 1. Replicar tabla de particiones y generar nuevos GUID
sgdisk -R=/dev/sda /dev/sdb
sgdisk -G /dev/sda
# 2. Formatear la nueva ESP
mkfs.fat -F32 /dev/sda2
# 3. Copiar contenido de arranque
mount /dev/sda2 /mnt/esp
cp -a /boot/efi/* /mnt/esp/
umount /mnt/esp
# 4. Inicializar la ESP con proxmox-boot-tool
proxmox-boot-tool init /dev/sda2
proxmox-boot-tool refresh
# 5. Asegurar que ZFS apunte al dataset correcto
zpool set bootfs=rpool/ROOT/default rpool
# 6. Resilver (si es necesario)
zpool attach rpool /dev/sdb3 /dev/sda3
zpool status rpool
Verificación
-
Estado del pool
zpool status -vDebe mostrar
ONLINEyscan: resilveredsin errores. -
Entrada UEFI
Ejecutabootctl listdentro de un live shell. La salida debe contener una entrada conloaderapuntando a/boot/efi/loader/entries. -
Arranque limpio
Desconecta el disco antiguo, reinicia y verifica que el sistema arranca sin intervención manual. Revisa los logs dedmesgyjournalctl -bpara confirmar que el pool se importó automáticamente. -
Persistencia
Vuelve a conectar el disco antiguo (si lo deseas) y ejecutazpool replace rpool /dev/sdb3 /dev/sda3para que vuelva a formar el mirror. Después de la sincronización, el pool debe estar nuevamente en espejo.
Notas adicionales
- Backup del ESP: Antes de manipular la partición EFI, crea una copia con
dd if=/dev/sdb2 of=esp-backup.img. Facilita la recuperación si algo sale mal. - Variables de firmware: En algunos servidores UEFI, la variable
BootOrderpuede quedar corrupta. Borrar todas las entradas deBoot####y volver a ejecutarproxmox-boot-toolsuele resolver el problema. - ZFS cachefile: Asegúrate de que
/etc/zfs/zpool.cacheesté actualizado. Si el archivo apunta a un GUID inexistente, el arranque fallará. Regenera el cache conzpool set cachefile=/etc/zfs/zpool.cache rpool. - Compatibilidad de versiones: La guía asume Proxmox 7.x o superior, donde
proxmox-boot-toolestá disponible. En versiones anteriores, el proceso implica instalar manualmentesystemd-bootogruben la ESP. - Monitoreo: Configura alertas de SMART (
smartd) y de ZFS (zpool status) para detectar degradaciones antes de que el disco falle completamente. Un reemplazo proactivo evita la necesidad de reparaciones de arranque bajo presión.