Problema
En servidores o estaciones de trabajo basados en plataformas Haswell o anteriores, la BIOS suele carecer de soporte nativo para arranque desde dispositivos NVMe. Cuando el objetivo es reemplazar un SSD SATA por un NVMe de mayor velocidad, el desafío no es solo la transferencia de datos, sino garantizar que el firmware pueda reconocer el nuevo disco durante el proceso de arranque. El patrón típico incluye:
- Un sistema operativo instalado y funcionando en un SSD SATA.
- Necesidad de migrar a un NVMe sin reinstalar todo el stack.
- BIOS que solo permite arrancar desde dispositivos legacy (USB, HDD, SATA).
- Riesgo de conflictos de UUID y alineación de particiones al clonar directamente.
El objetivo es lograr una migración “sin riesgos” que pueda repetirse en cualquier servidor legacy con Debian, Ubuntu o derivados.
Causa
-
Falta de controlador NVMe en la BIOS
Las placas madre de la era Haswell no incluyen el driver necesario para exponer el controlador NVMe al POST. Sin él, el disco no aparece en la lista de arranque. -
Incompatibilidad de claves de arranque UEFI
Incluso si el firmware soporta UEFI, el cargador de arranque (GRUB) necesita un driver NVMe para leer elvmlinuzy elinitrddesde el nuevo disco. -
Clonación bloque a bloque sin considerar alineación
Los SSD SATA suelen usar un offset de 1 MiB para alineación; los NVMe pueden requerir bloques de 4 KiB. Un clon directo puede dejar particiones ligeramente desalineadas, impactando rendimiento. -
UUID duplicados
Copiar una tabla de particiones idéntica genera los mismos UUID, lo que confundefstabysystemdal montar los sistemas de archivos.
Solución
Una estrategia reutilizable combina tres componentes:
-
Cargador de arranque externo con driver NVMe
Utilizar Clover EFI (o cualquier loader UEFI que permita cargar drivers personalizados) desde una USB permanente. CopiarNvmExpressDxe.efial directorioEFI/CLOVER/drivers/UEFI. Esto permite que el firmware “vea” el NVMe antes de pasar el control a GRUB. -
Clonación cuidadosa del disco
- Usa Clonezilla en modo device‑to‑device para copiar el SSD SATA al NVMe.
- Después de la clonación, arranca en modo live (con Clover) y corrige la alineación con
partedogdisksi es necesario. - Genera nuevos UUID con
blkid -s UUID -o value /dev/nvme0n1pXy actualiza/etc/fstabyinitramfsconsedosed -i.
-
Reinstalación del cargador de arranque en el NVMe
Desde el entorno Debian recién arrancado, reinstala GRUB apuntando al disco NVMe y actualiza la configuración.
Pasos detallados
-
Preparar la USB con Clover
- Formatea una memoria USB en GPT, crea la partición EFI (300 MiB, FAT32).
- Copia el binario de Clover y el driver
NvmExpressDxe.efi. - Configura
config.plistpara que la opción “InjectDrivers” esté habilitada.
-
Clonar el SSD
- Inserta la tarjeta PCIe‑to‑NVMe y conecta el NVMe.
- Arranca desde la USB de Clonezilla (creada con Rufus en modo UEFI).
- Selecciona device‑device y elige el SATA como origen y el NVMe como destino.
- Espera a que finalice; la clonación bloque a bloque preserva el layout de particiones.
-
Ajustar alineación y UUID
- Arranca nuevamente con Clover y abre una terminal.
- Ejecuta
parted /dev/nvme0n1 unit mib printy verifica que todas las particiones empiecen en múltiplos de 1 MiB. - Si alguna partición está desalineada, usa
partedpara moverla o recrearla. - Cambia los UUID con
tune2fs -U random /dev/nvme0n1pX(para ext4) o el comando equivalente para XFS/Btrfs. - Edita
/mnt/etc/fstab(montado desde el live) y reemplaza los antiguos UUID por los nuevos.
-
Instalar GRUB en el NVMe
- Monta el sistema de archivos raíz del NVMe en
/mnty enlaza los pseudo‑sistemas:mount /dev/nvme0n1p2 /mnt # raíz mount /dev/nvme0n1p1 /mnt/boot/efi for i in /dev /proc /sys /run; do mount --bind $i /mnt$i; done chroot /mnt - Ejecuta los comandos de actualización (ver bloque de código).
- Sal del
chroot, desmonta y apaga.
- Monta el sistema de archivos raíz del NVMe en
-
Configurar el orden de arranque
- Entra al BIOS, desactiva el arranque desde el SATA y coloca la USB con Clover como primera opción.
- Clover detectará el NVMe y lanzará GRUB, que a su vez iniciará Debian desde el nuevo disco.
Cuándo aplicar esta solución
- Plataformas legacy con BIOS que no listan NVMe como dispositivo de arranque.
- Migraciones de datos donde se desea conservar la configuración del sistema (usuarios, contenedores Docker, etc.) sin reinstalar.
- Entornos de producción donde el tiempo de inactividad debe ser mínimo y la reversión (mantener el SSD SATA como backup) es deseable.
No aplicar si:
- La placa madre ya soporta NVMe nativamente (el proceso se vuelve innecesario).
- Se prefiere una instalación limpia (por ejemplo, cambios de versión mayor del SO).
- El servidor no permite el uso de tarjetas PCIe‑to‑NVMe por limitaciones de espacio o energía.
Código
# Dentro del chroot del NVMe
sudo update-grub
sudo grub-install /dev/nvme0n1
Verificación
-
Arranque exitoso
- Reinicia el servidor con la USB Clover conectada.
- Verifica que el menú de Clover muestre el NVMe y que GRUB arranque Debian sin mensajes de error.
-
Comprobación de UUID
- Ejecuta
lsblk -fy confirma que los UUID mostrados coinciden con los de/etc/fstab.
- Ejecuta
-
Rendimiento del NVMe
- Usa
hdparm -tT /dev/nvme0n1onvme benchpara validar velocidades de lectura/escritura. - Observa que los tiempos de arranque son significativamente menores que con el SSD SATA.
- Usa
-
Persistencia del driver
- Desconecta la USB Clover y vuelve a conectarla en otro puerto; el sistema debe seguir arrancando sin problemas.
- Simula un corte de energía (reset) y verifica que el arranque se complete sin corrupción del sistema de archivos.
Notas adicionales
- Thermal considerations: Los adaptadores PCIe‑to‑NVMe pueden calentarse bajo carga sostenida. Asegúrate de que el chasis tenga flujo de aire suficiente o considera un disipador pasivo para el módulo NVMe.
- Backup antes de clonar: Aunque el proceso es reversible, crear una imagen completa del SSD SATA (por ejemplo con
dd if=/dev/sda of=/mnt/backup.img) brinda una capa extra de seguridad. - Actualizaciones de firmware: Algunas placas HP EliteDesk 800 G1 reciben actualizaciones de BIOS que añaden soporte NVMe limitado. Revisa el sitio de soporte antes de invertir en un adaptador.
- Clover vs. rEFInd: Si prefieres una alternativa más ligera, rEFInd también permite cargar
NvmExpressDxe.efi. La configuración es similar, pero la comunidad de Clover ofrece más guías para hardware HP legacy. - Clonación parcial: Si solo necesitas migrar la partición raíz, puedes usar
rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mntdespués de crear una tabla de particiones alineada en el NVMe. Esto evita problemas de alineación inherentes a una copia bloque a bloque.