67 lines
1.9 KiB
Bash
Executable File
67 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# PROVIDE: checkfs
|
|
# REQUIRE: SERVERS
|
|
# BEFORE: NETWORKING
|
|
|
|
$_rc_subr_loaded . /etc/rc.subr
|
|
|
|
name="checkfs"
|
|
start_cmd="checkfs_start"
|
|
stop_cmd=":"
|
|
|
|
NETFS="nonfs,nonfs4,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,noshfs,nofuse,nofuseblk"
|
|
|
|
checkfs_start()
|
|
{
|
|
echo -n "=> Mounting root read-only... "
|
|
mount -n -o remount,ro /
|
|
show_rval
|
|
|
|
FORCEFSCK=
|
|
[ -f /forcefsck ] && FORCEFSCK="-- -f"
|
|
|
|
echo -n "=> Checking filesystems... "
|
|
if grep -qw quiet /proc/cmdline; then
|
|
fsck -A -T -C -a -t $NETFS $FORCEFSCK >/dev/null 2>&1
|
|
else
|
|
fsck -A -T -C -a -t $NETFS $FORCEFSCK 2>/dev/null
|
|
fi
|
|
fsckret=$?
|
|
if [ ${fsckret} -gt 1 ]; then
|
|
echo "failed!"
|
|
if [ $((${fsckret}&2)) -eq 2 ]; then
|
|
echo
|
|
echo "********************** REBOOT REQUIRED *********************"
|
|
echo "* *"
|
|
echo "* The system will be rebooted automatically in 15 seconds. *"
|
|
echo "* *"
|
|
echo "************************************************************"
|
|
echo
|
|
sleep 15
|
|
else
|
|
echo
|
|
echo "***************** FILESYSTEM CHECK FAILED ****************"
|
|
echo "* *"
|
|
echo "* Please repair manually and reboot. Note that the root *"
|
|
echo "* file system is currently mounted read-only. To remount *"
|
|
echo "* it read-write type: mount -n -o remount,rw / *"
|
|
echo "* When you exit the maintenance shell the system will *"
|
|
echo "* reboot automatically. *"
|
|
echo "* *"
|
|
echo "************************************************************"
|
|
echo
|
|
sulogin -p
|
|
fi
|
|
echo "Automatic reboot in progress..."
|
|
umount -a
|
|
mount -n -o remount,ro /
|
|
reboot -f
|
|
exit 0
|
|
fi
|
|
show_rval
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|