Monday, February 23, 2026

Re: avoid single-user mode boot

How about adding journaling to the file system?


-------- Original Message --------
On Sunday, 02/22/26 at 22:13 Kenneth Gober <kgober@gmail.com> wrote:
On Wed, Jul 24, 2024 at 1:52 PM <04-psyche.totter@icloud.com> 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:

No comments:

Post a Comment