fsck revision 98184
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 98184 2002-06-13 22:14:37Z gordon $
578344Sobrien#
678344Sobrien
778344Sobrien# PROVIDE: fsck
878344Sobrien# REQUIRE: localswap
998184Sgordon# KEYWORD: FreeBSD NetBSD
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:"
3798184Sgordon		case `${CMD_OSTYPE}` in
3898184Sgordon		FreeBSD)
3998184Sgordon			if checkyesno background_fsck; then
4098184Sgordon				fsck -F -p
4198184Sgordon			else
4298184Sgordon				fsck -p
4398184Sgordon			fi
4498184Sgordon			;;
4598184Sgordon		NetBSD)
4698184Sgordon			fsck -p
4798184Sgordon			;;
4898184Sgordon		esac
4998184Sgordon
5078344Sobrien		case $? in
5178344Sobrien		0)
5278344Sobrien			;;
5378344Sobrien		2)
5478344Sobrien			stop_boot
5578344Sobrien			;;
5678344Sobrien		4)
5778344Sobrien			echo "Rebooting..."
5878344Sobrien			reboot
5978344Sobrien			echo "Reboot failed; help!"
6078344Sobrien			stop_boot
6178344Sobrien			;;
6278344Sobrien		8)
6398184Sgordon		case `${CMD_OSTYPE}` in
6498184Sgordon		FreeBSD)
6598184Sgordon			if checkyesno fsck_y_enable; then
6698184Sgordon				echo "File system preen failed, trying fsck -y."
6798184Sgordon				fsck -y
6898184Sgordon				case $? in
6998184Sgordon				0)
7098184Sgordon					;;
7198184Sgordon				*)
7298184Sgordon				echo "Automatic file system check failed; help!"
7398184Sgordon					stop_boot
7498184Sgordon					;;
7598184Sgordon				esac
7698184Sgordon			else
7798184Sgordon				echo "Automatic file system check failed; help!"
7898184Sgordon				stop_boot
7998184Sgordon			fi
8098184Sgordon			;;
8198184Sgordon		NetBSD)
8278344Sobrien			echo "Automatic file system check failed; help!"
8378344Sobrien			stop_boot
8478344Sobrien			;;
8598184Sgordon		esac
8698184Sgordon		;;	
8778344Sobrien		12)
8878344Sobrien			echo "Boot interrupted."
8978344Sobrien			stop_boot
9078344Sobrien			;;
9178344Sobrien		130)
9278344Sobrien			stop_boot
9378344Sobrien			;;
9478344Sobrien		*)
9578344Sobrien			echo "Unknown error; help!"
9678344Sobrien			stop_boot
9778344Sobrien			;;
9878344Sobrien		esac
9978344Sobrien	fi
10078344Sobrien}
10178344Sobrien
10278344Sobrienload_rc_config $name
10378344Sobrienrun_rc_command "$1"
104