[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: Disaster strikes



Joel
I have been trying a few things, can't get this to reboot with the root FS
as rw.
I have attached my original checkroot.fs which you sugested be edited
following your instructions below (Attached email).
I have provided the unedited version.
Regards
James
------------------------- Begin Paste --------------------------------------
#
# checkroot.sh	Check to root file system.
#
# Version:	@(#)checkroot.sh  2.85-21  18-Jun-2004  miquels@cistron.nl
#

SULOGIN=no
VERBOSE=yes
[ -f /etc/default/rcS ] && . /etc/default/rcS

PATH=/lib/init:/bin:/sbin

#
#	Helper: is a directory writable ?
#
dir_writable () {
	if [ -d "$1/" ] && [ -w "$1/" ] && touch -a "$1/" 2>/dev/null
	then
		return 0
	fi
	return 1
}

#
#	Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to
#	be spawned from this script *before anything else* with a timeout,
#	like sysv does.
#
[ "$SULOGIN" = yes ] && sulogin -t 30 $CONSOLE

KERNEL=`uname -s`
RELEASE=`uname -r`
MACHINE=`uname -m`

#
#	Ensure that bdflush (update) is running before any major I/O is
#	performed (the following fsck is a good example of such activity :).
#	Only needed for kernels < 2.4.
#
if [ -x /sbin/update ] && [ "$KERNEL" = Linux ]
then
	case "$RELEASE" in
		0.*|1.*|2.[0123].*)
			update
		;;
	esac
fi

#
#	Read /etc/fstab.
#
exec 9>&0 </etc/fstab
fstabroot=/dev/root
rootdev=none
roottype=none
rootopts=defaults
rootmode=rw
rootcheck=no
swap_on_md=no
devfs=
while read dev mnt type opts dump pass junk
do
	case "$dev" in
		""|\#*)
			continue;
			;;
		/dev/md*)
			# Swap on md device.
			[ "$type" = swap ] && swap_on_md=yes
			;;
		/dev/*)
			;;
		*)
			# Devfs definition ?
			if [ "$type" = "devfs" ] && [ "$mnt" = /dev ] &&
			   mountpoint -q /dev
			then
				devfs="-t $type $dev $mnt"
			fi

			# Might be a swapfile.
			[ "$type" = swap ] && swap_on_md=yes
			;;
	esac
	[ "$mnt" != / ] && continue
	rootdev="$dev"
	fstabroot="$dev"
	rootopts="$opts"
	roottype="$type"
	( [ "$pass" != 0 ] && [ "$pass" != "" ]   ) && rootcheck=yes
	( [ "$type" = nfs ] || [ "$type" = nfs4 ] ) && rootcheck=no
	case "$opts" in
		ro|ro,*|*,ro|*,ro,*)
			rootmode=ro
			;;
	esac
done
exec 0>&9 9>&-

#
#	Activate the swap device(s) in /etc/fstab. This needs to be done
#	before fsck, since fsck can be quite memory-hungry.
#
doswap=no
case "${KERNEL}:${RELEASE}" in
	Linux:2.[0123].*)
		if [ $swap_on_md = yes ] && grep -qs resync /proc/mdstat
		then
			[ "$VERBOSE" != no ] &&
			  echo "Not activating swap - RAID array resyncing"
		else
			doswap=yes
		fi
		;;
	*)
		doswap=yes
		;;
esac
if [ "$doswap" = yes ]
then
	[ "$VERBOSE" != no ] && echo "Activating swap."
	swapon -a 2> /dev/null
fi

#
#	Does the root device in /etc/fstab match with the actual device ?
#	If not we try to use the /dev/root alias device, and if that
#	fails we create a temporary node in /dev/shm.
#
if [ "$rootcheck" = yes ]
then
	ddev=`mountpoint -qx $rootdev`
	rdev=`mountpoint -d /`
	if [ "$ddev" != "$rdev" ] && [ "$ddev" != "4:0" ]
	then
		if [ "`mountpoint -qx /dev/root`" = "4:0" ]
		then
			rootdev=/dev/root
		elif dir_writable /dev/shm
		then
			rm -f /dev/shm/root
			mknod -m 600 /dev/shm/root b ${rdev%:*} ${rdev#*:}
			rootdev=/dev/shm/root
		else
			rootfatal=yes
		fi
	fi
fi

#
#	Bother, said Pooh.
#
if [ "$rootfatal" = yes ]
then
	echo
	echo "The device node $rootdev for the root filesystem is missing,"
	echo "incorrect, or there is no entry for the root filesystem"
	echo "listed in /etc/fstab."
	echo
	echo "The system is also unable to create a temporary node in"
	echo "/dev/shm to use as a work-around."
	echo
	echo "This means you have to fix this manually."
	echo
	echo "CONTROL-D will exit from this shell and REBOOT the system."
	echo
	# Start a single user shell on the console
	/sbin/sulogin $CONSOLE
	reboot -f
fi

#
#	See if we want to check the root file system.
#
FSCKCODE=0
if [ -f /fastboot ] || [ $rootcheck = no ]
then
	[ $rootcheck = yes ] && echo "Fast boot, no file system check"
	rootcheck=no
fi

if [ "$rootcheck" = yes ]
then
	#
	# Ensure that root is quiescent and read-only before fsck'ing.
	#
	if ! mount -n -o remount,ro $rootdev /
	then
    		echo -n "*** ERROR!  Cannot fsck root fs because it is "
		echo    "not mounted read-only!"
		echo
		rootcheck=no
	fi
fi

#
#	The actual checking is done here.
#
if [ "$rootcheck" = yes ]
then
	if [ -f /forcefsck ]
	then
		force="-f"
	else
		force=""
	fi

	if [ "$FSCKFIX" = yes ]
	then
		fix="-y"
	else
		fix="-a"
	fi

	spinner="-C"
	case "$TERM" in
		dumb|network|unknown|"")
			spinner="" ;;
	esac
	# This Linux/s390 special case should go away.
	if [ "${KERNEL}:${MACHINE}" = Linux:s390 ]
	then
		spinner=""
	fi

	echo "Checking root file system..."
	fsck $spinner $force $fix -t $roottype $rootdev
	FSCKCODE=$?
fi

#
#	If there was a failure, drop into single-user mode.
#
#	NOTE: "failure" is defined as exiting with a return code of
#	4 or larger.  A return code of 1 indicates that file system
#	errors were corrected but that the boot may proceed. A return
#	code of 2 or 3 indicates that the system should immediately reboot.
#
if [ $FSCKCODE -gt 3 ]
then
	# Surprise! Re-directing from a HERE document (as in
	# "cat << EOF") won't work, because the root is read-only.
	echo
	echo "fsck failed.  Please repair manually and reboot.  Please note"
	echo "that the root file system is currently mounted read-only.  To"
	echo "remount it read-write:"
	echo
	echo "   # mount -n -o remount,rw /"
	echo
	echo "CONTROL-D will exit from this shell and REBOOT the system."
	echo
	# Start a single user shell on the console
	/sbin/sulogin $CONSOLE
	reboot -f
elif [ $FSCKCODE -gt 1 ]
then
	echo
	echo "fsck corrected errors on the root partition, but requested that"
	echo "the system be rebooted (exit code $FSCKCODE)."
	echo
	echo "Automatic reboot in 5 seconds."
	echo
	sleep 5
	reboot -f
fi

#
#	Remount root to final mode (rw or ro).
#
mount -n -o remount,$rootopts,$rootmode $fstabroot /

#
#	We only create/modify /etc/mtab if the location where it is
#	stored is writable.  If /etc/mtab is a symlink into /proc/
#	then it is not writable.
#
init_mtab=no
MTAB_PATH="`readlink -f /etc/mtab || :`"
case "$MTAB_PATH" in
	/proc/*)
		;;
	/*)
		if dir_writable ${MTAB_PATH%/*}
		then
			:> $MTAB_PATH
			rm -f ${MTAB_PATH}~
			init_mtab=yes
		fi
		;;
	"")
		echo "checkroot.sh: cannot initialize $MTAB_PATH" >&2
		;;
esac

if [ "$init_mtab"  = yes ]
then
	[ "$roottype" != none ] && mount -f -o $rootopts $fstabroot /
	[ -n "$devfs" ] && mount -f $devfs
	. /etc/init.d/mountvirtfs
fi

#
#	Remove /etc/nologin, and /dev/shm/root if we created it.
#
NOLOGIN="`readlink -f /etc/nologin || :`"
rm -f "$NOLOGIN"
rm -f /dev/shm/root

: exit 0
---------------------------------------End
Paste -------------------------------------

-----Original Message-----
From: Joel Soete [mailto:jsoe0708@tiscali.be]
Sent: 15 July 2004 15:05
To: James Morris; Thibaut VARENE
Cc: debian-hppa@lists.debian.org
Subject: RE: Disaster strikes


Hello James,

Sorry for late answer but I was worry about the new Randolph patch for the
N4k discontigous mm :-$

>
>
> Thanks Thibaut, I guess I will keep an eye out for a fix but until then
I
> will do what you suggest.

umm Thibaut seems to confirm the same pb I mentioned :)
and you could try it's tips but iirc it will not works (device busy :( )

Any way you have right: I forgot a lot of details.

For my part it was a external disk which I can mount on another parisc-linux
box to re-install previous initscript dpkg; then reboot, update patch the
kernel (sorry I don't have enough time to check if 2.4 included the willy's
patch) and re-install new initscript dpkg. (and last reboot to check the
patch efficiency :) )

OTC if it's an internal disk, it would be more helpfull to reboot from your
install cd and from the install menu launch a shell
(if you need you can have a look at
<http://lists.debian.org/debian-hppa/2004/06/msg00017.html>
where I explain in detail howto).
at this place create a /MNT dir on wish you can mount your root fs (mount
/dev/sda2 /MNT)

edit your /MNT/etc/init.d/checkroot.sh (pay attention vi doesn't exist on
your cd ramdisk but well nano :) )
and apply the tips I mentioned here
<http://lists.debian.org/debian-hppa/2004/03/msg00070.html>
(in essence insert '-t $roottype' in all mount cmd).

Here you would be able to reboot on your hd to update your kernel.

pff... less trivial then I remember, once again apologies but it was so
far ;)
That said if something is not yet clear don't hesitate to come back :)

hth,
    Joel

PS: I was surprised that you were able to run a smp kernel on a N model,
hoppefully only one cpu exists or is configured :).


---------------------------------------------------------------------------
Tiscali ADSL LIGHT, 19,95 EUR/mois pendant 6 mois, c'est le moment de faire
le pas!
http://reg.tiscali.be/default.asp?lg=fr




--
To UNSUBSCRIBE, email to debian-hppa-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact
listmaster@lists.debian.org





Reply to: