Récupération de données sous linux [WiP]

>> Ceci est un Work in Progress, je le compléterai au fur et à mesure <<
Disclaimer: Bien évidemment, tout ce qui pourrait survenir en suivant les indications mentionnées ci-dessous relève de votre entière responsabilité.

J’ai dû récemment faire de la récupération de données sur un disque de portable contenant des partitions de type NTFS. La machine ne voulait plus démarrer dessus et bien évidemment le possesseur du-dit disque n’avait pas de sauvegarde récente.
Le disque avait une taille de 500Go.

Il existe toute une série d’utilitaires disques qui permettent de traiter ce type de situation.

  • badblocks
  • smartctl
  • fdisk
  • ddrescue
  • Les utilitaires propres au système de fichier que vous utilisez.

1/ On branche le disque via un adaptateur usb, puis on regarde les logs avec dmesg.

dmesg

[185475.284780] hub 2-1:1.0: state 7 ports 8 chg 0000 evt 0004
[185475.285088] hub 2-1:1.0: port 2, status 0101, change 0001, 12 Mb/s
[185475.389105] hub 2-1:1.0: debounce: port 2: total 100ms stable 100ms status 0x101
[185475.400067] hub 2-1:1.0: port 2 not reset yet, waiting 10ms
[185475.462195] usb 2-1.2: new high-speed USB device number 7 using ehci_hcd
[185475.472994] hub 2-1:1.0: port 2 not reset yet, waiting 10ms
[185475.547776] usb 2-1.2: default language 0x0409
[185475.548612] usb 2-1.2: udev 7, busnum 2, minor = 134
[185475.548616] usb 2-1.2: New USB device found, idVendor=152d, idProduct=2338
[185475.548618] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[185475.548620] usb 2-1.2: Product: USB to ATA/ATAPI bridge
[185475.548622] usb 2-1.2: Manufacturer: JMicron
[185475.548623] usb 2-1.2: SerialNumber: 000001D91880
[185475.548770] usb 2-1.2: usb_probe_device
[185475.548773] usb 2-1.2: configuration #1 chosen from 1 choice
[185475.549117] usb 2-1.2: adding 2-1.2:1.0 (config #1, interface 0)
[185475.549399] usb-storage 2-1.2:1.0: usb_probe_interface
[185475.549405] usb-storage 2-1.2:1.0: usb_probe_interface - got id
[185475.550000] scsi10 : usb-storage 2-1.2:1.0
[185476.551237] scsi 10:0:0:0: Direct-Access     WDC WD50 00BEVT-75A0RT0        PQ: 0 ANSI: 2 CCS
[185476.551678] sd 10:0:0:0: Attached scsi generic sg2 type 0
[185476.552069] sd 10:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[185476.552819] sd 10:0:0:0: [sdb] Write Protect is off
[185476.552824] sd 10:0:0:0: [sdb] Mode Sense: 28 00 00 00
[185476.553690] sd 10:0:0:0: [sdb] No Caching mode page present
[185476.553695] sd 10:0:0:0: [sdb] Assuming drive cache: write through
[185476.556210] sd 10:0:0:0: [sdb] No Caching mode page present
[185476.556213] sd 10:0:0:0: [sdb] Assuming drive cache: write through
[185478.233649]  sdb: sdb1 sdb2 sdb3
[185478.236550] sd 10:0:0:0: [sdb] No Caching mode page present
[185478.236558] sd 10:0:0:0: [sdb] Assuming drive cache: write through
[185478.236565] sd 10:0:0:0: [sdb] Attached SCSI disk

Les lignes surlignés vous donnent les infos nécessaires (taille, et identification du disque)
On identifie la partition qui nous intéresse à l’aide de fdisk:

fdisk -l /dev/sdb

Disque /dev/sdb : 500.1 Go, 500107862016 octets, 976773168 secteurs
Unités = secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0x1c6264cf

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdb1              63       80324       40131   de  Dell Utility
/dev/sdb2   *       81920    30801919    15360000    7  HPFS/NTFS/exFAT
/dev/sdb3        30801920   976771119   472984600    7  HPFS/NTFS/exFAT

On a ici la partition de boot qui se trouve en /dev/sdb2 et sûrement une partition contenant les documents en /dev/sdb3.
On identifie le système de fichier sur la partition:

blkid /dev/sdb2
/dev/sdb2: LABEL="RECOVERY" UUID="6AD2B230D2B1FFFD" TYPE="ntfs"
blkid /dev/sdb3
/dev/sdb3: LABEL="OS" UUID="E60AB6450AB61293" TYPE="ntfs"

2/ On utilise les smartmontools pour regarder la santé du disque:

ulysse alex # smartctl -H /dev/sdb
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.7.10-gentoo-r1] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Si tout s’est bien passé, vous devriez voir le mot PASSED sur la dernière ligne.
Puis on se lance sur les tests plus longs:

ulysse alex # smartctl -t long /dev/sdb
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.7.10-gentoo-r1] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 62 minutes for test to complete.
Test will complete after Sat May 11 19:34:33 2013

En enfin, une fois le test terminé (comptez environ un quart d’heure de plus pour être sûr), on lance la commande suivante pour obtenir les résultats:

ulysse alex # smartctl -l selftest /dev/sdb
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.7.10-gentoo-r1] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%      5464         -
# 2  Short offline       Completed without error       00%      5463         -

3/ on tente un montage en lecture seule pour être certain d’agir sur la bonne partition:

mount -o ro -t ntfs /dev/sdb3 /mnt/usb

Ici, on n’a pas le soucis de montage du disque. Cela fonctionne. Le problème est que le disque contient pas mal de secteurs défectueux.
Une fois la partition identifiée, on démonte afin de commencer le traitement.

umount /mnt/usb

On va avoir besoin d’un autre disque de bonne taille et formaté selon un système de fichier permettant de stocker de gros fichiers.
on monte donc le disque qui devra recevoir la copie de travail.

mount /dev/sdc1 /mnt/rescue

Dans un premier temps, on peut essayer de déterminer si la partition concernée contient des secteurs défectueux (ceci en mode lecture seule):

badblocks -v /dev/sdb3 > /mnt/rescue/bb_sdc.lst
Vérification des blocs 0 à 976761559
Vérification des blocs défectueux (test en mode lecture seule) :   0.05% effectué, 15:12 écoulé. (24/0/0 erreurs)

Cette opération prend pas mal de temps…
En fait, vous pouvez vous en passer au profit de la prochaine étape car ddrescue utilisé avec un fichier de log permet via ddrescuelog de transformer ce fichier de log en fichier au format badblock.

Puis, on va créer une image la plus fidèle possible de la partition contenant les données que l’on souhaite récupérer. Pour cela, on utilise ddrescue pour commencer la récupération puis ddrescuelog pour convertir les logs en liste badblock que l’on pourra utiliser ultérieurement dans la réparation du système de fichiers:

ddrescue -r 3 /dev/sdb3 /mnt/rescue/sdb3.img /mnt/rescue/sdb3.log
ddrescuelog -l -b4096 /mnt/rescue/sdb3.log > /mnt/rescue/sdb3.badblocks

Cette opération peut prendre plusieurs heures, donc vous pouvez vous mettre sur autre chose en attendant. Si l’opération s’arrête sur une erreur,
vous pouvez toujours la relancer telle quelle. Le fichier de log assurera la suite et la récupération reprendra là où elle s’est arrêtée.

Après vous devez utiliser le logiciel de réparation adapté à votre système de fichier. Il sera disponible normalement sous la dénomination:
fsck.le_systeme_de_fichier, par expl:
fsck, fsck.ext4, fsck.jfs, fsck.reiserfs,
fsck.cramfs, fsck.ext4dev, fsck.minix, fsck.vfat,
fsck.ext2, fsck.hfs, fsck.msdos, fsck.xfs,
fsck.ext3, fsck.hfsplus, fsck.reiser4, fsck_hfs

Ces utilitaires vous permettrons de ré-utiliser le fichier liste des badblocks:

fsck.MONFS -f -l /mnt/rescue/sdb3.badblocks /mnt/rescue/sdb3.img

(Vous devrez bien entendu remplacer MONFS par une des valeurs de la liste ci-dessus)
Ici, la page man de ces utilitaires vous donnera accès aux options spécifiques des systèmes de fichiers utilisés

Certains autres par contre seront des outils à part comme:
btrfsck ou ntfsck/ntfsfix

Dans le cas envisagé ici, on a:

ntfsfix -b /mnt/rescue/sdb3.img

L’option -b permet de nettoyer les mauvais secteurs. Si le volume persiste à ne pas vouloir se monter, vous pouvez utiliser l’option -d de ntfsfix qui efface le drapeau “dirty” du volume.

Enfin après tout ceci, il nous reste à monter l’image en lecture seule:

mount -o loop,ro -t ntfs /mnt/rescue/sdb3.img /mnt/cdrom

Et là, normalement, tout se trouvera dans le répertoire /mnt/cdrom.

Partie à réaliser:
* Récupération de fichiers effacés ou perdus

Ressources:

Be Sociable, Share!

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>