PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : recovery bei jedem Booten



rstuby
08.03.14, 07:08
Jetzt geht es mal nicht um mein neues Tablet, sondern um mein Notebook mit Xubuntu 12.04 LTS.
Da kommen jedes Mal beim Booten die Meldungen vor:
[ 3.329347] PM: Basic memory bitmaps freed
[ 3.342704] EXT4-fs (sda5): INFO: recovery required on readonly filesystem
[ 3.342763] EXT4-fs (sda5): write access will be enabled during recovery
[ 9.172940] EXT4-fs (sda5): recovery complete
[ 9.199996] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[ 39.589263] Adding 4208604k swap on /dev/sda1. Priority:-1 extents:1 across:4208604k

Da gibt es also jedes Mal 5-6 Sekunden Verzögerung und außerdem sieht das ja auch aus, als ob es nicht so gedacht ist.
Hier http://comments.gmane.org/gmane.linux.lfs.beyond.support/46928 habe ich eine englischsprachige Diskussion desselben Problems entdeckt, offenbar geht es vielen so.
Allerdings geht es dort nicht um ein Ubuntu-System und mit der dort vorgeschlagenen und wohl erfolgreichen Lösung, in die Datei

/etc/rc.d/init.d/mountfs die Zeile
mount -n -o remount,ro / einzufügen, funktioniert bei mir schon deshalb nicht, weil ich die entsprechende Datei nicht finde. Es gibt bei mir im etc-Ordner kein Verzeichnis rc.d, sondern nur mehrere rc0.d bis rc6.d, die aber jeweils nur Verknüpfungen enthalten.

derguteweka
08.03.14, 09:16
Moin,

1000 Dank fuer den Link, das ist mir hier auch schon aufgefallen - ich hab's dann aber irgendwann wieder vergessen/verdraengt.
Im Gegensatz zu den sonst immer mehr um sich greifenden "Mach' doch einfach ein sudo apt-get gedoens und danach noch ein sudo apt get install blubber" wird hier den Problemen wenigstens ein bisschen versucht, auf den Grund zu gehen. Was dann auch distributionsuebergreifend helfen kann.

Guck' bei deinem System mal nach, wo die ganzen symbolic links in den rc.X verzeichnissen hinzeigen - da werden dann die "echten" scripte sein. Das ist bei jeder Distri "noch besser geloest als bei allen anderen" :ugly:
Beim rumfummeln an den Start/Stop-scripten ist es aber nervenschonend, wenn man sich vorher ueberlegt, wie man auf die Platte zugreifen kann, zB. mit irgendeinem Knoppix etc, wenn beim editieren mal was schiefgelaufen ist und das booten dann nicht mehr so recht klappen will.

Gruss
WK

rstuby
08.03.14, 09:33
Da steht jeweils "Verknüpfung mit ../init.d/Dateiname".
Also /etc/init.d ? Den Ordner gibt es, aber eine Datei mountfs finde ich dort nicht.
Eine umountfs gibt es, die enthält aber nicht die Zeile, hinter der man besagten Code einfügen sollte.

derguteweka
08.03.14, 10:50
Naja, wie ich schon schrub: Da ist jede Distribution besser als alle anderen, deshalb gibts da die groessten Unterschiede. Entweder du findest im www was, wo jemand das Problem genau unter Xubuntu geloest hat; dann geht's evtl. mit cp+paste oder du musst dich halt durch deine initscripte durchwurschteln...
Das muss irgendein script sein, in dem das beim runterfahren rootfs "ungemountet" wird...
Wahrscheinlich wirds dann irgendwo unter /etc/init.d/blafasel stehen.
testhalber kannste ja dann in dem script vor deinen mount befehl ein echo setzen, dann muesstest du beim runterfahen sehen, wann der Befehl in dem script abgearbeitet werden wuerde, wenn du das "echo" entfernen wuerdest.

Gruss
WK

rstuby
08.03.14, 11:10
Also dafür verstehe ich viel zu wenig von der Sache. Bevor ich die Zeile irgendwohin schreibe,mit oder ohne "echo", müsste ich ja schon mal eine blasse Ahnung haben, wo man es versuchen könnte!
Also die Datei umountfs sieht so aus:

#! /bin/sh
### BEGIN INIT INFO
# Provides: umountfs
# Required-Start:
# Required-Stop: umountroot
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Turn off swap and unmount all local file systems.
# Description:
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions

umask 022

do_stop () {
exec 9<&0 </proc/mounts

PROTECTED_MOUNTS="$(sed -n '0,/^\/[^ ]* \/ /p' /proc/mounts)"
WEAK_MTPTS="" # be gentle, don't use force
REG_MTPTS=""
TMPFS_MTPTS=""
while read -r DEV MTPT FSTYPE REST
do
echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV $MTPT " && continue
case "$MTPT" in
/|/proc|/dev|/.dev|/dev/pts|/dev/shm|/dev/.static/dev|/proc/*|/sys|/sys/*|/run|/run/*|/lib/init/rw)
continue
;;
/var/run)
continue
;;
/var/lock)
continue
;;
esac
case "$FSTYPE" in
proc|procfs|linprocfs|sysfs|usbfs|usbdevfs|devpts)
continue
;;
tmpfs)
TMPFS_MTPTS="$MTPT $TMPFS_MTPTS"
;;
*)
if echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV "; then
WEAK_MTPTS="$MTPT $WEAK_MTPTS"
else
REG_MTPTS="$MTPT $REG_MTPTS"
fi
;;
esac
done

exec 0<&9 9<&-

#
# Make sure tmpfs file systems are umounted before turning off
# swap, to avoid running out of memory if the tmpfs filesystems
# use a lot of space.
#
if [ "$TMPFS_MTPTS" ]
then
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting temporary filesystems"
fstab-decode umount $TMPFS_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount temporary filesystems"
fstab-decode umount -v $TMPFS_MTPTS
log_end_msg $?
fi
fi

#
# Deactivate swap
#
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Deactivating swap"
swapoff -a >/dev/null
log_action_end_msg $?
else
log_daemon_msg "Will now deactivate swap"
swapoff -a -v
log_end_msg $?
fi

#
# Unmount local filesystems
#
if [ "$WEAK_MTPTS" ]; then
# Do not use -f umount option for WEAK_MTPTS
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting weak filesystems"
fstab-decode umount -r -d $WEAK_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount weak filesystems"
fstab-decode umount -v -r -d $WEAK_MTPTS
log_end_msg $?
fi
fi
if [ "$REG_MTPTS" ]
then
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting local filesystems"
fstab-decode umount -f -r -d $REG_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount local filesystems"
fstab-decode umount -f -v -r -d $REG_MTPTS
log_end_msg $?
fi
fi
}

case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac

Dann gibt es noch eine umountroot:

#! /bin/sh
### BEGIN INIT INFO
# Provides: umountroot
# Required-Start:
# Required-Stop:
# Should-Stop: halt reboot kexec
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Mount the root filesystem read-only.
### END INIT INFO

PATH=/sbin:/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions

do_stop () {
[ "$VERBOSE" = no ] || log_action_begin_msg "Mounting root filesystem read-only"
# Ask init to re-exec itself before we go down if it has been
# upgraded this cycle. It'll lose all its state, but at least
# it won't hold open files on the root filesystem (lp:#672177).
if [ -f /var/run/init.upgraded ]
then
old_map=$( cat /proc/1/maps )
map=$old_map
telinit u || :
i=0
timeout=5
while [ "$map" = "$old_map" ]
do
sleep 1
map=$( cat /proc/1/maps )
/usr/bin/logger "waiting for init to respawn"
i=$((i+1))
if [ $i -eq $timeout ] ; then
break
fi
done

if [ "$map" = "$old_map" ] ; then
/usr/bin/logger "FAIL: init failed to respawn in $timeout seconds - unmounting anyway"
else
/usr/bin/logger "SUCCESS: init respawned after $i seconds (within $timeout seconds timeout)"
fi
fi

# These directories must exist on the root filesystem as they are
# targets for system mountpoints. We've just unmounted all other
# filesystems, so either they are mounted now (in which case the
# mount point exists) or we can make the mountpoint.
for dir in /proc /sys; do
mkdir -p $dir || true
done
# These must be turned into symlinks for the /run transition. We
# can't do this at boot time because / is remounted read-write too
# late, so do it on shutdown instead.
if [ -d /var/run ]; then
umount -l /var/run || true
rm -rf /var/run
ln -nsf /run /var/run
fi
if [ -d /var/lock ]; then
umount -l /var/lock || true
rm -rf /var/lock
ln -nsf /run/lock /var/lock
fi
if [ -d /dev/shm ]; then
umount -l /dev/shm || true
rm -rf /dev/shm
ln -nsf /run/shm /dev/shm
fi
if [ ! -L /lib/init/rw ] && umount -l /lib/init/rw && \
rm -rf /lib/init/rw; then
ln -nsf /run /lib/init/rw
elif [ -L /lib/init/rw ] && [ $(readlink /lib/init/rw) != /run ]; then
rm -f /lib/init/rw
ln -nsf /run /lib/init/rw
fi

MOUNT_FORCE_OPT=
[ "$(uname -s)" = "GNU/kFreeBSD" ] && MOUNT_FORCE_OPT=-f
# This:
# mount -n -o remount,ro /
# will act on a bind mount of / if there is one.
# See #339023 and the comment in checkroot.sh
mount $MOUNT_FORCE_OPT -n -o remount,ro -t dummytype dummydev / 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro dummydev / 2>/dev/null \
|| mount $MOUNT_FORCE_OPT -n -o remount,ro /
ES=$?
[ "$VERBOSE" = no ] || log_action_end_msg $ES
}

case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac

Da ist sogar schon etwas mit mount ... remount,ro drin...

derguteweka
08.03.14, 12:57
Moin,

Ich hab zu wenig Plan, um dir da qualifiziert was abschreibfertiges liefern zu koennen. Im Gegensatz zum LFS hab' ich bei den aktuellen Distries stark den Eindruck,dass gerade die Initscripte "wahnsinnig maechtig und universell" gehalten sind (um nicht zu sagen: Bloat).
Ich wuerde dann eben so vorgehen, dass ich an die Stellen in den Scripten, wo ich die richtige Position fuer so ein mount kommando vermuten wuerde, sowas wie ein

echo blablupp
setzen wuerde,
dann gucken, ob/wann beim runterfahren das auch aufgerufen wird und dann ggf. das durch das richtige mount kommando ersetzen.

Gruss
WK