1 1.1 joerg #!/bin/sh 2 1.1 joerg # 3 1.2 apb # $NetBSD: fsck_root,v 1.2 2009/04/28 13:08:51 apb Exp $ 4 1.1 joerg # 5 1.1 joerg 6 1.1 joerg # PROVIDE: fsck_root 7 1.1 joerg 8 1.1 joerg $_rc_subr_loaded . /etc/rc.subr 9 1.1 joerg 10 1.1 joerg name="fsck_root" 11 1.1 joerg start_cmd="fsck_root_start" 12 1.1 joerg stop_cmd=":" 13 1.2 apb fstab_file=/etc/fstab 14 1.1 joerg 15 1.1 joerg fsck_root_start() 16 1.1 joerg { 17 1.1 joerg if [ -e /fastboot ]; then 18 1.1 joerg echo "Fast boot: skipping disk checks." 19 1.1 joerg return 20 1.1 joerg fi 21 1.1 joerg trap : 2 # Ignore SIGINT, SIGQUIT, so we 22 1.1 joerg trap : 3 # enter single-user mode on failure. 23 1.1 joerg 24 1.2 apb # Do nothing if root file system has fs_passno=0 in /etc/fstab. 25 1.2 apb while read fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passno 26 1.2 apb do 27 1.2 apb case "${fs_spec}:${fs_file}:${fs_passno}" in 28 1.2 apb \#*|'':*) 29 1.2 apb continue # skip comment or blank line 30 1.2 apb ;; 31 1.2 apb *:/:0) 32 1.2 apb echo "Not checking /: fs_passno = 0 in ${fstab_file}" 33 1.2 apb return 34 1.2 apb ;; 35 1.2 apb *:/:*) break 36 1.2 apb ;; 37 1.2 apb esac 38 1.2 apb done <"${fstab_file}" 39 1.2 apb 40 1.1 joerg echo "Starting root file system check:" 41 1.1 joerg fsck $fsck_flags / 42 1.1 joerg local fsck_error="$?" 43 1.1 joerg case $fsck_error in 44 1.1 joerg 0) # OK 45 1.1 joerg return 46 1.1 joerg ;; 47 1.1 joerg 2) # Needs re-run, still fs errors 48 1.1 joerg echo "file system still has errors; re-run fsck manually!" 49 1.1 joerg ;; 50 1.1 joerg 4) # Root modified 51 1.1 joerg echo "Root filesystem was modified, rebooting ..." 52 1.1 joerg reboot 53 1.1 joerg echo "Reboot failed; help!" 54 1.1 joerg ;; 55 1.1 joerg 8) # Check failed 56 1.1 joerg echo "Automatic file system check failed; help!" 57 1.1 joerg ;; 58 1.1 joerg 12) # Got signal 59 1.1 joerg echo "Boot interrupted." 60 1.1 joerg ;; 61 1.1 joerg *) 62 1.1 joerg echo "Unknown error $fsck_error; help!" 63 1.1 joerg ;; 64 1.1 joerg esac 65 1.1 joerg stop_boot 66 1.1 joerg } 67 1.1 joerg 68 1.1 joerg load_rc_config $name 69 1.1 joerg run_rc_command "$1" 70