Problema

En muchos entornos de homelab o pequeñas oficinas se reutilizan servidores HP ProLiant Gen8/Gen9 para ejecutar Linux. Un patrón recurrente es que, tras instalar una distribución (Ubuntu, Mint, Debian, etc.) en una SSD conectada a los puertos SATA internos o a la controladora RAID, el sistema arranca una o dos veces y luego entra en modo read‑only o muestra errores de fsck al reiniciar. En algunos casos el kernel se cuelga pocos segundos después del arranque, sin generar un panic visible. El síntoma típico es:

  • El instalador reconoce el disco y completa la instalación sin errores.
  • El primer arranque funciona, pero después de un reinicio el kernel no encuentra un sistema de archivos limpio.
  • El bootloader (GRUB) a veces muestra “no bootable device” o “grub rescue”.
  • El servidor se vuelve inestable y necesita un fsck -y manual en cada arranque.

Este comportamiento no está limitado a un modelo concreto; se presenta en cualquier servidor HP ProLiant que combine:

  1. Controladora Smart Array (RAID) con firmware antiguo.
  2. Opciones de BIOS que alternan entre RAID y AHCI.
  3. SSDs de alta velocidad conectadas a bahías de 3,5 “.
  4. Instalaciones que usan el UEFI o el Legacy BIOS de forma inconsistente.

Causa

1. Firmware/BIOS desactualizado

Los controladores Smart Array de HP requieren versiones específicas para reconocer discos SSD en modo AHCI. Un firmware antiguo puede dejar la controladora en un estado “semi‑initialized”, lo que provoca que el controlador no sincronice correctamente los buffers de escritura. El resultado es una tabla de particiones corrupta después del apagado.

2. Modo de operación de la controladora (RAID vs AHCI)

Cambiar de RAID a AHCI sin reinstalar el sistema o sin actualizar el initramfs genera un kernel que intenta cargar módulos inexistentes (hpvsa, hpsa). El kernel arranca, pero el driver de disco falla al montar la raíz, forzando un fallback a read‑only.

3. SSD demasiado rápida para la controladora SATA de 3 Gb/s

Las controladoras internas de los ProLiant Gen8 están diseñadas para discos duros mecánicos. Cuando una SSD NVMe o SATA 6 Gb/s se conecta a un puerto de 3 Gb/s, el controlador puede perder paquetes de escritura durante el apagado, dejando el journal de ext4 en estado inconsistente.

4. Configuración de “Fast Boot” y “Secure Boot”

En UEFI, la opción Fast Boot salta la fase de detección de dispositivos y no permite que el controlador RAID complete su inicialización. Si el bootloader se instala en una partición EFI que el firmware no reconoce, el sistema arranca en modo legacy y el kernel no encuentra la tabla de particiones esperada.

5. Incompatibilidad del instalador con la controladora

Los instaladores de Mint/Ubuntu usan un kernel genérico que no incluye los módulos propietarios de HP (hpvsa). Si el instalador no carga esos módulos, el disco se monta en modo “read‑only” y la instalación escribe en la caché RAM, que se pierde al apagar.

Solución

Paso 1 – Actualizar firmware y BIOS

  1. Descarga la última versión del BIOS y del Smart Array Firmware desde el portal de soporte de HPE.
  2. Usa la herramienta hpssacli o la utilidad de actualización integrada (HPQLOADER) desde un entorno de arranque USB con Linux.
  3. Reinicia y verifica que la versión mostrada en el POST coincida con la descargada.

Paso 2 – Elegir un modo de operación único

  • Recomendación: Usa RAID siempre que la controladora sea Smart Array y necesites redundancia. Si solo vas a usar una SSD, configura la controladora en AHCI y desactiva la función de RAID en la BIOS.
  • En la BIOS, desactiva Fast Boot y Secure Boot.
  • Guarda los cambios y arranca en modo Legacy BIOS (no UEFI) para evitar conflictos de partición EFI.

Paso 3 – Preparar el disco

  1. Conecta la SSD a un puerto SATA interno que no comparta la misma cadena de datos que los discos de 3,5 “.
  2. Desde un live USB, ejecuta:
    sudo sgdisk --zap-all /dev/sdX   # elimina tablas de partición previas
    sudo wipefs -a /dev/sdX          # borra firmas de sistemas de archivos
    
  3. Crea una tabla de particiones GPT (recomendado para UEFI) o MSDOS (para legacy) según la decisión del paso anterior.
  4. Formatea con ext4 y habilita el journal:
    sudo mkfs.ext4 -F /dev/sdX1
    

Paso 4 – Instalar Linux con los módulos correctos

Durante la instalación:

  • En la pantalla de particionado elige “Instalar el gestor de arranque en /dev/sdX”.
  • Añade los paquetes hpvsa y hpsa al preseed o selecciona “Instalar software de terceros”.
  • Si el instalador no detecta la controladora, abre una terminal (Ctrl+Alt+F2) y carga manualmente:
    sudo modprobe hpvsa
    sudo modprobe hpsa
    
  • Completa la instalación y, antes de reiniciar, actualiza initramfs:
    sudo update-initramfs -u -k all
    sudo update-grub
    

Paso 5 – Desactivar el write cache problemático

Algunos SSD presentan problemas con el write cache cuando la controladora está en modo RAID. Añade al kernel la opción libata.force=noncq en /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash libata.force=noncq"

Luego ejecuta sudo update-grub.

Paso 6 – Configurar apagado limpio

En /etc/systemd/system.conf establece:

DefaultTimeoutStopSec=90s

Esto da tiempo al driver para vaciar los buffers antes de que el firmware apague el disco.

Cuándo aplicar esta solución

  • Síntomas: Primer arranque correcto, luego fsck obligatorio, discos marcados como read‑only, o GRUB que no encuentra la partición raíz.
  • Entorno: Servidores HP ProLiant Gen8/Gen9 con Smart Array, SSDs SATA o NVMe conectados a bahías internas, y distribuciones Linux basadas en Debian/Ubuntu.
  • No aplica: Cuando el servidor usa una controladora RAID externa (LSI, Dell PERC) o cuando el hardware es completamente compatible con UEFI nativo y la SSD está en una bahía de 2,5 " certificada para NVMe.

Código

# 1. Verificar versión de firmware
hpssacli ctrl all show detail | grep "Firmware Version"

# 2. Forzar modo AHCI (ejemplo para una controladora Intel)
sudo setpci -s 00:1f.2 0x92.b=0x01

# 3. Regenerar initramfs después de cambiar módulos
sudo update-initramfs -u -k all

# 4. Añadir opción de kernel para desactivar NCQ
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&libata.force=noncq /' /etc/default/grub
sudo update-grub

Verificación

  1. Boot limpio: Después del reinicio, el sistema debe iniciar sin detenerse en fsck. Ejecuta mount | grep " / "; la columna de opciones no debe contener ro.
  2. Controladora reconocida: lspci -nn | grep -i raid debe mostrar el modelo Smart Array y lsmod | grep hpvsa debe listar el módulo cargado.
  3. Integridad del disco: Ejecuta sudo smartctl -a /dev/sdX y verifica que no haya errores de transporte (Transport Error).
  4. Tiempo de apagado: Apaga con sudo shutdown -h now y comprueba en el log del BIOS que el disco se apaga después de que el OS haya enviado el comando SATA DEVSLP.

Notas adicionales

  • Si persiste el bloqueo a los 30 s, revisa el log de dmesg en busca de mensajes como ata1: exception Emask 0x0 o hpsa: device reset failed. En esos casos, la única solución práctica suele ser reemplazar la SSD por una HDD mecánico en la bahía frontal.
  • Algunas versiones de Mint utilizan un kernel 5.4 que no incluye los últimos parches de hpsa. Considera usar una versión LTS de Ubuntu o Debian con kernel 6.x para mayor compatibilidad.
  • Cuando uses una SSD en una bahía de 3,5 “, verifica que el conector SATA sea de 3 Gb/s; si la velocidad es limitada, habilita libata.force=1.5Gbps en el kernel para evitar errores de sincronización.
  • Mantén siempre una copia de seguridad de los datos críticos (fotos, mundos de Minecraft) en un NAS o en la nube; los servidores legacy son propensos a fallos de firmware que pueden dañar el FS antes de que el OS lo detecte.