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.
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).
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é...).
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...