Fsck - pour réparer une partition corrompue
Avertissement: Cet article date de 2015, les commandes présentées sont peut-être obsolètes.
J'ai eu plusieurs fois un problème de carte SD corrompue suite à des redémarrages violents de Raspberry Pi. J'ai utilisé l'outil fsck
pour régler les problèmes. Voici la procédure, pour que je ne doive pas refarfouiller à chaque fois.
La première chose à faire est de brancher la carte SD sur un ordinateur avec un système GNU/Linux. (C'est probablement faisable sous Windows mais je ne connais pas les outils...). Ensuite, on peut vérifier les logs :
$ sudo cat /media/simon/548da502-ebde-45c0-9ab2-de5e2431ee0b/var/log/dmesg
...
[ 17.698285] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
...
On voit que le volume n'arrive pas à se monter et ils proposent d'utiliser fsck. On regarde sous quel nom est la carte SD :
# avec la carte SD montée:
$ ls /dev/
...
sdb
sdb1
sdb2
...
# avec les partitions démontées:
$ ls /dev/
...
sdb
...
# en retirant la carte sd de l'ordinateur:
$ ls /dev/
...
La carte est sous le nom "sdb" !
On rebranche ensuite le lecteur de carte SD et on démonte les partitions :
$ sudo umount /dev/sdb1
$ sudo umount /dev/sdb2
On lance fsck sur chaque partition. J'ai repris les arguments utilisés sur hardware-libre.fr.
$ sudo fsck /dev/sdb1 -p -c -v
fsck de util-linux 2.25.2
CP0: Argument invalide
Trying to set fallback DOS codepage 437
fsck.fat 3.0.27 (2014-11-12)
0x25: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
Automatically removing dirty bit.
Performing changes.
/dev/sdb1: 16 files, 2385/7161 clusters
$ sudo fsck /dev/sdb2 -p -c -v
fsck de util-linux 2.25.2
/dev/sdb2: Updating bad block inode.
71298 i-noeuds utilisés (7.51%, sur 949664)
54 fichiers non contigus (0.1%)
93 répertoires non contigus (0.1%)
nombre d'i-noeuds avec des blocs ind/dind/tind : 0/0/0
Histogramme des profondeurs d'extents : 55895/13
552209 blocs utilisés (14.35%, sur 3846912)
0 bloc défectueux
1 fichier de grande taille
50842 fichiers normaux
4879 répertoires
56 fichiers de périphérique en mode caractère
25 fichiers de périphérique en mode bloc
2 fifos
689 liens
15480 liens symboliques (15294 liens symboliques rapides)
5 sockets
------------
71978 fichiers
Le tutoriel sur hardware-libre.fr conseille d'utiliser aussi les arguments -c -v -y
. Je ne suis pas bien sûr de la différence entre la commande précédente. Il faudrait que je fouille un peu.
$ sudo fsck /dev/sdb2 -c -v -y
fsck de util-linux 2.25.2
e2fsck 1.42.12 (29-Aug-2014)
Vérification des blocs défectueux (test en mode lecture seule) : complété
/dev/sdb2: Updating bad block inode.
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/sdb2: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****
71298 i-noeuds utilisés (7.51%, sur 949664)
54 fichiers non contigus (0.1%)
93 répertoires non contigus (0.1%)
nombre d'i-noeuds avec des blocs ind/dind/tind : 0/0/0
Histogramme des profondeurs d'extents : 55895/13
552209 blocs utilisés (14.35%, sur 3846912)
0 bloc défectueux
1 fichier de grande taille
50842 fichiers normaux
4879 répertoires
56 fichiers de périphérique en mode caractère
25 fichiers de périphérique en mode bloc
2 fifos
689 liens
15480 liens symboliques (15294 liens symboliques rapides)
5 sockets
------------
71978 fichiers
Après avoir fait ça, je peux rebooter sur la carte SD ! :-)