<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/16"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/16/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/16/atom/feed</id>
  <updated>2008-08-24T09:29:00+02:00</updated>
  <entry>
    <title>Récupérer les données d&#039;un disque défectueux</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/16" />
    <id>http://artisan.karma-lab.net/node/16</id>
    <published>2008-05-29T15:17:01+02:00</published>
    <updated>2008-08-24T09:29:00+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Systèmes de fichier" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  A qui n'est-il pas arrivé d'avoir un disque qui lui claque dans les pattes sans avoir eu le temps d'en sauvegarder le contenu ? Heureusement, avec un Linux, allez pouvoir avec un peu de chance retrouver vos précieuses données...
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  A qui n'est-il pas arrivé d'avoir un disque qui lui claque dans les pattes sans avoir eu le temps d'en sauvegarder le contenu ? Heureusement, avec un Linux, allez pouvoir avec un peu de chance retrouver vos précieuses données...
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>On arrête tout !!</h2>
	
<p>
   Lorsque les ennuis surviennent, la première chose à faire est de ne plus toucher à rien. Le mieux alors est d'éteindre la machine et d'aller quelque part trouver un CD Live d'une distribution Linux. A priori toutes conviennent car il ne nous faut que les outils de base : <kbd>dd</kbd>, <kbd>gzip</kbd>, <kbd>fsck.*</kbd>, <kbd>mount.*</kbd> et <kbd>ssh</kbd>. La seule chose qui peut poser problème sont les distributions trop intelligentes qui s'amusent à monter tous les disques qu'elles trouvent. Le mieux est donc d'utiliser une distribution de type <kbd><a class='external' target='_blank' href='http://rescuecd.pld-linux.org/' >rescue linux</a></kbd>. 
</p>

<H2>Récupération des données brute</h2>
<P>
  La première chose que vous pouvez faire est de monter la partition <b>en lecture seule</b> pour tenter en toute simplicité d'en sauvegarder le contenu. Pour cela il faut utiliser l'option <kbd>-ro</kbd> de la commande <kbd>mount</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mkdir"><span class="kw2">mkdir</span></a> <span class="sy0">/</span>media<span class="sy0">/</span>sauvegarde<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/mount"><span class="kw2">mount</span></a> <span class="sy0">/</span>dev<span class="sy0">/</span>hda1 <span class="sy0">/</span>mnt -o ro
  </div>
  
  </div>
</p>
<p>
  Si les données sont trop atteintes pour pouvoir monter le disque, il faut passer à la vitesse au dessus. Pour ne prendre aucun risque, la régle numéro un est de faire comme le chat qui chipent la bouffe de ses voisins : recopier le plus furtivement possible la partition en danger, et l'emmener dans un coin calme pour travailler dessus. Surtout ne jamais faire ce qui suit sur la "vraie" partition sous peine de voir empirer les choses : l'ennemi ici, c'est l'écriture. 
</p>
<p>
  Tout d'abord donc, il nous faut récupérer le contenu de la partition dans un fichier. Soit nous disposons sur notre machine de deux disques, dont un en bon état, auquel cas nous montons ce disque et nous créons notre fichier dessus :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/dd"><span class="kw2">dd</span></a> <span class="re2">if=</span><span class="sy0">/</span>dev<span class="sy0">/</span>hda1 <span class="re2">of=</span><span class="sy0">/</span>media<span class="sy0">/</span>bon_dique<span class="sy0">/</span>hda1.img <span class="re2">conv=</span>noerror,<a target="blank" href="http://pwet.fr/man/linux/commandes/sync"><span class="kw2">sync</span></a>
  </div>
  
  </div>
</P>
<div class='inline-box note'>
  Les options noerror et sync permettent de passer outre les erreurs de lecture des bad-sectors en les remplaçant par des zéros. Le fichier final garde ainsi strictement la même taille que la partition sauvegardée. </div>
<P>
  Si vous n'avez pas de disque disponible, la même chose peut être faite à travers le réseau vers une machine disposant de SSH :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/dd"><span class="kw2">dd</span></a> <span class="re2">if=</span><span class="sy0">/</span>dev<span class="sy0">/</span>hda1 <span class="re2">conv=</span>noerror,<a target="blank" href="http://pwet.fr/man/linux/commandes/sync"><span class="kw2">sync</span></a> <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/gzip"><span class="kw2">gzip</span></a> <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/ssh"><span class="kw2">ssh</span></a> user<span class="sy0">@</span>machine <span class="st0">&quot;gunzip &gt; hda1.img&quot;</span>
  </div>
  
  </div>
</P>



	<a name='chapter_2'></a>
  <h2>Réparation</h2>
	

<p>
   Maintenant que nous avons notre fichier partition, nous allons pouvoir lancer une procédure de correction sur celui-ci :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  fsck.ext3 hda1.img
  </div>
  
  </div>
</p>
<div class='inline-box note'>
  Si votre disque est formaté avec un autre système de fichier, remplacez <kbd>ext3</kbD> par celui-ci (ex. vfat, ext2, reiser, etc...). 
</div>
<P>
  Si tout c'est bien passé, l'image est réparée. Nous pouvons la monter pour récupérer les précieuses données :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mount"><span class="kw2">mount</span></a> -t ext2 hda1.img mount_point
  </div>
  
  </div>
</P>


	<a name='chapter_3'></a>
  <h2>Recherche des superblocks</h2>
	
<p>
Si la partition problématique est formatée avec EXT3, il se peut que l'on ait un refus d'obstacle à l'étape précédente pour cause de "superblock" introuvable.</p>
<p>
 Il y a (au moins) deux manières de récupérer la position des superblocks. La première consiste à simplement rechercher la chaîne <kbd>superblock</kbd> dans l'image du disque que nous avons créée plus haut :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  dumpe2fs -ob hda1.img <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> Superbloc
  </div>
  
  </div>
</p>
<P>La seconde solution consiste à fabriquer une fausse image disque de la taille exacte de la partition d'origine que nous allons ensuite formatter en ext3 pour obtenir la position des superblocks : 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0"># affichage de la taille de la partition</span><br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/df"><span class="kw2">df</span></a> <span class="sy0">/</span>dev<span class="sy0">/</span>hda1<br />
<br />
<span class="co0"># on reporte cette taille pour créer un faux disque</span><br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/dd"><span class="kw2">dd</span></a> <span class="re2">if=</span><span class="sy0">/</span>dev<span class="sy0">/</span>zero <span class="re2">of=</span><span class="sy0">/</span>faux_disque.img <span class="re2">count=</span>taille_partition<br />
<br />
<span class="co0"># formatage du faux disque qui, une fois terminé, affiche les positions de superblocks</span><br />
mkfs.ext3 <span class="sy0">/</span>faux_disque.img
  </div>
  
  </div>
</P>

<p>Une fois que l'on connaît la position des superblocks, il suffit de lancer un réparation :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  fsck.ext3 -B POSITION_SUPER_BLOCK hda1.img
  </div>
  
  </div>
</p>


	<a name='chapter_4'></a>
  <h2>Conclusion</h2>
	
<p>
  Voilà, avec peu d'effort, l'ami Linux peut encore nous sauver la vie avec sa vision Unixienne "Tout n'est que fichier, sauf bien sur lorsque ce n'en est pas un"
</p>
<p>
  Légèrement hors sujet, je profite juste de ce billet pour citer l'outil <a class='external' target='_blank' href='http://www.cgsecurity.org/wiki/Main_Page' >photorec</a>. Disponible dans toutes les bonnes distributions, cet utilitaire est capable d'analyser une partition et d'en retirer des fichiers perdus. A garder dans sa boîte à outils. 
</p>    ]]></content>
  </entry>
</feed>
