mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-10 02:55:55 +02:00
67 lines
1.7 KiB
Bash
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
|