Récupération plus rapide à partir d'un disque avec des secteurs défectueux

13

Récemment, j'ai essayé ddde passer 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 cela a ddperdu beaucoup de temps quand il a rencontré un mauvais bloc. Dans mon cas d'utilisation, je paierais volontiers avec une certaine perte de données pour un résultat plus rapide.

Existe-t-il un moyen d'accélérer la gestion des erreurs? Peut-être un ajustement du noyau (en disant au disque dur de faire moins d'efforts pour lire un bloc)? Ou un autre programme?

Pas dans la liste
la source

Réponses:

29

Tout d'abord, pour le logiciel à utiliser: vous pouvez essayer d'utiliser ddrescueau lieu de dd.

ddrescuedispose d'un commutateur pour effectuer uniquement un nombre limité de tentatives. Il peut également utiliser un fichier journal, il enregistre donc les blocs défectueux. Si vous vous sentez plus tard comme faire plus relances, vous pouvez utiliser le même fichier journal pour exécuter à ddrescue nouveau avec des options différentes (comme plus retries) et une nouvelle tentative que les blocs nécessaires.

Exemple d'utilisation:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Depuis la ddrescuepage info:

   -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 à utiliser ddrescue:


Éditer

Dans le cas où le disque dur lui - même prend trop de temps, vous pouvez essayer d'activer une fonctionnalité appelée TLER ( T ime L imited E rror R ECOUVREMENT) ou CCTL ( C ommand C ACHEVEMENT T ime L imit). Tous les disques durs ne l'ont pas, mais vous pouvez l'utiliser pour limiter le temps sur le contrôleur HDD lui-même. Cette approche peut être combinée avec l'utilisation ddrecue, bien sûr.

Linux a un outil appelé smartctl(dans le smartmontoolspackage).

Pour vérifier le paramètre actuel ("désactivé" signifie une durée illimitée, ce que vous ne voulez pas):

# smartctl -l scterc /dev/sda

Pour le définir sur une valeur fixe (5,0 secondes dans cet exemple. Le définir sur 0 désactive TLER):

# smartctl -l scterc,50,50 /dev/sda

Source pour TLER: http://en.wikipedia.org/wiki/TLER

Slizzered
la source
2
Un autre outil à regarder est dc3dd qui est une version médico-légale de dd
fpmurphy
oh gentil, je ne connaissais pas cet outil!
Slizzered
2
Je n'avais aucune idée de ce TLER, mais cela m'a vraiment sauvé la journée. Sur mon disque, ceux-ci étaient désactivés et chaque fois que j'exécutais ddrescue, mon disque était bloqué après quelques secondes. Mise hors tension, sous tension et prochain essai. Maintenant, je le mets à 2 secondes avec la commande que vous mentionnez et il ne bloque plus jamais, il saute certains secteurs, mais au moins continue sans interruption.
Sven Rieke
2

J'ai eu de bons résultats avec des disques autrement illisibles avec ce logiciel.

http://www.cgsecurity.org/wiki/TestDisk

Celui-ci est également un outil de récupération solide. Il peut obtenir des fichiers même si votre table de fichiers est cassée ou s'ils ont été supprimés. C'est un putain de bon outil de criminalistique. Il vide les choses d'une manière vraiment non organisée, mais vous pouvez déplacer toutes les données.

http://www.cgsecurity.org/wiki/PhotoRec

fu9ar
la source
2

Pour une option rapide et rapide pour sauver le disque, vous pouvez utiliser un fichier de script sh et exécuter le fichier avec sh. Il contient cette ligne, répétez simplement sudo ddrescueet sleep 3quelques fois de plus. Le sommeil est utilisé pour faire reposer le lecteur 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 nouvelles tentatives
  • -e +0: quitter à la première erreur
  • -T 1s: quitter avec 1 seconde d'échec en lecture
  • -d : E / S directes
  • -n : pas de grattage

Vous pouvez utiliser une -Rfois la finition avec l'option -Aune fois, cela inversera et supprimera toutes les erreurs et recommencera à l'envers. Signifie qu'il lira les erreurs différemment.

Dealazer
la source
0

Cela dépend de la taille de votre disque dur et du nombre de blocs défectueux qu'il contient. Il me faut généralement 20 minutes pour sauvegarder en utilisant DD un hd sain de 1 téra. Avec de mauvais blocs que je viens de récupérer ce matin, cela m'a pris deux fois plus de temps. J'avais des problèmes de duplication (sauvegarde d'un disque) avec environ 30 blocs défectueux. La première chose que j'ai faite est de sauvegarder des fichiers en utilisant Filezilla normal pour sauvegarder toutes les bonnes données. J'ai remarqué qu'un gros fichier ne copiait pas correctement (arrêt au milieu et redémarrage du transfert). Heureusement, j'ai une sauvegarde précédente du même fichier. Pour dupliquer le disque, j'ai dû trouver les blocs défectueux sur le disque en utilisant cette procédure:

Trouvez d'abord le disque problématique identifiant les informations HD à l'aide de fdisk -l

2e si disons que votre disque est / dev / sdb, vous devez exécuter la commande badblocks -v / dev / sdb, il répertoriera tous vos blocs défectueux sur le lecteur. Heureusement, il y en aura quelques-uns. Si aucun bloc défectueux n'est trouvé, vos blocs de lecteur sont OK et doivent trouver autre chose. Ma taille de bloc est 512, donc j'utilise ce numéro par défaut pour exécuter DD

3ème chaque bloc est de taille 512, donc ce que j'ai fait est de définir bs = 512

Chaque fois que j'exécute DD régulièrement comme je le fais toujours, mes données, après les erreurs, seront corrompues. J'utilise donc les paramètres comme expliqué sur la page https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html rechercher la partie "Pour les disques défaillants".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Ça a pris du temps. Chaque mauvais bloc rencontré sonne comme un coup sur le disque défectueux. Il copie copie bloc par bloc, et à travers tous mes mauvais blocs a fait le même bruit. La quantité de fois a fait du bruit, car il a trouvé un autre bloc défectueux et vous indique le message d'erreur d'affichage. Ce que fait `` conv = noerror, sync '' , c'est de supprimer les mauvaises lectures avec des NUL, tandis que `` iflag = fullblock '' prend en charge les lectures courtes, mais conserve la synchronisation de vos données jusqu'à la fin. Aucune corruption du tout, il ne copie tout simplement pas les blocs défectueux et le remplit de NUL vides.

Une fois la copie avec DD terminée, je remplace simplement ce mauvais fichier en rétablissant Filezilla à partir d'une sauvegarde antérieure et tout fonctionnait bien. J'espère que cela sera utile pour les autres essayant de sauvegarder les disques défectueux.

REMARQUE: Mes mauvais blocs étaient à peu près proches les uns des autres. Environ 4 blocs à la fois ensemble dans des groupes où détecté mauvais. Si vos blocs sont partout sur le disque, plusieurs fichiers pourraient être affectés. Heureusement, dans mon cas, un gros fichier de 4 Go de base de données n'a été affecté.

Luis H Cabrejo
la source
1
Si la même réponse répond à plusieurs questions, il y a de fortes chances que les questions soient en double. Si c'est le cas, il est préférable de répondre à l'une et de signaler l'autre comme un double possible. Cela évite une multitude de réponses répétitives, et le fait de relier les questions permet aux lecteurs de trouver plus facilement toutes les réponses.
fixer1234
Pas vraiment, mais si vous le pensez, faites-le-moi savoir afin que j'efface ma réponse. J'ai cherché partout la bonne solution, mais j'ai trouvé un moyen de résoudre un problème avec mon serveur. Il y a plusieurs autres questions similaires, qui n'ont pas répondu à mon problème. Jusqu'à présent, j'ai trouvé une douzaine de questions similaires dans le monde. Je viens de répondre à quelques-uns pour écrire mon expérience et comment j'ai pu la résoudre. Faites-moi savoir si vous souhaitez que j'efface ma réponse et je serai heureux de le faire. Cordialement.
Luis H Cabrejo