Einige von euch kennen sicherlich das Problem: Ein wichtiges Kernelupdate zwingt zum Reboot der Serverinfrastruktur. Per SSH wird das Update eingespielt und ein Reboot abgesetzt, aber nicht alle Server koennen ueber DRAC-Karten oder Web-KVM ueberwacht werden. Von Zeit zu Zeit bleibt einem das Herz dann stehen wenn ein Server nicht wiederkommt, die Pings kommen zurueck mit einem „Destiniation or Host unreachable“ oder vergleichbar…
Waerend man seine Jacke anzieht, Schuhe zubindet und parallel dazu fieberhaft ueberlegt was das Problem sein koennte und was da schiefgelaufen ist, schweift auf dem Weg zur Wohnungstuer noch ein letzter Blick zum Monitor und genau in dem Moment geht dann doch gerade der so herbeigesehnte erste Ping durch. Man rennt an den Rechner zurueck, loggt sich per SSH ein, ueberprueft das alles laeuft und waerend der Adrenalinspiegel sinkt kommt einem in den Sinn, dass das nur ein routinemaessiger Dateisystemcheck gewesen sein wird…
Wann der naechste check ausgefuehrt wird, kann man leicht mit dumpe2fs herausfinden. Bin ich aber ehrlich gesagt zu faul zu und vergesse ich auch jedes mal. Darum habe ich mir (nach einem entsprechenden Herzstillstand) ein kleines Skript geschrieben mit dem Namen nextfscheck, was ich unter /usr/local/sbin/ abgelegt habe und das ich vor einem Reboot aufrufen kann um zu wissen ob es einen fsck geben wird oder nicht. Das Skript ist simpel, das Skript ist billig. Als Parameter wird ein gueltiges gemountetes Device angegeben und dann bekomme ich die Info wieviele remounts noch zum naechsten fsck sind, bzw. an welchem Datum der naechste routinemaessige Dateisystemcheck durchgefuehrt wird. Fuer alle die die ebenfalls Interesse an dem Skript haben, hier:
#!/bin/bash # # Give information about the next filesystem check # # 2009-11-08: initial Version / Jan Toenjes <mail@jan-toenjes.de> # 2009-11-09: changed dumpe2fs to "tune2fs -l" as suggested by kero / Jan Toenjes <mail@jan-toenjes.de> # check if skript is run as root for tune2fs if [ `id -u` != "0" ] ; then echo "" echo " Usage: $0 /dev/disk" echo "" echo " Error: You need to be root to run this skript" echo "" exit 3 fi # check if needed programs are installed which bc 1>/dev/null if [ $? -ne 0 ]; then echo " ERROR: Cant find bc" exit 3 fi # check if we got a parameter if [ "$1" == "" ] ; then echo "" echo " Usage: $0 /dev/disk" echo "" echo " Error: You need to give a valid mounted device as parameter i.e. /dev/sda1" echo "" exit 3 fi # check if the device given as a parameter exists DEVEXIST=`mount | grep -ir "$1" | grep "/dev/" | wc | awk {'print $1'}` if [ "$DEVEXIST" == "0" ] ; then echo "" echo " Usage: $0 /dev/disk/" echo "" echo " Error: The given parameter \"$1\" is not a valid mounted device." echo "" exit 3 fi # get remaining mounts MOUNTCOUNT=`tune2fs -l $1 2>&1 | grep "Mount count:" | awk {'print $3'}` MAXIMUMMOUNTCOUNT=` tune2fs -l $1 2>&1 | grep "Maximum mount count:" | awk {'print $4'}` REMAININGMOUNTS=`echo $MAXIMUMMOUNTCOUNT-$MOUNTCOUNT|bc` # check if we have a fsck after a specific time value and give wanted information TIMECHECK=`tune2fs -l $1 2>&1 | grep "Check interval:" | awk {'print $3'}` if [ "$TIMECHECK" == "0" ] ; then echo "The next filesystem check of $1 will be after another $REMAININGMOUNTS mounts." else NEXTCHECKAFTER=`tune2fs -l $1 2>&1 | grep "Next check after:" | sed 's/Next check after:[ \t]*$//g'` echo "The next filesystem check of $1 will be on $NEXTCHECKAFTER or after another $REMAININGMOUNTS mounts." fi |