# Test Case: Primary Plus One mkfs Blob Provider **Test ID**: TC099-multidev-2devices **Category**: Multi-Device **Priority**: Critical ## Objective Verify the common two-provider layout emitted directly by erofs-utils 1.8.6, including statfs aggregation and fail-closed omission of the blob provider. ## Positive procedure ```sh I=/root/repo22-g6/images S=/root/repo22-g6/sources/chunk mkdir -p /mnt/g6 kldload /root/repo22-g6/erofs.ko mdconfig -a -t vnode -f "$I/mkfs-blob-primary.erofs" -u 90 mdconfig -a -t vnode -f "$I/mkfs-blob-slot1.blob" -u 91 mount -t erofs -o ro -o device.1=/dev/md91 /dev/md90 /mnt/g6 mount -p | grep '/mnt/g6' df -k /mnt/g6 sha256 "$S/tc006.bin" /mnt/g6/tc006.bin cmp "$S/tc006.bin" /mnt/g6/tc006.bin dd if="$S/tc006.bin" of=/tmp/tc099.src bs=1 skip=28672 count=8192 2>/dev/null dd if=/mnt/g6/tc006.bin of=/tmp/tc099.mnt bs=1 skip=28672 count=8192 2>/dev/null cmp /tmp/tc099.src /tmp/tc099.mnt ``` The manifest reports primary blocks 1 and slot blocks 224, so `df -k` must report 900 one-kilobyte blocks. Metadata comes from md90; all file bytes come from md91. Unmount and detach both providers before the negative step. ## Missing blob option ```sh umount /mnt/g6 mdconfig -d -u 91 mdconfig -d -u 90 mdconfig -a -t vnode -f "$I/mkfs-blob-primary.erofs" -u 90 truss -f -o /tmp/tc099-enxio.truss mount -t erofs -o ro \ /dev/md90 /mnt/g6 tail -20 /tmp/tc099-enxio.truss ``` Mount must return exactly `ENXIO`: the 4096-byte split primary is shorter than the declared flatdev range. ## Cleanup and zero-state check ```sh mdconfig -d -u 90 kldunload erofs rm -f /tmp/tc099.src /tmp/tc099.mnt mount -p | awk '$3 == "erofs" { print }' mdconfig -l kldstat -n erofs 2>/dev/null || true sysctl -n kern.geom.conftxt | grep -E 'md9[01]|erofs' || true ``` All four final outputs must be empty.