vhdx exploration
Decisionβ
root.vhdx replaces the raw root.disk container. We are deliberately
skipping fixed VHD: VHDX provides the recovery UX we want (native Windows
attach) plus an allocation log for metadata crash resilience.
Windows creates a dynamic VHDX with DiskPart. The .vhdx extension makes
the format explicit, and VHDX allocates sparsely on NTFS without a custom
footer or raw-file heuristic.
Linux attachment modelβ
VHDX is not a raw block file. Both Linux paths attach it format-aware through QEMU NBD:
Windows NTFS β C:\wootc\disks\root.vhdx
β
qemu-nbd --format=vhdx
β
/dev/nbd0p* β fisherman / Phase-2 root
The deployer includes qemu-nbd and nbd.ko. During deployment it copies the
binary into the target's 99wootc-boot dracut module; that module inserts the
NBD driver and adds the binary to the Phase-2 initramfs. The EFI path is
unchanged: the kernel and initramfs remain on the ESP, and the initramfs makes
the VHDX-backed root UUID appear before sysroot.mount runs.
Required validationβ
- Windows OEM:
Mount-DiskImageattachesroot.vhdx, then dismounts it. - Deployer:
qemu-nbd --format=vhdxexposes the expected partitions and fisherman completes. - Phase 2: the target initramfs contains
qemu-nbdandnbd.ko, then boots the VHDX root through/dev/nbd0. - Phase 1 launcher work must use QEMU
format=vhdx, notformat=raw. - Reboot from Phase 2 returns to Windows as before.
Open riskβ
The target initramfs must include all QEMU block-driver dependencies required
by qemu-nbd; the first E2E run must inspect lsinitrd and prove that a VHDX
can be opened after the target dracut regeneration.