+++ /dev/null
-#!/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