]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/initscripts/init.d/checkfstab
checkfstab: Fix "root=" parsing.
[people/pmueller/ipfire-2.x.git] / src / initscripts / init.d / checkfstab
CommitLineData
ba3e5905
AF
1#!/bin/sh
2########################################################################
3# Begin $rc_base/init.d/checkfstab
4#
5# Description : Check and repair fstab if the drivename has changed
6#
7# Authors : Arne Fitzenreiter - arne_f@ipfire.org
8#
9# Version : 00.00
10#
11# Notes :
12#
13########################################################################
14
15. /etc/sysconfig/rc
16. ${rc_functions}
17
18case "${1}" in
19 start)
3b50eb81 20 #Skip if root is set by UUID
9e1ceb99 21 if (grep "root=UUID=" /proc/cmdline > /dev/null); then
3b50eb81
AF
22 exit 0;
23 fi
27159f53 24 boot_mesg "Checking fstab bootdevice ..."
03f0aa26 25 read CMDLINE < /proc/cmdline
9e1ceb99
AF
26 ROOTPOS=${CMDLINE%%root=*}
27 ROOTPOS=${#ROOTPOS}
a7748862 28 NEWROOT=`echo ${CMDLINE:$ROOTPOS} | cut -d"=" -f2 | cut -d" " -f1`;
94f6d10b 29 OLDBOOT=`cat /etc/fstab | grep -m1 " / " | cut -d" " -f1 | cut -f1`;
27159f53 30 OLDDRV=${OLDBOOT::`expr length $OLDBOOT`-1}
ba3e5905 31 NEWDRV=${NEWROOT::`expr length $NEWROOT`-1}
27159f53 32 if [ "$OLDDRV" == "$NEWDRV" ]; then
ba3e5905
AF
33 echo_ok;
34 exit 0;
35 fi
36 echo_failure;
27159f53 37 boot_mesg "Warning! Bootdrive not match with fstab!"
ba3e5905 38 boot_mesg
27159f53
AF
39 boot_mesg "Bootdrive: $NEWDRV"
40 boot_mesg "fstab-entry: $OLDDRV"
ba3e5905 41 boot_mesg
94f6d10b
AF
42 if [ "${OLDDRV:0:4}" == "UUID" ]; then
43 #Short sleep because the kernel has not finished hardware detections
44 #and made many messages here and the password question is not readable
45 sleep 3
46 boot_mesg "${FAILURE}Error OLD Bootdrive is already a UUID. Can't fix."
47 boot_mesg "${NORMAL}"
48 sulogin
49 reboot -f
50 fi
ba3e5905
AF
51 boot_mesg "Attempt to repair it ..."
52 mount -o remount,rw /
53 sed -i -e "s|$OLDDRV|$NEWDRV|g" /etc/fstab
54 mount /boot
55 sed -i -e "s|$OLDDRV|$NEWDRV|g" /boot/grub/grub.conf
56 umount /boot
57 echo_ok;
58 exit 0;
59 ;;
60 *)
61 echo "Usage: ${0} {start}"
62 exit 1
63 ;;
64esac
65
66# End $rc_base/init.d/checkfstab