Fusion efficace de 2 sorties de secours du même lecteur

2

J'essaie de sauver une partition d'un disque dur défaillant de 500 Go en /dev/sdbutilisant ddrescue sur un deuxième disque de 1 To. La commande ddrescue que j'utilise pour la première passe est la suivante:

ddrescue -n /dev/sdb2 core.img core.log

suivi du second passage:

ddrescue -d -r 3 /dev/sdb2 core.img core.log

Le problème est que j'ai incorrectement saisi le nom de l'image pour la deuxième commande. Au lieu de cela core.img, j’écris core.inget je ne le réalise pas avant le lendemain matin, lorsque la deuxième passe est terminée et que core.log est écrasé pour signaler un succès de 100%.

Maintenant, je suis coincé avec 2 fichiers massifs. Il n'est pas possible de relancer toute la tâche, car je sauve toujours sdb3. J'ai déjà vérifié avec hexeditet le fichier 2 se complimente (c'est-à-dire que si l'offset 0x5000 à 0x7000 core.imgest rempli de zéro, le même offset core.ingest rempli avec les données réelles, et vice versa.)

Je pense dd-ment le core.imgà /dev/sdc2(le disque de remplacement pour que sdbje préparais) puis copier en quelque sorte que les octets non nuls core.ingpour /dev/sdc2mais je ne sais pas comment puis - je copier uniquement les octets non nuls, et en utilisant ce, comme les solutions I peuvent penser sont très lourdes et prendront une éternité à compléter.

Pour référence, j'exécute SystemRescueCD 4.9.6, basé sur Gentoo, sous sdb2NTFS.

Dalva
la source
2
Salut dariel; Je vois que vous avez également posté ceci sur les sites Unix et Linux ; ce n'est pas permis selon la FAQ . La question elle-même est bonne, mais elle ne devrait concerner que l'un ou l'autre. Comme le dit la réponse de la FFAQ, si vous n'obtenez pas de réponse et que vous pensez qu'un autre site conviendrait mieux, vous pouvez demander à un mod de migrer la question. J'espère que cela vous aidera :)
bertieb
Ah, merci de me l'avoir notifié, je l'ai posté car je pense que cette question convient mieux au site de la Ligue. Je vais supprimer celui sur le site Unix & Linux pour me conformer aux règles
Dalva
Pas de problème, si c'est votre choix, cela vaut la peine de passer à un vote positif, car la question est bien formulée (car elle est à +3 sur U & L, elle a été bien accueillie; mais n'a pas +1 à l'avance car il était déloyal de passer à autre chose contre les règles) . C'est sur le sujet soit, le choix vous appartient :)
bertieb

Réponses:

1

Comment puis-je fusionner deux sauvetages différents?

(Cela suppose que GNU ddrescue)

tl; dr :

  1. Générez un mapfile / logfile pour la première copie: ddrescue --generate-mode infile outfile mapfile

  2. Créez une copie fusionnée de 2nd → 1st comme décrit dans un message envoyé à la ddrescueliste de diffusion :ddrescue -m logfile2 image2 image1 logfile1


1. Générez un fichier journal pour la première image

Ceci est légèrement compliqué car vous n’avez effectivement pas de fichier journal pour la première passe. Cependant, vous pouvez en générer un:

Lorsque l' --generate-modeoption ddrescue est appelée, elle fonctionne en "mode de génération", ce qui diffère du "mode de secours" par défaut. En d’autres termes, si vous utilisez l’option '--generate-mode', ddrescue ne sauve rien. Il essaie seulement de générer un fichier map pour une utilisation ultérieure.

...

Ne désespérez pas (encore). Ddrescue peut dans certains cas générer un mapfile approximatif, à partir de infile et une copie (partielle) dans outfile, qui est presque aussi bon qu'un mapfile exact. Cela se fait simplement en supposant que les secteurs contenant tous les zéros n’ont pas été sauvés .

... vous pouvez générer un mapfile approximatif avec cette commande:

ddrescue --generate-mode infile outfile mapfile

(c'est moi qui souligne)

du manuel GNUddrescue ; section 12, ' Mode de génération '.

Ainsi, vous pouvez le faire pour la première image (que je suggère de renommer pour éviter toute confusion, par exemple core-1.img):

ddrescue -G /dev/sdb2 core-1.img core-1.log

"Je suis encore en train de lire /dev/sdb, est-ce que la génération d'un journal va empêcher cela?"

Notez que ddrescuereconstruit principalement à partir de outfile(dans ce cas core-1.img), avec très peu de lectures infile. J'ai testé cela avec inotifywatch:

$ inotifywatch 840-linux.img # infile
$ inotifywatch 840-linux2.img # outfile
$ inotifywatch 840-linux2.log
$ ddrescue -G 840-linux.img 840-linux2.img 840-linux2.log

total  close_nowrite  open  filename
6      3              3     840-linux.img
17467  17465   1              1     840-linux2.img

total  access  modify  close_write  close_nowrite  open  filename
196    1       189     2            1              3     840-linux2.log

Il est donc prudent de l'exécuter pendant qu'un autre processus est en cours d'exécution sdb(dans le cas d'OP, une autre tentative de sauvetage sur une partition différente ), car les lectures sont négligeables.

2. Fusionner les deux copies partielles

Ce genre de situation a déjà surgi :

Alors maintenant, j'ai deux images partielles du lecteur qui ne se chevauchent généralement pas ... et deux fichiers journaux correspondants pour les accompagner qui définissent les bonnes zones et les zones lentes ignorées.

Heureusement, ils peuvent être fusionnés en utilisant --domain-mapfile:

--domain-mapfile=file
   Restrict the rescue domain to the blocks marked as 
   finished in the mapfile file. This is useful for 
   merging partially recovered images of backups, or if 
   the destination drive fails during the rescue. Use 
   '-' as file to read from standard in`

Et la solution au problème similaire impliquait cette option :

vous pouvez fusionner les images en tapant:

cd dir1
ddrescue -m dir2/logfile dir2/image image logfile

Cela crée les fichiers dir1 / logfile dir1 / image avec toutes les données actuellement sauvées. Ensuite, vous pouvez continuer le sauvetage par exemple comme ceci:

Dans votre cas, en supposant que vous ayez généré un fichier journal pour, que vous les ayez core.imgétiquetés 1, et que vous ayez conservé le core.inget core.logcomme 2(pour éviter toute confusion!):

ddrescue -m core-2.log core-2.img core-1.img core-1.log
Bertieb
la source
Parlant de confusion, cette question a été postée sur U & L. J'ai copié ma réponse à partir de là en cas de suppression. Voir cette partie du chat pour la réf . Je suis heureux de supprimer cette réponse si les réponses croisées ne respectent pas les consignes!
Bertieb
Merci, une question cependant, l' -Goption fera-t-elle lire à /dev/sdb2nouveau ddrescue ? Comme je suis en train de récupérer une autre partition du même lecteur. Et j’ai demandé que celle que je publie sur Unix et Linux soit supprimée, car je pense que cette question convient mieux à ce site.
Dalva
Cela ne devrait pas , car il suffit de lire outfilepour générer le mapfile; Je suppose que l’utilisation de infileest pour la cohérence / la vérification de l’image a un sens pour le outfile. Cependant, je n'ai pas testé cela; Je peux l'essayer sur un fichier image que j'ai et voir. Mise à jour : AFAICT, il semble générer à partir de outfileseul.
Bertieb
J'ai mis à jour la réponse avec cette inotifyinformation.
Bertieb
Merci pour les informations mises à jour et la réponse! Les méthodes que vous spécifiez doivent absolument fonctionner, alors je vais marquer votre réponse comme solution
Dalva