2010
06.11

Linux et son démarrage

J’ai eu besoin dernièrement de faire démarrer un serveur linux pour un client : jusque là rien d’extraordinaire. Cependant, ce qui compliquait les choses c’est que ce dernier avait une partition qui comportait des erreurs et son disque contenait des secteurs défectueux. J’ai été informé de démarrer le serveur sans partir d’analyse de disque sans quoi des données pourraient être perdues : pour ma part, je considère déjà que nous sommes rendus au point de non-retour quand le disque comporte des erreurs en plus de la partition et qu’il serait bon d’envisager une réinstallation mais bon … c’est le client qui décide … je suis sûr qu’il a une copie de sauvegarde de ses données non ?

Bref, j’ai commencé par cloner le disque sur un autre et joué un peu avec la copie : la partition était assez corrompue que lorsque j’ai lançé fsck, il a trouvé une quantité énormes de fichiers incorrects rendant la partition copiée inutilisable. J’ai donc démarré le serveur et il me demandait évidemment d’effectuer un fsck sur la partition /.

Donc voici les étapes de mon opération:

– Démarrer le serveur avec un livecd (rien de bien sorcier)
– Monter la partition avec la commande suivante (la partition était sur hda3)
mount /dev/hda3 /mnt/hd
– Effacer le fichier /.autofsck
rm /mnt/hd/.autofsck
– Modifier le fichier /etc/rc.d/rc.local (le fichier de démarrage peut varier selon la distro linux) et y ajouter la création du fichier /fastboot
vi /mnt/hd/etc/rc.d/rc.local
(ajout de la ligne suivante)
touch /fastboot
– Démonter la partition
umount /dev/hda3
– Ajustement du scan automatique des partitions avec tune2fs
tune2fs -c 0 /dev/hda3
– Redémarrage du serveur
– Et voilà : un système qui démarre sans fsck

Voici donc les étapes plus en détails :

Le démarrage à partir d’un livecd et le montage de la partition sont tous deux des procédures simples normalement. Là où ça devient plus intéressant est ce qui suit : le fichier .autofsck a été créé étant donné que j’ai dû fermer le serveur pendant son boot (mauvaise idée je sais mais j’ai dû faire vite). Ce fichier est utilisé par linux pour vérifier si le système s’est bel et bien fermé correctement la dernière fois. En l’effaçant, il ne voit rien passer et pense que le système a été éteint de façon normale. Ensuite, nous avons le fichier fastboot : il sert à indiquer au démarrage de ne pas vérifier les partitions avec fsck (en plein ce que nous voulons) et comme ce fichier s’efface une fois le système démarré, nous devons donc forcer la création du fichier chaque fois d’où l’utilisation de /etc/rc.d/rc.local. Après un démontage de partition, j’ai ajusté le nombre de fois avant que la commande fsck soit forcée sur cette dernière en utilisant tune2fs : avec -c 0 le système ne demandera pas de vérification du disque même après plusieurs redémarrages. J’ai finalement redémarré le serveur normalement et voilà : pas de scan avec fsck!

Pour finir, je tiens à dire que cette expérience n’a eu qu’un seul point positif : en apprendre un peu plus sur le démarrage de linux puisqu’en fin de compte, cette opération n’est vraiment pas recommandable étant donné qu’aucune vérification des partitions ne sera effectuée par la suite. Il s’agit vraiment d’une solution de dernier recours afin de permettre de faire fonctionner un système le temps de finaliser quelques trucs comme une seconde sauvegarde qui sait … ou encore récupérer la première qui se trouvait sur la partition en question.

RDinelle