Running at rev `8803834036205cf2cac5cfca98bb3875812c897a`.
What happens
A box created with an 8 GiB disk dies the instant its guest has written 1 GiB. The client sees:
Attach stream error: status: Unknown, message: "h2 protocol error: error reading a body from connection"
and the exec wait RPC reports `exit_code: -1`. Both are the client watching the whole microVM disappear, not a stream fault.
Root cause
The VM monitor is jailed behind `RLIMIT_FSIZE` with a default ceiling of 1 GiB, while the same options struct accepts a much larger `disk_size_gb` backed by a single growing qcow2 file on the host. When the qcow2 crosses the ceiling the monitor takes `SIGXFSZ`, and the shim installs no handler for it, so the process dies leaving no exit file and no crash record.
Evidence
- `disk.qcow2` stops at exactly `1073741824` bytes, and stops at the same byte with `disk_size_gb: 32`.
- Replacing the workload (an npm install) with plain `dd` reproduces it identically, so it is write volume, not the tool.
- 20 seconds after the death every further exec returns `Connection refused` — the VM is gone.
- The console log ends mid-normal-operation: no OOM kill, no panic, no kernel oops.
- Disk and memory were both healthy 5 s before death (`2371 used / 5644 free` MiB disk, `288 used / 1698 avail` MiB memory).
Why it matters
Any guest workload that writes more than a gibibyte hits this, which is ordinary for a package install or a build. Because the monitor leaves no record, it surfaces as an unrelated-looking transport error, so the time to diagnose is long.
Suggested fixes
- Derive the file ceiling from the disk size the caller asked for, rather than a fixed default that can contradict it.
- Handle `SIGXFSZ` in the shim and write a crash record, so the failure names itself instead of appearing as an h2 error.
- Consider whether `exit_code: -1` should be distinguishable from a real exit status, since it currently means "no exit status was ever observed".
We worked around 1 by sizing the ceiling from the requested disk plus headroom on our side, but the default contradicting the accepted disk size looks worth fixing upstream.
Running at rev `8803834036205cf2cac5cfca98bb3875812c897a`.
What happens
A box created with an 8 GiB disk dies the instant its guest has written 1 GiB. The client sees:
and the exec wait RPC reports `exit_code: -1`. Both are the client watching the whole microVM disappear, not a stream fault.
Root cause
The VM monitor is jailed behind `RLIMIT_FSIZE` with a default ceiling of 1 GiB, while the same options struct accepts a much larger `disk_size_gb` backed by a single growing qcow2 file on the host. When the qcow2 crosses the ceiling the monitor takes `SIGXFSZ`, and the shim installs no handler for it, so the process dies leaving no exit file and no crash record.
Evidence
Why it matters
Any guest workload that writes more than a gibibyte hits this, which is ordinary for a package install or a build. Because the monitor leaves no record, it surfaces as an unrelated-looking transport error, so the time to diagnose is long.
Suggested fixes
We worked around 1 by sizing the ceiling from the requested disk plus headroom on our side, but the default contradicting the accepted disk size looks worth fixing upstream.