06 januari 2006

Schijf checks tijdens het opstarten

Aanleiding: ik wil m'n servertje graag heel houden; het is natuurlijk niet fijn als je webpaginaatjes of e-mails verdwijnen in een kapot stukje harde schijf. Echter, als je computertje reeds aan staat is het af te raden je root schijf te checken, aangezien je deze schijf niet kunt unmounten en als je het gemount doet dat de boel flink op kan fucken. De oplossing is dus om deze check uit te voeren tijdens het opstarten van je computer, aangezien de schijven dan nog niet gemount zijn. Hiervoor voldoet het volgende recept:

Nou ja, eigenlijk kan ik geen recept vinden dat precies aan mijn eisen voldoet. Ik wil namelijk ook de mogelijkheid hebben een bad blocks test erbij te doen die dus controleert of er kapotte stukjes op je schijf zitten en deze dan in een bestand zet zodat hier niet meer naar geschreven wordt. Het bestand waar we hiervoor mee aan het kloten moeten is /etc/rcS.d/S30checkfs.sh. Fast your seat-belts en back je bestandje up, want of aangezien ik niet eens kan garanderen dat het bij mij goed gaat, kan ik dat zeker niet bij u.

Wat ik na een kleine bestudering van het bestand heb veranderd is het volgende. Om te beginnen regel 45, die luidde:

fsck $spinner -T -R -A $fix $force

Na m'n aanpassing wordt dit:

fsck $spinner -T -R -A $fix $force $bad

Vervolgens voeg ik tussen regel 32 en 33 waar eerst het volgende stond:

fi if [ "$FSCKFIX" = yes ]

het volgende in:

if [ -f /badblockfsck ] then bad="-t ext2,ext3 -c" else bad="" fi

Tenslotte pas ik de op een na onderste regel met tekst aan zodat hij er zo uit komt te zien:

rm -f /fastboot /forcefsck /badblockfsck

Nou, spannend zeg! Misschien is dit een goed tijdstip voor een kleine uitleg. Normaal gesproken checkt dit bestand tijdens het opstarten of de bestanden /fastboot of /forcefsck bestaan. Normaal gesproken checkt Ubuntu de schijf elke 30 boots, maar als het bestand /fastboot bestaat en het is toevallig de dertigste keer wordt de schijf check over geslagen. Als /forcefsck wordt juist altijd een check uitgevoerd, zelfs als het niet de 30ste keer is. Aan het eind van het bestand worden de bestanden als ze bestonden weer verwijderd, dus hebben ze alleen bij de eerst volgende reboot effect. Als je dus een van deze effecten wilt gebruiken maak je gewoon even zo'n bestand aan, voor fastboot bijvoorbeeld:

$ sudo touch /fastboot

Wat ik met deze code nu heb toegevoegd is dat er ook wordt gekeken of het bestand /badblockfsck bestaat. Is dit het geval dan worden de extra opties -t ext2,ext3 -c aan de fsck opdracht toegevoegd (fsck is het programma dat de schijfcontrole uitvoert) met behulp van de bad variabele. Deze opties zorgen ervoor dat alleen ext2 en ext3 bestandssystemen worden gecontroleerd en dit is nodig voor de -c optie, die de daadwerkelijke bad blocks scan uitvoert, maar alleen beschikbaar is voor ext2 en ext3 bestandssystemen (voor zover ik weet).

Op deze manier breid je dus de functionaliteit van het scriptje uit; door een bestand /badblockfsck aan te maken wordt nu ook op slechte blocks gecontroleerd! Als je wilt dat die check ook daadwerkelijk wordt uitgevoerd als het niet de 30e boot is moet je ook /forcefsck weer aanmaken. Dat is dus de theorie... even testen maar!

... en volgens mij werkt het prima! Voor ik conclusies trek eerst nog maar eens laten checken door een paar pro's uit Utopia. Dus wordt vervolgd!