e9f87d29a8
On UFS with SU+J, sometimes fsck's default recovery from journal marks the filesystem as clean but some errors remain. With SU only, default fsck in preen mode sometimes thinks all errors have been fixed but some still remain. To address the issues above, this change adds a new config option: fsck_flags. By default it's set to -p, but the user may change it to -y or -f -y, for instance, to force a full fsck after a system crash. Submitted by: jhibbits@ (original version) Reviewed by: mckusick Differential Revision: https://reviews.freebsd.org/D24087
96 lines
1.6 KiB
Bash
Executable File
96 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: fsck
|
|
# REQUIRE: swap
|
|
# KEYWORD: nojail
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="fsck"
|
|
desc="Run file system checks"
|
|
start_cmd="fsck_start"
|
|
stop_cmd=":"
|
|
|
|
fsck_start()
|
|
{
|
|
if [ "$autoboot" = no ]; then
|
|
echo "Fast boot: skipping disk checks."
|
|
elif [ ! -r /etc/fstab ]; then
|
|
echo "Warning! No /etc/fstab: skipping disk checks."
|
|
elif [ "$autoboot" = yes ]; then
|
|
# During fsck ignore SIGQUIT
|
|
trap : 3
|
|
|
|
check_startmsgs && echo "Starting file system checks:"
|
|
# Background fsck can only be run with -p
|
|
if checkyesno background_fsck; then
|
|
fsck -F -p
|
|
else
|
|
fsck ${fsck_flags}
|
|
fi
|
|
|
|
err=$?
|
|
if [ ${err} -eq 3 ]; then
|
|
echo "Warning! Some of the devices might not be" \
|
|
"available; retrying"
|
|
root_hold_wait
|
|
check_startmsgs && echo "Restarting file system checks:"
|
|
# Background fsck can only be run with -p
|
|
if checkyesno background_fsck; then
|
|
fsck -F -p
|
|
else
|
|
fsck ${fsck_flags}
|
|
fi
|
|
err=$?
|
|
fi
|
|
|
|
case ${err} in
|
|
0)
|
|
;;
|
|
2)
|
|
stop_boot
|
|
;;
|
|
4)
|
|
echo "Rebooting..."
|
|
reboot
|
|
echo "Reboot failed; help!"
|
|
stop_boot
|
|
;;
|
|
8|16)
|
|
if checkyesno fsck_y_enable; then
|
|
echo "File system preen failed, trying fsck -y ${fsck_y_flags}"
|
|
fsck -y ${fsck_y_flags}
|
|
case $? in
|
|
0)
|
|
;;
|
|
*)
|
|
echo "Automatic file system check failed; help!"
|
|
stop_boot
|
|
;;
|
|
esac
|
|
else
|
|
echo "Automatic file system check failed; help!"
|
|
stop_boot
|
|
fi
|
|
;;
|
|
12)
|
|
echo "Boot interrupted."
|
|
stop_boot
|
|
;;
|
|
130)
|
|
stop_boot
|
|
;;
|
|
*)
|
|
echo "Unknown error ${err}; help!"
|
|
stop_boot
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|