Récemment, j’ai essayé de dd
d’un disque dur malsain à un fichier. J'ai utilisé dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync
. Mon problème était que dd
perdait beaucoup de temps lorsqu'il rencontrait un mauvais bloc. Dans mon cas d'utilisation, je paierais volontiers une perte de données pour un résultat plus rapide.
Existe-t-il un moyen d'accélérer le traitement des erreurs? Peut-être un noyau Tweak (dire au disque dur de faire moins d'effort pour lire un bloc)? Ou un autre programme?
Tout d’abord, pour le logiciel à utiliser: vous pouvez essayer d’utiliser ddrescue
au lieu de dd
name__.
ddrescue
a un commutateur pour ne faire qu'un nombre limité de tentatives. Il peut également utiliser un fichier journal pour enregistrer les blocs défectueux. Si vous avez envie de faire plusieurs tentatives plus tard, vous pouvez utiliser le fichier same pour exécuter ddrescue
again avec différentes options (comme plus de tentatives) et ne retentera que les blocs nécessaires.
Exemple d'utilisation:
# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log
De la page info ddrescue
name__:
-n, --no-scrape
Skip the scraping phase. Avoids spending a lot of time
trying to rescue the most difficult parts of the file.
-r, --retry-passes=<n>
Exit after given number of retry passes. Defaults to 0.
-1 means infinity. Every bad sector is tried only once
in each pass. To retry bad sectors detected on a previous
run, you must specify a non-zero number of retry passes.
Voici quelques sources supplémentaires pour utiliser ddrescue
name__:
info ddrescue
Si le disque dur lui-même prend trop de temps, vous pouvez essayer d'activer une fonctionnalité appelée TLER (T imé L imité E erreur R conversion) ou CCTL (C commande C achèvement T ime L imit). Tous les disques durs ne l'ont pas, mais vous pouvez l'utiliser pour limiter le temps passé sur le contrôleur de disque dur lui-même. Cette approche peut bien sûr être combinée avec ddrecue
name__.
Linux a un outil appelé smartctl
(dans le paquet smartmontools
name__).
Pour vérifier le réglage actuel ("désactivé" signifie une durée illimitée que vous ne souhaitez pas):
# smartctl -l scterc /dev/sda
Pour le définir sur une valeur fixe (5,0 secondes dans cet exemple. La définir sur 0 désactive TLER):
# smartctl -l scterc,50,50 /dev/sda
Source pour TLER: http://en.wikipedia.org/wiki/TLER
J'ai eu de bons résultats avec des disques autrement illisibles avec ce logiciel.
http://www.cgsecurity.org/wiki/TestDisk
Ce prochain est également un outil de récupération solide. Il peut obtenir des fichiers même si votre table de fichiers est endommagée ou supprimée. C'est un sacré bon outil de criminalistique. Il décharge les choses de manière vraiment désorganisée, mais vous pouvez obtenir toutes les données déplacées.
Pour une option rapide et rapide permettant de récupérer le disque, vous pouvez utiliser un fichier de script sh et l'exécuter avec sh. Elle contient cette ligne, il suffit de répéter Sudo ddrescue
et sleep 3
quelques fois de plus. Le sommeil est utilisé pour que le lecteur se repose quelques secondes:
#! /bin/sh -e
Sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile
sleep 3
Les options utilisées ci-dessus:
-r0
: sans nouvelle tentative-e +0
: sortir à la première erreur-T 1s
: sortir avec 1 seconde d'échec en lecture-d
: E/S directe-n
: aucune éraflureVous pouvez utiliser -R
après avoir terminé avec l'option -A
une fois pour inverser et supprimer toutes les erreurs, puis recommencer à l'envers. Cela signifie qu'il lira les erreurs différemment.