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:
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).
Journal de partition terminé
Pour la partition qui vient de s'achever, voici le résultat de l'inspection du journal.
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
ddrescuelog -t YourLog.txt
dans un autre terminal?
ddrescue
ne 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 fsck
ou similaire ..
ddrescue
que 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 ...