microvm.mem = 2048 deterministically corrupts the guest initrd at the current pins #7
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/vm#7
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A microvm guest built by this framework cannot boot with
microvm.mem = 2048at the current pins: the kernel's initramfs decompression corrupts the initrd's tail at exactly that memory size, the guest strands in stage 1, and the host has no signal that anything is wrong. The value is an entirely plausible production sizing, so this is a landmine for any deployment that picks it.Symptom
First executed boot of an archetypes-built dev microvm guest (public dev machine definition with its inventory runtime flipped to
microvm), wired into the real host module and launcher. The guest console shows:Stage 1 then hangs: the partially extracted initramfs lacks the erofs/virtio modules, so the store never mounts and the boot never reaches multi-user.
Evidence
Isolated by rerunning the identical generated runner directly under single-level KVM, varying only
-m:Components at the failing measurement: QEMU 10.1.5 (
qemu-host-cpu-only-for-vm-tests), machine typemicrovmwith its SeaBIOS-variant loader, a 22 MiB zstd-compressed initrd, kernel 6.12.93, microvm.nix39a499ab, nixpkgsb6018f87, vm8a1eb0f, archetypes8aa0fce. At these pins a guest memory size of exactly 2048 MiB places the initrd where kernel decompression overwrites its tail.The host cannot detect it
From the host everything looks healthy:
microvm@<machine>.serviceisactiveand the QMP socket exists, because QEMU itself is fine — only the guest is stranded. The host module's existing liveness signal (wait-for-QMP, as used by the isolation check's boot wait) is provably insufficient as a health signal for this failure class. A deploy-time "guest reached multi-user" health check is the missing piece; until one exists, deployments can only avoid the poison value.Refs allod/strategy#20