How about adding journaling to the file system? -------- Original Message -------- On Sunday, 02/22/26 at 22:13 Kenneth Gober <[email protected]> wrote:
> On Wed, Jul 24, 2024 at 1:52 PM <[email protected]> wrote: > >> Thanks Stuart for all these thoughts. That's a lot of great ideas. >> >> Let me try to clarify a few things: >> >> - change `do_fsck` to `do_fsck -y` >> --------------------------------------------- >> I assume you mean Line 410. That seems like a great idea. >> Do I understand correctly that the normal behaviour for this `do_fsck` is to >> run the check, and mark filesystems dirty, and then enter single-user mode? >> Whereas if I replace it with `do_fsck -y `, the filesystems will not be >> marked dirty, and it will not enter singe user mode? > > Apologies for reviving this old thread, but I had a recent experience with a > remote router that failed to come up, presumably after having local power > issues. This router was set up to use fsck -p -y and I learned the hard way > that when using -p, there are some problems that cause fsck to exit without > giving you the option to answer yes. Instead, you just get "UNEXPECTED > INCONSISTENCY; RUN fsck_ffs MANUALLY." followed a bit later by "Automatic > file system check failed; help!". "do_fsck -y" will not help you here. > > Naturally, in this situation you should of course run fsck manually and > decide what to do based on what fsck reports. Just blindly running fsck -y is > dangerous and can make a simple issue much worse. But sometimes when a device > is far away, you can't easily get there yourself, and you don't have someone > on-site who can address it, an alternative is needed. > > Having chosen to accept this risk, I changed /etc/rc, modifying the do_fsck > function as follows: > old: fsck -p "$@" > new: fsck -p "$@" || { for i in a d e f g h; do fsck -y \/dev\/sd0$i; done; > fsck -p "$@"; } > > The idea is that if fsck -p fails, I run fsck -y for each file system where I > think it's safe to do so unattended. Then I try the fsck -p command again to > give it a second chance to succeed (if it fails twice then the old behavior > remains). In this example, the file systems that I have chosen to > auto-correct are sd0a, sd0d, sd0e, sd0f, sd0g and sd0h. You may choose to > auto-correct a different set. > > I tested this by power-cycling a test router while reordering of libc was in > progress. This would ordinarily have caused the router to come up single-user > with the "Automatic file system check failed; help!" message, but with the > above change the router was able to boot normally (albeit with a ton of > console spam regarding repairs for files in the /usr/share/relink tree): > > root on sd0a (5e776adc85699112.a) swap on sd0b dump on sd0b > WARNING: / was not properly unmounted > Automatic boot in progress: starting file system checks. > /dev/sd0a (5e776adc85699112.a): INCORRECT BLOCK COUNT I=32837 (4 should be 0) > (CORRECTED) > /dev/sd0a (5e776adc85699112.a): FREE BLK COUNT(S) WRONG IN SUPERBLK (SALVAGED) > /dev/sd0a (5e776adc85699112.a): SUMMARY INFORMATION BAD (SALVAGED) > /dev/sd0a (5e776adc85699112.a): BLK(S) MISSING IN BIT MAPS (SALVAGED) > /dev/sd0a (5e776adc85699112.a): 1891 files, 49715 used, 202132 free (116 > frags, 25252 blocks, 0.0% fragmentation) > /dev/sd0a (5e776adc85699112.a): MARKING FILE SYSTEM CLEAN > /dev/sd0d (5e776adc85699112.d): INCORRECT BLOCK COUNT I=54794 (704 should be > 416) (CORRECTED) > /dev/sd0d (5e776adc85699112.d): UNALLOCATED I=54976 OWNER=root MODE=100644 > /dev/sd0d: SIZE=2096 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/connect.so > > /dev/sd0d (5e776adc85699112.d): UNEXPECTED INCONSISTENCY; RUN fsck_ffs > MANUALLY. > /dev/sd0e (5e776adc85699112.e): 78 files, 1779 used, 252068 free (20 frags, > 31506 blocks, 0.0% fragmentation) > /dev/sd0e (5e776adc85699112.e): MARKING FILE SYSTEM CLEAN > /dev/sd0f (5e776adc85699112.f): INCORRECT BLOCK COUNT I=49194 (128 should be > 0) (CORRECTED) > /dev/sd0f (5e776adc85699112.f): FREE BLK COUNT(S) WRONG IN SUPERBLK (SALVAGED) > /dev/sd0f (5e776adc85699112.f): SUMMARY INFORMATION BAD (SALVAGED) > /dev/sd0f (5e776adc85699112.f): BLK(S) MISSING IN BIT MAPS (SALVAGED) > /dev/sd0f (5e776adc85699112.f): 423 files, 15221 used, 238626 free (90 frags, > 29817 blocks, 0.0% fragmentation) > /dev/sd0f (5e776adc85699112.f): MARKING FILE SYSTEM CLEAN > /dev/sd0g (5e776adc85699112.g): INCORRECT BLOCK COUNT I=3 (4 should be 0) > (CORRECTED) > /dev/sd0g (5e776adc85699112.g): UNREF FILE I=3 OWNER=root MODE=100600 > /dev/sd0g: SIZE=0 MTIME=Feb 22 20:15 2026 (CLEARED) > /dev/sd0g (5e776adc85699112.g): 8 files, 6 used, 253841 free (33 frags, 31726 > blocks, 0.0% fragmentation) > /dev/sd0g (5e776adc85699112.g): MARKING FILE SYSTEM CLEAN > /dev/sd0h (5e776adc85699112.h): 12 files, 11 used, 1520716 free (28 frags, > 190086 blocks, 0.0% fragmentation) > /dev/sd0h (5e776adc85699112.h): MARKING FILE SYSTEM CLEAN > THE FOLLOWING FILE SYSTEM HAD AN UNEXPECTED INCONSISTENCY: > ffs: 5e776adc85699112.d (/usr) > ** /dev/rsd0a > ** File system is clean; not checking > ** /dev/rsd0d > ** Last Mounted on /usr > ** Phase 1 - Check Blocks and Sizes > ** Phase 2 - Check Pathnames > UNALLOCATED I=54976 OWNER=root MODE=100644 > SIZE=2096 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/connect.so > > REMOVE? yes > > UNALLOCATED I=54977 OWNER=root MODE=100644 > SIZE=2080 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/fcntl.so > > REMOVE? yes > > UNALLOCATED I=54978 OWNER=root MODE=100644 > SIZE=2080 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/fsync.so > > REMOVE? yes > > UNALLOCATED I=54979 OWNER=root MODE=100644 > SIZE=2088 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/msgrcv.so > > REMOVE? yes > > UNALLOCATED I=54980 OWNER=root MODE=100644 > SIZE=2088 MTIME=Feb 22 20:15 2026 > FILE=/share/relink/_rebuild.GJZYRqDFYfz5/msgsnd.so > > REMOVE? yes > > (many more lines of fsck output removed, until eventually fsck -p runs again) > > /dev/sd0a (5e776adc85699112.a): file system is clean; not checking > /dev/sd0d (5e776adc85699112.d): file system is clean; not checking > /dev/sd0e (5e776adc85699112.e): file system is clean; not checking > /dev/sd0f (5e776adc85699112.f): file system is clean; not checking > /dev/sd0g (5e776adc85699112.g): file system is clean; not checking > /dev/sd0h (5e776adc85699112.h): file system is clean; not checking > pf enabled > starting network > reordering: ld.so libc libcrypto sshd sshd-session sshd-auth ssh-agent. > starting early daemons: syslogd pflogd ntpd. > starting RPC daemons:. > savecore: /dev/sd0b: Device not configured > checking quotas: done. > clearing /tmp > kern.securelevel: 0 -> 1 > creating runtime link editor directory cache. > preserving editor files. > starting network daemons: sshd smtpd sndiod. > starting local daemons: cron. > Sun Feb 22 15:16:34 EST 2026 > > OpenBSD/amd64 (apu2d4.utility.internal) (tty00) > > login:

