FAT: réparez vos fichiers!

Chose qui nous est tous déjà arrivée, un disque dur qui crash et qui devient plus ou moins inutilisable. Dans ces cas là, il peut être intéressant d’aller jeter un œil au système de fichier lui-même, éventuellement endommagé et corrompu, qui peut nous permettre d’en apprendre d’avantage sur les données perdues.

C’est pourquoi, il y a peu de temps, je me suis intéressé au FAT32, ayant sous la main un disque de 250Go abîmé sur lequel faire mes tests. J’ai été amené à développer un outil, fatcat, outil qui permet de manipuler des systèmes de fichiers FAT.

Que faire en cas de disque FAT32 endommagé? C’est la question à laquelle je vais essayer de répondre.

1) Sauvez tout!

Première étape, et pas des moindres, il est très important de sauver le disque ailleurs. Certains secteurs étant physiquement inutilisable, le disque ne sera pas réparable sans une copie au préalable. Vous pouvez effectuer cette copie soit vers un disque dur neuf, soit vers un fichier de la machine de rescue.

Pour cela, je vous propose d’utiliser l’utilitaire ddrescue:

[bash]
$ ddrescue /dev/sdb disk.img rescue.log
[/bash]

Cet outil fera une copie des données de votre disque. Lorsqu’il rencontre des erreurs, en tombant par exemple sur un secteur défectueux, il écrira des 0 dans le fichier cible.

Cette opération peut prendre du temps, surtout lorsque le nombre de secteurs inaccessibles est grand. Dans mon cas, j’ai laissé tourner une bonne nuit avant d’avoir une image complète.

Si vous voulez juste tester, ou vous entraîner, n’hésitez pas à tester l’image de démo « repair.img » que j’ai construite exprès pour le proof-of-concept.

Dans un premier temps, vous pouvez commencer par examiner les données de votre disque en le montant:

[bash]
mkdir disk
mount disk.img disk/
cd disk
ls -lAh
[/bash]

Et essayer de voir ce qui est sauvé, ce qui manque etc.

Dans les étapes qui suivent, nous allons modifier les tables d’allocation, vous pouvez sauvegarder la table actuelle à l’aide de fatcat:

[bash]
# Sauvegarde les tables FATs dans un fichier (save.fat)
$ fatcat disk.img -b save.fat
# Restaure les tables FATs depuis un fichier (save.fat)
$ fatcat disk.img -p save.fat
[/bash]

2) Comparez les FATs

FAT signifie « File Allocation Table ». En quelque mots, ce système de fichiers comporte une table d’allocation qui décrit comment les données sont stockées et agencées sur le reste du disque. Dans le cas d’un disque de 250Go, la table FAT pèse environ 60Mo. Si votre disque est physiquement endommagé, il est fortement probable que cette table FAT le soit également. Pour des raisons de sécurité, elle est écrite deux fois sur le disque, vous avez à l’aide de fatcat la possibilité de les comparer:

[bash]
# Affiche une comparaison des tables FATs
$ fatcat disk.img -2
[/bash]

Cette commande vous montrera la différence entre les deux tables FATs. Sur le disque d’exemple repair.img, vous devriez voir le secteur 0x20 (32) qui est à 0 sur la première table et pas sur l’autre, cela correspond en fait au cluster du dossier fat1_broken à la racine de l’image.

Par la suite, il peut être intéressant de fusionner ces deux tables. Pour cela, fatcat effectue une différence entre les deux puis choisira à chaque fois celle qui fournit le plus d’informations:

[bash]
# Fusionne les tables FAT en gardant les données allouées
$ fatcat disk.img -m
[/bash]

N’hésitez pas à lire le tutoriel de réparation des tables FATs pour plus d’informations.

3) Réparez les dossiers non alloués

Désormais, nos deux tables sont égales, cependant, il arrive que des dossiers ne soient pas épargnés et soient effacés des deux tables simultanément. Cependant, fatcat arrivera encore à les lire. Si par exemple, le dossier racine (/) dit qu’il existe un dossier sur le cluster 22 et que ce dernier n’est pas marqué comme alloué dans la table d’allocation, fatcat tentera de lire les entrées et de déterminer sa taille, si il y parvient, il essaiera alors de réallouer le dossier dans la table. C’est le cas du dossier unallocated dans l’image d’exemple.

Pour faire cela, vous pouvez utiliser:

[bash]
# Répare automatiquement les dossiers et fichiers non alloués que
# fatcat arrive à lire
$ fatcat disk.img -f
[/bash]

4) A la recherche des orphelins

Si votre disque est corrompu, il est parfaitement possible que certains dossiers soient devenus orphelins. Cela signifie qu’ils ne sont plus accessible parce que leurs parents ont par exemple été détruits. Si la référence vers un dossier est brisée, ce dernier restera alloué dans la table FAT mais ne sera plus atteignable à partir de l’arborescence du disque. fatcat dispose d’une option permettant d’explorer les zones allouées mais plus atteignable de votre disque et tentera d’en dégager les dossiers et fichiers:

[bash]
# Lance la recherche des fichiers et dossiers orphelins
$ fatcat disk.img -o
(…)

There is 1 orphaned elements:
* Directory clusters 33 to 33: 2 elements, 30B

Estimation of orphan files total sizes: 30 (30B)

Listing of found elements with known entry:
In directory with cluster 33:
f 27/10/2013 16:32:54 orphan_file.txt c=51 s=30 (30B)
[/bash]

Dans cet exemple, fatcat a trouvé un dossier contenant un fichier orphelins. Ce dossier est inatteignable à partir de l’arborescence, il n’a donc pas de nom. Cependant, la liste de ses entrées est accessible, vous pouvez y acceder à l’aide de -L, qui sert à lister les entrées d’un répertoire à partir de son numéro de cluster:

[bash]
# Liste les entrées du répertoire du cluster 33
$ fatcat disk.img -L 33
Listing cluster 33
Directory cluster: 33
d 27/10/2013 16:32:26 ./ c=33
d 27/10/2013 16:32:26 ../ c=0
f 27/10/2013 16:32:54 orphan_file.txt c=51 s=30 (30B)
[/bash]

Il est également possible de lire le fichier, à l’aide de -R et -s qui permettent de lire un fichier à partir de son numéro de cluster et de sa taille:

[bash]
# Lis le fichier du cluster 51 et de 30 octets
$ fatcat disk.img -R 51 -s 30
This file is a poor orphaned!
[/bash]

Il est aussi possible d’extraire les fichiers du dossier ainsi retrouvé à l’aide de -x et -c:

[bash]
# Extrait le dossier du cluster 33 dans le répertoire output/
$ mkdir output/
$ fatcat disk.img -x output/ -c 33
Extracting /orphan_file.txt to output//orphan_file.txt
[/bash]

Pour plus d’informations, consultez le tutoriel des fichiers et dossiers orphelins.

Liens:

Formidable: une autre vision des formulaires

Formidable est une bibliothèque PHP de gestion de formulaire un peu spéciale. Contrairement à l’approche habituelle, qui vous fait utiliser une API PHP pour spécifier et construire votre formulaire puis vous propose de l’utiliser pour faire un rendu, Formidable se base sur du code HTML, puis l’analyse pour construire une représentation manipulable du formulaire et ensuite l’afficher. Par exemple:

[php]
$form = new Gregwar\Formidable\Form(‘<form method="post">’
.’What\’s your name? <input type="text" name="nom" />’
.’<input type="submit" />’
.’</form>’);

$form->setValue(‘nom’, ‘Jack’);

echo $form;
[/php]

Ce bout de code construira un formulaire et en conservera une représentation intermédiaire, et il sera par exemple ici possible à l’aide de setValue() de définir la valeur d’un champ. Le echo $form affichera le formulaire, ce qui donnera quelque chose du genre:

[html]
<form method="post">What’s your name?
<input type="text" name="nom" value="Jack" />

<input type="submit" />
<input type="hidden" name="csrf_token"
value="9c14019138010ddee6766caaad8f2926b5b09fc7" /></form>
[/html]

Comme vous le remarquez:

  • Le champ est requis par défaut, l’attribut required a été ajouté automatiquement
  • L’attribut value a été rempli par « Jack »
  • Un jeton CSRF a été automatiquement injecté dans le formulaire

Ce système permet alors de manipuler un formulaire d’une nouvelle manière, qui vous permettra de créer facilement des formulaires, et de les personnaliser à volonté.

Un autre exemple:

[php]
$form = new Gregwar\Formidable\Form(‘<form method="post">’
.’How old are you? <input type="int" name="age" />’
.’</form>’);

echo $form;
[/php]

Notez que le type int n’est pas valide et que les attributs min et max n’existent pas non plus en HTML. Ils seront utilisés pour générer une contrainte d’intégrité sur le champ et ne seront pas affichés, on obtiendra simplement un formulaire de la forme:

[html]
<form method="post">How old are you? <input type="text" name="age" />
<input type="hidden" name="csrf_token"
value="fa88b988041aa1497b4200996c246c5f75d22e4c" /></form>
[/html]

Et il sera possible de gérer la réception du formulaire comme cela:

[php]
$form->handle(function($values) {
echo ‘You are ‘.$values['age'].’ years old!’;
}, function($errors) {
echo ‘Errors:<br/>’;
foreach ($errors as $error) {
echo "* $error <br/>";
}
});
[/php]

De cette manière, le formulaire vérifiera que l’ensemble de ses contraintes sont respectées, y compris le jeton csrf et appellera alors l’une des deux fonctions fournies en paramètre de handle().

La bibliothèque est sous licence MIT et vous propose aussi d’autre fonctionnalités, comme la possibilité d’alimenter des select ou des radios depuis du code, de placer des contraintes personnalisées, de récupérer les données ou de peupler les données depuis un objet mappé… Pour plus d’informations, n’hésitez pas à consulter le README de Gregwar/Formidable

Pourquoi je n’aime pas Windows

Je ne veux pas tenter de lancer un énième troll ou un « Micro$oft sux » de Linuxien en manque de reconaissance. Mais, quand même, Windows, ça craint.

Pourtant cet OS n’est pas si mauvais, 7 et 8 sont assez rapides, tournent plutôt bien et, Visual Studio est par exemple un bon outil pour concevoir des applications, complet et intuitif. Énorme plus dont je ne peux pas me cacher non plus, la suite office et surtout Word, qui n’a malheureusement aucun égal à mon sens (Je parle d’éditeurs tout public, pas de LaTeX hein), j’ai déjà tenté d’écrire des gros documents sur LibreOffice et j’en suis revenu en courant.

Pourquoi donc détester cet OS pourtant si répandu?

Le temple du Spyware

J’imagine que vous avez tous déjà vécu ce grand moment de solitude ou, en ouvrant Firefox ou autre, vous vous retrouviez face à un moteur de recherche poubelle exotique bardé de pub et ou, surprise, en tentant de redéfinir votre page d’accueil en imaginant que la blague s’arrêtait là, vous réalisiez qu’en fait vous aviez été contaminé par un Spyware.

Je citerais notamment le tristement célèbre Babylon search, en tappant son nom sur Google, on ne tombe d’ailleurs que sur des articles ou personnes qui se demandent, « comment se débarassent t-on de cette immonde saleté? ».

Le problème? C’est que chaque logiciel que vous installez sous Windows essaye de vous refourguer d’autre logiciels dont il faut la promotion. Par exemple iTunes de Apple essaiera de vous faire installer Safari, Picasa de Google voudra absolument vous refiler Chrome. Mais si on s’aventure vers des programmes plus exotiques, ce sont des barres d’outils, des spywares à gogo et des pubs omniprésentes que vous allez manger.

Pour contrer cela, on vous propose d’installer un antivirus qui, de toutes façons, ne vous empêchera pas de ne pas voir la case « Oui, je veux installer cette merde » bien cachée dans les 50 étapes d’installation d’un logiciel.

Désormais, le vice va encore plus loin, imaginez par exemple que vous ayez besoin d’installer un pilote pour un périphérique non reconnu et que vous atterrissiez sur un site à peu près honnête, le bouton de téléchargement apparaîtra, mais les publicités de diverses régies qui l’entourent (il faut bien faire vivre le site, pas vrai?) ressembleront … aussi à des bouton « Télécharger ». En effet, dans la prolongation de ces pubs qui se noient aux menu d’un site et dont on ne fait plus trop la distinction avec le site lui-même, les publicités qui s’insinuent dans les pages de téléchargement sont parfaitement trompeuses car elles donnent l’impression qu’il s’agit du vrai téléchargement que nous souhaitons avoir.

Autre exemple, ces publicités qui visent des utilisateurs peu avertis, en leur signalant (et l’ironie est de mise) que leur ordinateur est infectée par quelque chose ou que leur disque est plein, du genre (extra: cherchez l’erreur):

Une pub bien pourrie de gens qui ne savent même pas compter en plus

En quoi est-ce propre à Windows?

Ces problèmes ne sont qu’en partie liés à Windows, et notamment au fait que ce soit un OS très mainstream, ce qui rend beaucoup plus de gens vulnérables et entraîne une très mauvaise mentalité sur l’OS.

Mais il y a un autre problème derrière tout ça, Windows ne propose pas encore d’AppStore. Sous IOS, l’AppleStore permet de télécharger des applications, sous Androïd, le Play Store, et sous Ubuntu les dépôts APT viennent nous fournir une très grande partie des logiciels dont nous avons besoins. Et même si il y a une bonne dose de mauvais logiciel dans les AppStore, ils sont au moins notés et évalués ce qui permet de se faire une idée sur la qualité. De plus, les logiciels « principaux » seraient certifiés et centralisés, pas besoin d’aller sur le site de Apple pour télécharger iTunes par exemple. Enfin, la procédure d’installation pourrait être rationalisée et uniformisée en évitant les opt-in/opt-out douteux.

Les versions OEM

Continuons avec les tristes expériences. Encore une que vous avez tous déjà vécue, lorsque vous (ou quelqu’un de votre famille) allumez pour la toute première fois un PC flambant neuf sous Windows, vous découvrez une magnifique surprise… la surcouche logicielle à la mords-moi-le-noeud que le constructeur (Acer, HP, Asus …) a pri soin d’installer pour vous, avec sa magnifique et inutile jauge d’utilisation du CPU, son « gestionnaire optimisé d’énergie » qui fait tourner votre PC à deux de tension lorsque vous êtes sur batterie et ainsi de suite. C’est ce que l’on nomme la version OEM:

Un exemple de surcouche horrible: Acer eNet Manager

OK, qu’à cela ne tienne, vous décidez d’installer votre version étudiante (cf prochain point), ce n’est d’ailleurs que l’affaire de 30 minutes. Enfin, 30 minutes, pour réinstaller Windows. Pas les 15 drivers non reconnus nativement (en même temps, pour un OS qui ne fait « que » 20Go sur votre disque, on ne peut pas lui demander de reconnaître plus que Ubuntu qui en pèse 2, non? A moins que…). C’est ainsi que vous vous retrouvez embarqué dans une succession d’installer interminable pour retrouver exactement un OS tel que vous l’avez acheté et payé, sans la surcouche OEM.

En bref, les versions OEM de Windows sont supposées être faite pour être compatible avez votre matériel et optimisé pour votre ordinateur. Cependant, Ubuntu tourne par exemple très bien sans jamais trop se battre et pèse moins lourd, ou est l’erreur? De plus, les constructeurs en profitent pour vous inclure plein d’outils don vous n’avez pas l’envie ni l’utilité, ce à quoi vous ne vous attendez d’ailleurs pas.

La vente forcée et l’hypocrisie de DreamSpark

Autre reproche que je ferais au système: il pratique un racket. Le mot n’est pas à prendre à la légère, car il s’agit bien de racket, c’est à dire une dépense dont vous n’auriez pas la nécéssite mais que vous vous retrouvez obligés de faire.

Pourquoi? Premièrement parce que vous pourriez choisir un autre système d’exploitation pour votre machine. Mais non, le magasin en a décidé autrement, votre Laptop sera sous Windows 8!

Bon, OK, peu de gens utilisent un autre OS en réalité. Mais pourtant Windows 7 et 8 sont gratuits pour les étudiants quand leur école est affiliée DreamSpark. Autrement dit, vous achetez quelque chose que vous avez peut-être déjà!

DreamSpark, autrefois MSDNAA (MicroSoft Network Academic Alliance), est un système proposant aux étudiants d’accéder gratuitement à des logiciels ou systèmes d’exploitations Windows, selon les accords en cours avec leur établissement. Le principe est « d’aider » les étudiants à étudier et apprendre sur leur système pour qu’ils l’utilisent dans leur vie professionnelle. Si tel est leur but, pourquoi ne pas proposer de leur rembourser leur version OEM de Windows?

En fait, c’est possible, mais il faut pour cela accepter de subit une torture administrative, pouvant aller jusqu’à un aller-retour de l’ordinateur chez le fabriquant. Un site nommé « Non aux racketiciels » centralise d’ailleurs les procédures servant à faire cette démarche.

Un environnent de travail triste

Le terminal Win32, toujours le même depuis 20 ans

Ce point est, je le reconnais, nettement plus subjectif. Windows est ce que l’on appelle un Clicodrome, autrement, sans la souris, il est impossible de faire quoi que ce soit.

De plus, son interface est très peu configurable, mis à part en installant des logiciels tiers très exotiques. Par exemple, l’absence de bureau virtuel est très dommage car je trouve personnellement ça très pratique.

Enfin, le terminal de Windows n’a pas évolué depuis très longtemps, bridé en largeur, avec une police affreuse, une expertise certaine requise pour y faire un copier/coller,  et surtout, l’absence d’une ribambelle d’outils bien utiles sous Linux comme grep, sed ou autre find.

Bien entendu, on peut utiliser MinGW ou Cygwin, mais ça reste un bon bricolage. Git est un exemple typique d’outil que je pense être bien meilleur en ligne de commande qu’en graphique, il vient d’ailleurs avec son « git bash » sous windows.

Bref, j’éspère que vous n’allez pas me prendre pour un puriste, car moi aussi il m’arrive fréquemment de choisir la ligne « Windows 7″ dans grub pour lancer Visual Studio, Windows Movie Maker ou Word, mais je ne me sens pour le moment pas à l’aise avec ce système.