fsck revision 124618
178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $NetBSD: fsck,v 1.2 2001/06/18 06:42:35 lukem Exp $
498184Sgordon# $FreeBSD: head/etc/rc.d/fsck 124618 2004-01-17 10:40:45Z mtm $
578344Sobrien#
678344Sobrien
778344Sobrien# PROVIDE: fsck
878344Sobrien# REQUIRE: localswap
9124616Smtm# KEYWORD: FreeBSD
1078344Sobrien
1178344Sobrien. /etc/rc.subr
1278344Sobrien
1378344Sobrienname="fsck"
1478344Sobrienstart_cmd="fsck_start"
1578344Sobrienstop_cmd=":"
1678344Sobrien
1778344Sobrienstop_boot()
1878344Sobrien{
1978344Sobrien	#	Terminate the process (which may include the parent /etc/rc)
2078344Sobrien	#	if booting directly to multiuser mode.
2178344Sobrien	#
2278344Sobrien	if [ "$autoboot" = yes ]; then
2378344Sobrien		kill -TERM $$
2478344Sobrien	fi
2578344Sobrien	exit 1
2678344Sobrien}
2778344Sobrien
2878344Sobrienfsck_start()
2978344Sobrien{
3098184Sgordon	if [ "$autoboot" = no ]; then
3178344Sobrien		echo "Fast boot: skipping disk checks."
3278344Sobrien	elif [ "$autoboot" = yes ]; then
3378344Sobrien					# During fsck ignore SIGQUIT
3478344Sobrien		trap : 3
3578344Sobrien
3698184Sgordon		echo "Starting file system checks:"
37124618Smtm		if checkyesno background_fsck; then
38124618Smtm			fsck -F -p
39124618Smtm		else
4098184Sgordon			fsck -p
41124618Smtm		fi
42124618Smtm		;;
4398184Sgordon
4478344Sobrien		case $? in
4578344Sobrien		0)
4678344Sobrien			;;
4778344Sobrien		2)
4878344Sobrien			stop_boot
4978344Sobrien			;;
5078344Sobrien		4)
5178344Sobrien			echo "Rebooting..."
5278344Sobrien			reboot
5378344Sobrien			echo "Reboot failed; help!"
5478344Sobrien			stop_boot
5578344Sobrien			;;
5678344Sobrien		8)
5798184Sgordon			if checkyesno fsck_y_enable; then
5898184Sgordon				echo "File system preen failed, trying fsck -y."
5998184Sgordon				fsck -y
6098184Sgordon				case $? in
6198184Sgordon				0)
6298184Sgordon					;;
6398184Sgordon				*)
6498184Sgordon				echo "Automatic file system check failed; help!"
6598184Sgordon					stop_boot
6698184Sgordon					;;
6798184Sgordon				esac
6898184Sgordon			else
6998184Sgordon				echo "Automatic file system check failed; help!"
7098184Sgordon				stop_boot
7198184Sgordon			fi
7298184Sgordon			;;
7378344Sobrien		12)
7478344Sobrien			echo "Boot interrupted."
7578344Sobrien			stop_boot
7678344Sobrien			;;
7778344Sobrien		130)
7878344Sobrien			stop_boot
7978344Sobrien			;;
8078344Sobrien		*)
8178344Sobrien			echo "Unknown error; help!"
8278344Sobrien			stop_boot
8378344Sobrien			;;
8478344Sobrien		esac
8578344Sobrien	fi
8678344Sobrien}
8778344Sobrien
8878344Sobrienload_rc_config $name
8978344Sobrienrun_rc_command "$1"
90