Après une journée à m’acharner sur chain.c32 du flash interne d’un NAS Netgear (échec silencieux peu importe l’argument : hd1, boot, mbr=1 hd1…), j’arrête de lutter. Solution : abandonner le boot via flash interne et bascule sur clé USB en port frontal via « Boot Override ».
Mais je ne veux pas tout Debian sur la clé. Je veux :
- SATA 1.8 TB du NAS comme rootfs principal
- Clé USB = bootstrap uniquement (GRUB + kernel + initrd)
Architecture finale
BIOS NAS → (Backup 15s + clé en frontal) → GRUB sur clé (sda1)
→ Kernel + initrd (root=UUID=<SATA> rootdelay=15)
→ Initrd assemble md0 du SATA via mdadm → pivot_root
→ / sur md125 (sda2 SATA, RAID1)
→ /srv/data sur md127 (sda4, 1.8 TB)
Clé USB (sdc1) non montée mais branchée pour permettre le boot.
Étapes critiques
Préparer la clé avec GRUB i386-pc
Une clé Debian « live » installée via QEMU UEFI n’est pas bootable BIOS legacy. Installer explicitement :
grub-install --target=i386-pc --modules="part_msdos ext2 biosdisk" --recheck /dev/sda
update-grub
Adapter le baud rate au matériel
NAS avec FTDI 9600 baud (et non 115200 par défaut Debian) :
# /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,9600n8 net.ifnames=0"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0"
Sans ça : GRUB charge mais reste muet. On croit que ça plante alors que c’est un mismatch baudrate.
Pointer le rootfs vers le SATA
GRUB_CMDLINE_LINUX="... root=UUID=a4aae2bb-... rootdelay=15"
root=UUID=...: kernel monte le SATA, pas la clé.rootdelay=15: laisse 15s à mdadm pour assembler le RAID dégradé. Sans ça : kernel panic « Cannot find root device ».
update-grub ajoute aussi root=UUID=$(rootfs_actuel) automatiquement → deux root= dans la cmdline. Le dernier gagne (parser kernel), ça marche, c’est juste sale.
mdadm dans l’initrd
apt install mdadm # Debian boot key default n'a pas mdadm
update-initramfs -u
lsinitramfs /boot/initrd.img-* | grep mdadm
Sans mdadm dans initrd, le rootdelay ne sert à rien : pas d’assemblage RAID donc pas de root.
Validation
$ ssh monuser@192.168.1.201 "df / ; cat /proc/mdstat"
/dev/md125 7.8G 989M 6.4G 14% /
md125 : active raid1 sda2[1] ← root
md127 : active raid1 sda4[1] ← /srv/data 1.8 TB
Le hostkey SSH a changé vs boot précédent (où le rootfs était la clé). C’est la preuve que le kernel a switché vers le SATA.
Lessons learned
- Clé USB 1 Go suffit : GRUB + kernel + initrd = ~50 Mo.
rootdelay=Nobligatoire pour assembler du RAID dégradé en initrd.net.ifnames=0force le namingethN, pratique sans connaître l’interface.- Hostkey SSH changé = preuve qu’on a switché d’OS, pas du cache.