1#!/bin/sh
2#
3# $NetBSD: fsck_root,v 1.5 2010/09/25 15:10:14 bad Exp $
4#
5
6# PROVIDE: fsck_root
7
8$_rc_subr_loaded . /etc/rc.subr
9
10name="fsck_root"
11start_cmd="fsck_root_start"
12stop_cmd=":"
13fstab_file=/etc/fstab
14
15fsck_root_start()
16{
17	if [ -e /fastboot ]; then
18		echo "Fast boot: skipping disk checks."
19		return
20	fi
21	trap : 2 		# Ignore SIGINT, SIGQUIT, so we
22	trap : 3		# enter single-user mode on failure.
23
24	# Do nothing if root file system has fs_passno=0 in /etc/fstab,
25	# or if root file system is not mentioned in /etc/fstab, or if
26	# root file system seems to be a network mount.
27	root_in_fstab=false
28	while read fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passno
29	do
30		# skip comment or blank line
31		case "${fs_spec}" in
32		\#*|'') continue ;;
33		esac
34
35		# fs_freq and fs_passno default to 0 if not specified
36		: ${fs_freq:=0} ${fs_passno:=0}
37
38		case "${fs_file},${fs_passno}" in
39		/,0)
40			echo "Not checking /: fs_passno = 0 in ${fstab_file}"
41			return
42			;;
43		/,*)
44			root_in_fstab=true
45			case "${fs_spec}" in
46			*:*)
47				echo "Not checking /: network mount"
48				return
49				;;
50			esac
51			;;
52		esac
53	done < "${fstab_file}"
54
55	if $root_in_fstab; then
56		echo "Starting root file system check:"
57		fsck $fsck_flags /
58		handle_fsck_error "$?"
59		return
60	else
61		echo "Not checking /: not listed in ${fstab_file}"
62	fi
63}
64
65load_rc_config $name
66run_rc_command "$1"
67