Comment estimer les boucles / temps pour terminer GNU ddrescue (1.18.1) en utilisant l'état actuel?


9

Contexte / Contexte:

J'exécute actuellement GNU ddrescue 1.18.1 pour récupérer des données à partir d'un périphérique USB qui a subi une déconnexion de câble pendant que j'écrivais une image de disque virtuel sur la partition disk2s1. Au départ, je récupère ma deuxième partition (disk2s2) et je remarque que j'ai atteint la troisième phase (fractionnement). Je place l'image sur un stockage réseau.

Question:

J'ai remarqué que cette phase boucle. Existe-t-il un moyen de calculer le nombre de boucles que je suis susceptible de rencontrer, compte tenu de mes informations d'état actuelles (je ne montre que deux erreurs)?

Statut:

statut

Mettre à jour / modifier:

Je suis donc toujours très intéressé par la façon dont on pourrait estimer les boucles / temps pour l'achèvement en utilisant l'outil ddrescue. D'après les commentaires, j'ajoute une évaluation d'un fichier journal pour ma partition disk2s1 car il est en cours d'exécution (le disk2s2 s'est terminé après 14,5 heures, avec une interruption utilisateur pendant environ 6 heures).

part1-log

Journal de partition terminé

Pour la partition qui vient de s'achever, voici le résultat de l'inspection du journal.

photo-log

Référence (notes de l'algorithme ddrescue):

4 Algorithme


GNU ddrescue n'est pas un dérivé de dd, ni lié à dd de quelque manière que ce soit, sauf que les deux peuvent être utilisés pour copier des données d'un périphérique à un autre. La principale différence est que ddrescue utilise un algorithme sophistiqué pour copier les données des disques défectueux, leur causant le moins de dommages supplémentaires possible.

Ddrescue gère efficacement l'état du sauvetage en cours et essaie de sauver les bonnes pièces en premier, en planifiant les lectures dans les zones défectueuses (ou lentes) pour plus tard. Cela maximise la quantité de données qui peuvent être finalement récupérées à partir d'un disque défectueux.

L'utilitaire dd standard peut être utilisé pour enregistrer les données d'un disque défectueux, mais il lit les données de manière séquentielle, ce qui peut épuiser le disque sans rien sauver si les erreurs se trouvent au début du disque.

D'autres programmes lisent les données de manière séquentielle mais passent à des lectures de petite taille lorsqu'ils trouvent des erreurs. C'est une mauvaise idée car cela signifie passer plus de temps dans les zones d'erreur, endommager la surface, les têtes et la mécanique d'entraînement, au lieu d'en sortir le plus rapidement possible. Ce comportement réduit les chances de récupérer les bonnes données restantes.

L'algorithme de ddrescue est le suivant (l'utilisateur peut interrompre le processus à tout moment, mais sachez qu'un mauvais disque peut bloquer ddrescue pendant une longue période jusqu'à ce que le noyau abandonne):

1) Lire éventuellement un fichier journal décrivant l'état d'un sauvetage en plusieurs parties ou précédemment interrompu. Si aucun fichier journal n'est spécifié ou est vide ou n'existe pas, marquez tous les domaines de secours comme non essayés.

2) (Première phase; copie) Lisez les parties non essayées du fichier d'entrée, en marquant les blocs en échec comme non coupés et en les dépassant. Sautez également au-delà des zones lentes. Les zones ignorées sont essayées plus tard dans deux passes supplémentaires (avant le rognage), en inversant la direction après chaque passe jusqu'à ce que tout le domaine de sauvetage soit essayé. La troisième passe est une passe de balayage, avec saut désactivé. (Le but est de délimiter rapidement les grandes erreurs, de garder le fichier journal petit et de produire de bons points de départ pour le découpage). Seules les zones non essayées sont lues en gros blocs. Le détourage, le fractionnement et la nouvelle tentative se font secteur par secteur. Chaque secteur est essayé au maximum deux fois; le premier de cette étape (généralement dans le cadre d'une lecture de bloc volumineux, mais parfois en tant que lecture d'un seul secteur), le second d'une des étapes ci-dessous en tant que lecture d'un seul secteur.

3) (Deuxième phase; ajustement) Lisez un secteur à la fois à partir du bord d'attaque du plus petit bloc non ajusté, jusqu'à ce qu'un secteur défectueux soit trouvé. Ensuite, lisez en arrière un secteur à la fois à partir du bord de fuite du même bloc, jusqu'à ce qu'un mauvais secteur soit trouvé. Pour chaque bloc non coupé, marquez les secteurs défectueux trouvés comme mauvais secteur et marquez le reste de ce bloc comme non divisé sans essayer de le lire. Répétez jusqu'à ce qu'il n'y ait plus de blocs non coupés. (Les gros blocs non rognés sont produits par concaténation de plus petits blocs, et sa fraction de bonnes données sur les bords est donc plus petite).

4) (Troisième phase; Division) Lisez en avant un secteur à la fois à partir du centre du plus grand bloc non divisé, jusqu'à ce qu'un secteur défectueux soit trouvé. Ensuite, si le mauvais secteur trouvé n'est pas le premier essayé, relisez un secteur à la fois à partir du centre du même bloc, jusqu'à ce qu'un mauvais secteur soit trouvé. Si le fichier journal est plus grand que «--logfile-size», lisez séquentiellement les plus grands blocs non divisés jusqu'à ce que le nombre d'entrées dans le fichier journal tombe en dessous de «--logfile-size». Répétez jusqu'à ce que tous les blocs non divisés restants aient moins de 7 secteurs. Ensuite, lisez les blocs non divisés restants de manière séquentielle.

5) (Quatrième phase; nouvelle tentative) Essayez éventuellement de relire les secteurs défectueux jusqu'à ce que le nombre spécifié de tentatives soit atteint. Chaque mauvais secteur est essayé une seule fois à chaque passage. Ddrescue ne peut pas savoir si un secteur défectueux est irrécupérable ou s'il sera éventuellement lu après quelques tentatives.

6) Vous pouvez éventuellement écrire un fichier journal pour une utilisation ultérieure.

La taille d'erreur totale («errsize») est la somme des tailles de tous les blocs non tronqués, non fractionnés et de mauvais secteur. Il augmente pendant la phase de copie et peut diminuer pendant le rognage, le fractionnement et la nouvelle tentative. Notez que lorsque ddrescue divise les blocs en panne, les rendant plus petits, la taille totale des erreurs peut diminuer tandis que le nombre d'erreurs augmente.

Le fichier journal est périodiquement enregistré sur le disque, ainsi que lorsque ddrescue se termine ou est interrompu. Ainsi, en cas d'accident, vous pouvez reprendre le sauvetage avec peu de recopie. L'intervalle entre les enregistrements varie de 30 secondes à 5 minutes selon la taille du fichier journal (les fichiers journaux plus volumineux sont enregistrés à des intervalles plus longs).

En outre, le même fichier journal peut être utilisé pour plusieurs commandes qui copient différentes zones du fichier d'entrée et pour plusieurs tentatives de récupération sur différents sous-ensembles. Voir cet exemple:

Sauvez d'abord la partie la plus importante du disque. ddrescue -i0 -s50MiB / dev / hdc fichier image hdd ddrescue -i0 -s1MiB -d -r3 / dev / hdc fichier image hdd

Ensuite, sauvez quelques zones clés du disque. ddrescue -i30GiB -s10GiB / dev / hdc fichier image hdd ddrescue -i230GiB -s5GiB / dev / hdc fichier image hdd

Maintenant, sauvez le reste (ne recopiez pas ce qui est déjà fait). ddrescue / dev / hdc fichier image hdd ddrescue -d -r3 / dev / hdc fichier image hdc


le disque est-il toujours connecté sous le même nom de périphérique? De plus, vous ne devriez en avoir besoin ddrescueque si le disque contient des blocs défectueux, qui ne seraient pas causés par une "déconnexion du câble". Si vous avez des problèmes de câble, essayez simplement un autre câble ...
frostschutz

@TommieC. pouvez-vous essayer ddrescuelog -t YourLog.txtdans un autre terminal?
Simply_Me

@Simply_Me Veuillez voir la question mise à jour reflétant deux résultats.
Tommie C.

@frostschutz Veuillez voir la question mise à jour pour plus de détails. La connexion par câble perdue s'est produite pendant l'écriture du disque et a provoqué des problèmes avec la table de partition. Le câble lui-même n'est pas endommagé.
Tommie C.

La déconnexion du câble provoquera généralement des erreurs logiques (c'est-à-dire que les données sur le disque ne sont pas valides à 100%), mais ne causera pas de problèmes physiques avec le lecteur - à moins que vous ne le laissiez tomber en même temps. ddrescuene peut qu'essayer de récupérer des problèmes physiques et n'aidera pas du tout avec les erreurs logiques. Pour ce dernier, essayez fsckou similaire ..
Udo G

Réponses:


6

Même si la question a été posée il y a 10 mois, la réponse peut être pertinente car le cycle de récupération peut toujours être en cours en fonction de quelques facteurs! Sans jeu de mots.

La raison en est que l'estimation du temps est presque impossible, mais parfois vous pouvez avoir une idée approximative comme suit. L'une des raisons les plus évidentes est que vous ne pouvez pas prédire combien de temps il faudra au lecteur pour lire un secteur défectueux et si vous voulez que ddrescue lise et réessaye chacun, cela peut prendre très longtemps. Par exemple, j'exécute actuellement une récupération sur un petit disque de 500 Go qui dure depuis plus de 2 semaines et il me reste peut-être quelques jours. Mais le mien est une situation plus compliquée car le lecteur est crypté et pour lire quoi que ce soit avec succès, je dois m'assurer d'avoir tous les secteurs qui ont des tables de partition, des secteurs de démarrage et d'autres parties importantes du disque. J'utilise des techniques en plus de ddrescue pour améliorer mes chances dans tous les mauvais secteurs. IOW,

Par estimation des "boucles", si vous voulez dire le nombre de tentatives, c'est quelque chose que vous déterminez par les paramètres que vous utilisez. Si vous voulez dire "nombre total de passes", cela est facilement déterminé en lisant à propos de l'algorithme ici .. > man ddrescue </ Algorithme: Comment ddrescue récupère les données

Je vais parler spécifiquement des chiffres dans les captures d'écran que vous avez fournies. D'autres situations peuvent avoir d'autres facteurs qui s'appliquent, alors prenez ces informations comme ligne directrice générale.

Dans l'exemple que vous avez fourni, jetez un œil à l'écran d'état de fonctionnement de ddrescue. Nous obtenons l '"estimation" totale du problème (domaine de sauvetage) par "errsize". Il s'agit de la quantité de données qui "reste à lire". Dans l'exemple, c'est 345 Go. La ligne suivante en bas à droite est "taux moyen". Dans l'échantillon, c'est 583kb / s

Si le "taux moyen" devait rester proche de la stabilité, cela signifie qu'il vous reste 7 jours. 345 Go / (583 ko * 60 * 60 * 24) = 7,18 Cependant, le problème est que vous ne pouvez pas compter sur le 583 ko / s. En fait, plus vous entrez dans la récupération, plus le lecteur ralentit car il lit de plus en plus de zones plus difficiles et fait plus de tentatives. Ainsi, le temps de terminer exponentiellement augmente. Tout cela dépend de la gravité de l'endommagement du lecteur.

L'échantillon que vous avez fourni montre qu'une «lecture réussie» remonte à plus de 10 heures. Cela signifie qu'il n'obtient vraiment rien du lecteur pendant plus de 10 heures. Cela montre que votre disque peut contenir 345 Go (ou une partie) de données. Ce sont de très mauvaises nouvelles pour vous.

En revanche, mon deuxième lecteur de 500 Go qui venait de commencer à me donner des erreurs "SMART", a été copié disque sur disque (avec le fichier journal sur un autre lecteur) et l'opération a pris environ 8 à 9 heures. La dernière partie a ralenti. Mais c'est toujours supportable. Alors que le très mauvais disque, comme indiqué ci-dessus, a bien dépassé les 2 semaines de travail sur 500 Go et a encore environ 4 à 5% à récupérer.

HTH et YMMV

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.