install-image: el wrapper PID1 montaba /store y el diario en `vda` CABLEADO — en hcloud es `sda`
El wrapper que `install-image.sh` escribe como `/sbin/init` monta las dos particiones dedicadas antes de hacer `exec` del init real, y las nombraba `/dev/vda3` y `/dev/vda4`. Eso vale sólo donde el disco es virtio-blk. **En una caja Hetzner Cloud la controladora es virtio-SCSI y el disco es `sda`** (medido: el driver de `sda` es `sd` y `virtio_scsi` está cargado), así que los dos montajes fallaban. Y fallaban del peor modo posible: **el sistema arranca igual**. Sólo que `hammerd` —que la semilla de arje lanza con `--store /store --journal /var/lib/hammer/journal`— queda sin store y sin diario, con dos líneas de aviso perdidas en el arranque. Es exactamente la regla 3 de CLAUDE.md: un ausente falla ruidosamente, un vacío llega hasta el final diciendo que todo fue bien. Ahora el disco se DERIVA de dónde está montada la raíz (`/proc/mounts`), que es la única fuente que no depende ni del nombre del dispositivo ni de udev. Probado en los dos sentidos con /proc/mounts sintéticos: `/dev/sda2` → `/dev/sda3`, `/dev/vda2` → `/dev/vda3`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RomoxEGZUhaT4pob1QSX5x
Semantic delta
No definition changed: this change is text, documentation or data.
1 files · +11 −3
- scripts/install-image.sh +11 −3
diff --git a/scripts/install-image.sh b/scripts/install-image.sh
index 711be9c9..bb3798b7 100755
--- a/scripts/install-image.sh
+++ b/scripts/install-image.sh
@@ -100,9 +100,17 @@ CFG
rm -f "$ROOT_TREE/sbin/init"
cat > "$ROOT_TREE/sbin/init" <<'INIT'
#!/bin/sh
-# Wrapper PID1 (Etapa E/B3): el kernel monta vda2 como /; montamos las particiones dedicadas.
-/bin/busybox mount -t ext4 /dev/vda3 /store || echo "init: no pude montar /store (/dev/vda3)"
-/bin/busybox mount -t ext4 /dev/vda4 /var/lib/hammer || echo "init: no pude montar /var/lib/hammer (/dev/vda4)"
+# Wrapper PID1 (Etapa E/B3): el kernel montó la raíz; montamos las particiones dedicadas.
+#
+# El disco NO se cablea. Decía `/dev/vda3` y `/dev/vda4`, y eso vale sólo donde el disco es virtio-blk:
+# en una caja Hetzner Cloud la controladora es virtio-SCSI y el disco es `sda`, así que los dos
+# montajes fallaban —el sistema arrancaba igual, pero hammerd quedaba SIN /store y SIN diario, que es
+# el modo de fallo que llega hasta el final diciendo que todo fue bien—. Se deriva de dónde está
+# montada la raíz, que es la única fuente que no depende del nombre del dispositivo ni de udev.
+_root=$(/bin/busybox awk '$2=="/" {print $1; exit}' /proc/mounts)
+_disk=${_root%[0-9]}
+/bin/busybox mount -t ext4 "${_disk}3" /store || echo "init: no pude montar /store (${_disk}3)"
+/bin/busybox mount -t ext4 "${_disk}4" /var/lib/hammer || echo "init: no pude montar /var/lib/hammer (${_disk}4)"
exec /usr/bin/arje-zero
INIT
chmod +x "$ROOT_TREE/sbin/init"