fsck revision 197947
178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $FreeBSD: head/etc/rc.d/fsck 197947 2009-10-10 22:17:03Z dougb $
478344Sobrien#
578344Sobrien
678344Sobrien# PROVIDE: fsck
7142962Sbrooks# REQUIRE: localswap
878344Sobrien# KEYWORD: nojail
978344Sobrien
1078344Sobrien. /etc/rc.subr
1178344Sobrien
12230099Sdougbname="fsck"
1378344Sobrienstart_cmd="fsck_start"
14151809Syarstop_cmd=":"
1578344Sobrien
1678344Sobrienfsck_start()
1778344Sobrien{
1878344Sobrien	if [ "$autoboot" = no ]; then
1978344Sobrien		echo "Fast boot: skipping disk checks."
20197947Sdougb	elif [ ! -r /etc/fstab ]; then
21142962Sbrooks		echo "Warning! No /etc/fstab: skipping disk checks."
22197947Sdougb	elif [ "$autoboot" = yes ]; then
2378344Sobrien					# During fsck ignore SIGQUIT
2478344Sobrien		trap : 3
2578344Sobrien
2678344Sobrien		check_startmsgs && echo "Starting file system checks:"
27		if checkyesno background_fsck; then
28			fsck -F -p
29		else
30			fsck -p
31		fi
32
33		case $? in
34		0)
35			;;
36		2)
37			stop_boot
38			;;
39		4)
40			echo "Rebooting..."
41			reboot
42			echo "Reboot failed; help!"
43			stop_boot
44			;;
45		8)
46			if checkyesno fsck_y_enable; then
47				echo "File system preen failed, trying fsck -y ${fsck_y_flags}"
48				fsck -y ${fsck_y_flags}
49				case $? in
50				0)
51					;;
52				*)
53				echo "Automatic file system check failed; help!"
54					stop_boot
55					;;
56				esac
57			else
58				echo "Automatic file system check failed; help!"
59				stop_boot
60			fi
61			;;
62		12)
63			echo "Boot interrupted."
64			stop_boot
65			;;
66		130)
67			stop_boot
68			;;
69		*)
70			echo "Unknown error; help!"
71			stop_boot
72			;;
73		esac
74	fi
75}
76
77load_rc_config $name
78run_rc_command "$1"
79