Programmer le reboot du serveur et forcer le FSCK

Ubuntu, lors de sa séquence de boot, lance un fsck (analyse des disques pour rechercher des anomalies) à intervalle régulier. Le lancement de ce fsck est déclenché selon plusieurs modalités :

-

nombre de reboot

-

temps écoulé depuis le dernier fsck.

A la première de ces deux occurrences, le fsck est forcé sur le disque considéré.

Pour un poste de travail, c’est sans importance : le temps au reboot est légèrement plus important, mais pas de quoi s’inquiéter. Par contre, sur un serveur de fichiers, les espaces disques peuvent être sacrément volumineux, et un fsck peut prendre plusieurs dizaines de minutes. Si vous avez une coupure de courant, ou que vous êtes contraint de redémarrer votre serveur, le fsck va être drôlement pénalisant.

Consulter les modalités de reboot

Faites d’abord un df pour visualiser vos disques (vous pouvez également consulter le fichier /etc/fstab).

Puis, pour chaque disque, lancez les deux commandes suivantes :

dumpe2fs -h /dev/mapper/grp_vol1-log1|grep 'Maximum mount count' 
dumpe2fs -h /dev/mapper/grp_vol1-log1|grep 'Check interval'

(/dev/mapper/grp_vol1-log1 correspond au premier disque déclaré sur mon serveur).

Inhiber le fsck au redémarrage de la machine

Si vous n’avez pas réalisé de fsck récent, et que vous avez besoin de redémarrer dans l’urgence votre serveur, pas de panique ! Vous pouvez inhiber le fsck pour un disque particulier.

Editez (avec précaution) le fichier /etc/fstab. Voici l’exemple de ma machine :

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/grp_vol1-log1 /               ext3    errors=remount-ro 0       1
/dev/mapper/grp_vol1-log3 /opt            ext3    relatime,acl      0       2
/dev/mapper/grp_vol1-log2 /root           ext3    defaults        0       2
/dev/mapper/grp_vol1-log4 /home           ext3    defaults        0       2

Ce qui est important à consulter, c’est le dernier chiffre. 0 : pas de fsck. 1 : systématiquement sur la partition racine (et uniquement celle-là) : cela force le système à faire le fsck d’abord sur cette partition. Les chiffres suivants (2 ici) indiquent au système de réaliser les fsck par ordre numérique, en parallélisant le cas échéant les fsck sur les disques portant le même numéro.

Donc, si vous avez besoin de rebooter en urgence, passez vos disques volumineux à 0 pour le dernier chiffre avant le redémarrage.

N’oubliez pas, après le redémarrage, de remettre le chiffre initial : dans le cas contraire, votre système ne vérifiera plus la structure des partitions (pas forcément conseillé...).

Programmer des scripts pour redémarrer la machine et forcer le fsck

En routine, le plus simple pour éviter d’avoir des déconvenues lors d’un reboot urgent, c’est de déclencher un redémarrage du serveur à un moment opportun, et le forcer à exécuter le fsck.

Voici ce que j’ai mis en place. dans mon cas de figure, le fsck est déclenché tous les 6 mois. Je crée donc deux scripts, l’un pour réaliser le reboot, l’autre pour envoyer un message à l’administrateur, pour qu’il soit au courant...

Script de redémarrage du serveur

cat rebootAvecFsck.sh 
#!/bin/sh
touch /forcefsck
/sbin/shutdown -r now

Le fait de créer le fichier forcefsck à la racine permet de forcer le fsck au redémarrage.

Script d’envoi du résultat

cat listeDernierFSCK.sh 
#!/bin/bash
# script permettant de visualiser les differents checks des disques (suite a reboot)
RACINELECTEUR=/dev/mapper/grp_vol1-log
NOMBRELECTEUR=4
LOG=/var/log/listeDernierFSCK.log
DESTMAIL=root
TITREMAIL="Liste des derniers FSCK sur les disques du serveur $HOSTNAME"
date>$LOG
for (( c=1; c<=$NOMBRELECTEUR; c++ ))
do
        echo $RACINELECTEUR$c >>$LOG
        dumpe2fs -h $RACINELECTEUR$c|grep 'Last checked' >>$LOG 2>>$LOG
done
mail -s "$TITREMAIL" $DESTMAIL < $LOG

Avant de l’utiliser, faites un df pour vérifier les disques à analyser : vous avez ici la configuration d’un de mes serveurs...

Programmer l’exécution des scripts

crontab -l
00 02 1-7 1,7 4 /root/rebootAvecFsck.sh
00 08 1-7 1,7 4 /root/listeDernierFSCK.sh

Quelques explications...

Le script de reboot va s’exécuter à 2 heures le matin, entre le 1 et le 7 des mois de janvier et juillet, le jeudi.

Le script envoyant le résultat est lancé quelques heures après : il faut attendre que le serveur ait fini de redémarrer...