fsck revision 331216
1229997Sken#!/bin/sh
2229997Sken#
3229997Sken# $FreeBSD: stable/11/etc/rc.d/fsck 331216 2018-03-19 17:37:51Z dab $
4229997Sken#
5229997Sken
6229997Sken# PROVIDE: fsck
7229997Sken# REQUIRE: swap
8229997Sken# KEYWORD: nojail
9229997Sken
10229997Sken. /etc/rc.subr
11229997Sken
12229997Skenname="fsck"
13229997Skendesc="Run file system checks"
14229997Skenstart_cmd="fsck_start"
15229997Skenstop_cmd=":"
16229997Sken
17229997Skenfsck_start()
18229997Sken{
19229997Sken	if [ "$autoboot" = no ]; then
20229997Sken		echo "Fast boot: skipping disk checks."
21229997Sken	elif [ ! -r /etc/fstab ]; then
22288310Smav		echo "Warning! No /etc/fstab: skipping disk checks."
23288310Smav	elif [ "$autoboot" = yes ]; then
24288310Smav		# During fsck ignore SIGQUIT
25229997Sken		trap : 3
26229997Sken
27229997Sken		check_startmsgs && echo "Starting file system checks:"
28229997Sken		if checkyesno background_fsck; then
29229997Sken			fsck -F -p
30229997Sken		else
31229997Sken			fsck -p
32229997Sken		fi
33229997Sken
34288310Smav		err=$?
35229997Sken		if [ ${err} -eq 3 ]; then
36229997Sken			echo "Warning! Some of the devices might not be" \
37229997Sken			    "available; retrying"
38229997Sken			root_hold_wait
39229997Sken			check_startmsgs && echo "Restarting file system checks:"
40229997Sken			if checkyesno background_fsck; then
41229997Sken				fsck -F -p
42229997Sken			else
43287707Smav				fsck -p
44287707Smav			fi
45287707Smav			err=$?
46287707Smav		fi
47229997Sken
48229997Sken		case ${err} in
49229997Sken		0)
50287707Smav			;;
51229997Sken		2)
52229997Sken			stop_boot
53229997Sken			;;
54229997Sken		4)
55229997Sken			echo "Rebooting..."
56287707Smav			reboot
57229997Sken			echo "Reboot failed; help!"
58229997Sken			stop_boot
59287707Smav			;;
60287707Smav		8|16)
61229997Sken			if checkyesno fsck_y_enable; then
62229997Sken				echo "File system preen failed, trying fsck -y ${fsck_y_flags}"
63229997Sken				fsck -y ${fsck_y_flags}
64229997Sken				case $? in
65229997Sken				0)
66229997Sken					;;
67229997Sken				*)
68229997Sken				echo "Automatic file system check failed; help!"
69229997Sken					stop_boot
70229997Sken					;;
71229997Sken				esac
72229997Sken			else
73229997Sken				echo "Automatic file system check failed; help!"
74229997Sken				stop_boot
75229997Sken			fi
76229997Sken			;;
77229997Sken		12)
78229997Sken			echo "Boot interrupted."
79229997Sken			stop_boot
80229997Sken			;;
81229997Sken		130)
82229997Sken			stop_boot
83229997Sken			;;
84229997Sken		*)
85229997Sken			echo "Unknown error ${err}; help!"
86229997Sken			stop_boot
87229997Sken			;;
88229997Sken		esac
89229997Sken	fi
90229997Sken}
91229997Sken
92229997Skenload_rc_config $name
93229997Skenrun_rc_command "$1"
94229997Sken