confusion about root partition causes panic during startup
Date: Thu, 20 Jul 2023 19:27:39 UTC
I installed an additional NVME drive on a system, and then booted. It turns out that the new drive became nda0, renumbering the other drives. The loader found the correct partition to boot (the only choice), and loaded the kernel correctly. However, /etc/fstab still had the old name (nvd1p2), which is now drive 2. I expected it to drop into single user, but instead the system panicked in vfs_mountroot_shuffle trying to switch root devices (see below). It doesn't seem that having the wrong root device in /etc/fstab should cause a panic; it makes it harder to patch the system. I was unable to get the system to boot using boot-to-single-user or setting currdev, but I managed to remember doing "boot -a" from a loader prompt to get the system to ask the root device before mounting it. I can easily reproduce this to test. Probably the NDFREE_PNBUF() shouldn't happen if namei() returned an error. Mike Trying to mount root from ufs:/dev/nvd1p2 [rw]... WARNING: WITNESS option enabled, expect reduced performance. mountroot: unable to remount devfs under /dev (error 2) panic: Assertion _ndp->ni_cnd.cn_pnbuf != NULL failed at ../../../kern/vfs_mountroot.c:416 cpuid = 19 time = 11 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe006d3bac40 vpanic() at vpanic+0x149/frame 0xfffffe006d3bac90 panic() at panic+0x43/frame 0xfffffe006d3bacf0 vfs_mountroot() at vfs_mountroot+0x1bf7/frame 0xfffffe006d3bae60 start_init() at start_init+0x23/frame 0xfffffe006d3baef0 fork_exit() at fork_exit+0x82/frame 0xfffffe006d3baf30 fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe006d3baf30 --- trap 0x5c035c02, rip = 0x680c680c680c680c, rsp = 0x1b6b1f6b1b6b1b6b, rbp = 0x4eb54eb54eb54eb5 --- KDB: enter: panic [ thread pid 1 tid 100002 ] Stopped at kdb_enter+0x32: movq $0,0xde7643(%rip)