Recently I found that some of my VPS-s fsck is not running (what is causing failed mount root in case of hard reset). After troubleshooting, I was able to find a root cause - it was kern.boottrace.enabled=1 in the /boot/loader.conf. This is caused by missing "$autoboot" variable in the /etc/rc.d/fsck when that script is running, so it does not run correctly. To reproduce on the clean system: 1. Add kern.boottrace.enabled=1 to the /boot/loader.conf 2. Add background_fsck="NO" to the /etc/rc.conf 3. Reset system and check logs. Fsck will not be started.
Okay, so the problem is that "$autoboot" is used by the fsck script but not exported, so when the boot trace is running, the script does not work. Without a backtrace, export is not needed as the script is sourced.
P.S. Looks like fsck is only rc.d script depending on $autoboot. Not sure if its better to export it or change fsck to no use it...
Proposed fix is at https://github.com/freebsd/freebsd-src/pull/1261
So part of the problem is that the boottrace stuff doesn't export any of the variables. What about _boot or rc_fast? It looks like rc_fast is reconstructed whenver _boot is fast* in rc.subr and only set when _boot has been set to 'faststart'. The fix is a bit of a hack.