{{tag>app ddrescue doc récuperation}}
====== ddrescue ======
Traduction partielle de la documentation officielle de l'outil disponible sur https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html
===== Concepts =====
** Block**: Quantité quelconque de données (séquence continue de données). Un block est caractérisé par une position de départ et une taille. La position de départ et la plus basse position dans le block. La fin du block correspond à la position de départ + sa taille.
**Device**: Périphérique, unité/pièce matérielle pouvant contenir des données. Disques-durs, lecteurs DVD/CD-Roms, clés USB sont des périphériques.
**Sector**: Secteur, c'est le bloc matériel. La plus petite quantité de données accessible sur le périphérique, c'est une caractéristique du périphérique (device).
**Cluster**: Groupe de secteurs consécutifs lus/écrits en une passe.
**Partition**: Un périphérique peut être divisé en zone logiques indépendantes, ce sont les partitions. Chaque partition contient un système de fichier.
**File**: Le fichier est une unité de données nommée. Il est stocké par le système d'exploitation afin d’être retrouvé plus tard via son nom.
**Formats récupérables**
Comme **ddrescue** utilise les bibliothèques standards pour lire les données sur les périphériques seuls les périphériques montables peuvent être récupérés à l'aide de ddrescue. CD-Roms et DVD-Roms peuvent être récupérés mais pas les Compact Disc audio.
**Domaine de restauration**
Bloc ou ensemble de blocs sur lesquels agir. On peut le définir à l'aide des options **%%--input-position%%**, **%%--size%%** et **%%--domain-mapfile%%**. Le domaine de restauration par défaut s’étend sur l'ensemble du fichier en entrée ou du mapfile. Si ddrescue ne peut déterminer la taille du fichier d' entrée le domaine de restauration est définit avec la taille maximale d'un bloc (2^63 -1 soit 8EiOctets - 1 Octet).
ddrescue n'essaiera pas de lire des données hors du domaine de restauration sauf lorsque l’accès direct non aligné est demandé.
La quantité de données restaurée, le nombre de secteurs corrompus etc peuvent variés ou meme devenir nuls dans le cas ou l'on limite le domaine de restauration. Pas d’inquiétude, ils n'ont pas disparus de la récupération mais sont simplement hors du domaine de restauration spécifié par l'utilisateur.
===== Utiliser ddrescue en toute sécurité =====
ddrescue ne diffère pas d'autres outils puissants. Vous avez besoin de comprendre ce qu'il fait et d'appréhender le fonctionnement de quelques éléments des machines afin de l'utiliser correctement et en toute sécurité.
* Ne jamais essayer de récupérer un système de fichier monté en lecture/écriture. La copie résultat pourrait être inutilisable. Le mieux est de ne pas monter du tout le système de fichier pas même en lecture seule.
* Ne jamais essayer de réparer un système de fichier sur un périphérique remontant des erreurs entrées/sorties. Vous perdrez encore davantage de données.
* Si vous utiliser un périphérique ou une partition comme destination, toutes les données stockées seront écrasées.
* Certains systèmes changent les noms des périphériques après redémarrage. Si vous redémarrez, vérifiez bien le nom du périphérique avant de relancer ddrescue.
* Si vous interrompez une restauration de partition et devez redémarrer la machine, prenez soin de bien cacher la partition partiellement restaurée afin que le système ne tente pas un réparation automatique et un montage.
===== Algorithme =====
GNU ddrescue n'est pas un dérivé de **dd**, il n'a pas a y être comparé si ce n'est qu'il peut être utilisé pour copier des données d'un périphérique à un autre. La différence majeure est que ddrescue utilise un algorithme sophistiqué pour copier des données contenu sur un disque défaillant en limitant au maximum les dommages/pertes des données.
L'utilitaire dd peut être utilisé pour sauvegarder les données d'un périphérique défaillant mais il lit séquentiellement les données, ce qui peut endommager le lecteur sans rien récupérer si les erreurs sont au début du disque.
D'autres programmes lisent séquentiellement les données mais basculent sur des tailles de lecture plus petites lorsque ils rencontrent des erreurs. C'est en général une mauvaise idée car cela conduit à passer plus de temps sur une zone défectueuse du disque, endommageant la surface, les têtes et la mécanique du disque au lieu d'essayer de récupérer les données le plus rapidement possible. Ce comportement réduit les chances de pouvoir récupérer les données saines restantes.
L'algorithme de ddrescue est le suivant (l'utilisateur peut interrompre le processus a tout instant mais doit être attentif au fait qu'un périphérique disque endommagé peut bloquer un moment ddrescue avant que le noyau ne rende la main):
- Optionnellement lecture du mapfile décrivant le statut d'une récupération multi-parties ou précédente. Si aucun mapfile n'est précisé, s'il est vide ou n'existe pas, tout le domaine de restauration est marqué comme non essayé **non-tried**.
- **Première phase: la copie** (en 5 passes). Lecture des parties non essayées (**non-tried**) du domaine de restauration dans le fichier d'entrée. Marque les blocs illisibles ou répondant trop lentement comme **non-trimmed** (non arrangé) et passe au delà en laissant un espace. Ces zones délaissées seront essayées plus tard avec 4 passes additionnelles avant abandon (**triming**), inversant le sens de lecture entre chaque passe jusqu'à ce que tout le domaine de restauration ait été essayé.\\ La 2ieme passe délimite les blocs laissés par la première passe. Les passes 3 et 4 tentent de lire dans le même sens les zone délaissées car trop lentes. Pour chaque blocs, les passes 2 à 4 abandonnent le bloc dès la première erreur. La dernière passe est un passe de balayage avec abandon désactivé. L’intérêt des passes multiples est de déterminer de larges zones défectueuses rapidement, sauvegarder en premier les zones les plus prometteuses, garder le fichier map petit et produire un bon point de départ pour le trimming.\\ Seulement les zones **non-tried** sont lues par blocs. Les étapes de **trimming**, **scraping** et **retrying** sont faites secteurs par secteurs. Chaque secteur est essayé au plus 2 fois. La première fois comme partie d'un bloc, la seconde en lecture du secteur seul.
- **Deuxième phase: le trimming**. Le trimming s'effectue en une passe. Pour chaque bloc marqué **non-trimmed** lecture par secteur de l’extrémité du bloc jusqu’à un secteur défaillant, marque le secteur comme mauvais **bad** et le reste du bloc **non-scraped** sans essayer de le lire.
===== Installation =====
Sur une debian like, le paquet à installer via apt est **gddrescue** :
sudo apt-get install gddrescue
La documentation complète est disponible au format info :
info ddrescue
===== Options/arguments usuels =====
* **-f** [Force] obligatoire si le clone est écrit directement sur un périphérique plutôt que dans un fichier.
* **-d** [Direct Access] au périphérique de stockage, non obligatoire et peut générer des erreurs si le système ne supporte pas l'option.
* -R [Reverse Clone] Refait une passe ou commence le clonage par la fin du périphérique. Pratique pour éviter une large zone de secteurs défectueux.
* **-r** [retries] Cette option ne devrait être définie qu' après la première passe de clonage. Réessaye de lire les secteur défectueux.
* **-A** [Try Again] Marque tous les secteurs defectueux du fichier log en non lu et essaye à nouveau d'y accéder.
===== Exemple =====
$ sudo ddrescue /dev/sda1 /data/recovery/sda1.img /data/recovery/journal-sda1.log
Cette commande permettra de cloner la partition /dev/sda1. Le travail de restauration se fera ensuite a partir du clone.
===== Références =====
* https://www.data-medics.com/forum/how-to-clone-a-hard-drive-with-bad-sectors-using-ddrescue-t133.html