Merge pull request 'Unmount leftover chroot bind mounts before zpool export' (#42) from worktree-baremetal-emergency-access into main
Check NixOS configurations / eval-hosts (push) Successful in 10m26s

Reviewed-on: #42
This commit was merged in pull request #42.
This commit is contained in:
2026-07-22 04:10:08 +00:00
+15
View File
@@ -179,6 +179,21 @@ nixos-install \
# makes boot stall waiting on the ZFS import. Exporting here (a no-op # makes boot stall waiting on the ZFS import. Exporting here (a no-op
# if the chosen host has no ZFS root, e.g. proxmox-*/linode-*) clears # if the chosen host has no ZFS root, e.g. proxmox-*/linode-*) clears
# that in-use state so the next import, from any hostid, succeeds. # that in-use state so the next import, from any hostid, succeeds.
#
# nixos-install bind-mounts /dev, /proc, /sys (and usually /run) into
# /mnt to run the target's activation script (switch-to-configuration
# boot) in a chroot, and doesn't unmount them again once it's done.
# Left in place, those nested mounts make ZFS refuse to unmount its own
# root dataset at /mnt -- confirmed live: zpool export failed with
# "cannot unmount '/mnt': pool or dataset busy", and because of this
# script's `set -e`, that killed the script before it ever reached
# reboot, silently defeating the whole point of exporting first.
for chroot_mount in dev proc sys run; do
if mountpoint -q "/mnt/${chroot_mount}"; then
umount -R "/mnt/${chroot_mount}"
fi
done
if [[ -n "$(zpool list -H -o name 2>/dev/null)" ]]; then if [[ -n "$(zpool list -H -o name 2>/dev/null)" ]]; then
echo "Exporting ZFS pool(s) before reboot..." echo "Exporting ZFS pool(s) before reboot..."
zpool export -a zpool export -a