Files
bpfire/src/initscripts/init.d/checkfstab
2010-11-25 14:15:25 +01:00

67 lines
1.7 KiB
Bash

#!/bin/sh
########################################################################
# Begin $rc_base/init.d/checkfstab
#
# Description : Check and repair fstab if the drivename has changed
#
# Authors : Arne Fitzenreiter - arne_f@ipfire.org
#
# Version : 00.00
#
# Notes :
#
########################################################################
. /etc/sysconfig/rc
. ${rc_functions}
case "${1}" in
start)
#Skip if root is set by UUID
if (grep "root=UUID=" /proc/cmdline > /dev/null); then
exit 0;
fi
boot_mesg "Checking fstab bootdevice ..."
read CMDLINE < /proc/cmdline
ROOTPOS=${CMDLINE%%root=*}
ROOTPOS=${#ROOTPOS}
NEWROOT=`echo ${CMDLINE:$ROOTPOS} | cut -d"=" -f2 | cut -d" " -f1`;
OLDBOOT=`cat /etc/fstab | grep -m1 " / " | cut -d" " -f1 | cut -f1`;
OLDDRV=${OLDBOOT::`expr length $OLDBOOT`-1}
NEWDRV=${NEWROOT::`expr length $NEWROOT`-1}
if [ "$OLDDRV" == "$NEWDRV" ]; then
echo_ok;
exit 0;
fi
echo_failure;
boot_mesg "Warning! Bootdrive not match with fstab!"
boot_mesg
boot_mesg "Bootdrive: $NEWDRV"
boot_mesg "fstab-entry: $OLDDRV"
boot_mesg
if [ "${OLDDRV:0:4}" == "UUID" ]; then
#Short sleep because the kernel has not finished hardware detections
#and made many messages here and the password question is not readable
sleep 3
boot_mesg "${FAILURE}Error OLD Bootdrive is already a UUID. Can't fix."
boot_mesg "${NORMAL}"
sulogin
reboot -f
fi
boot_mesg "Attempt to repair it ..."
mount -o remount,rw /
sed -i -e "s|$OLDDRV|$NEWDRV|g" /etc/fstab
mount /boot
sed -i -e "s|$OLDDRV|$NEWDRV|g" /boot/grub/grub.conf
umount /boot
echo_ok;
exit 0;
;;
*)
echo "Usage: ${0} {start}"
exit 1
;;
esac
# End $rc_base/init.d/checkfstab