J'essaie de sauver une partition d'un disque dur défaillant de 500 Go en /dev/sdb
utilisant 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.ing
et 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 hexedit
et le fichier 2 se complimente (c'est-à-dire que si l'offset 0x5000 à 0x7000 core.img
est rempli de zéro, le même offset core.ing
est 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 sdb
je préparais) puis copier en quelque sorte que les octets non nuls core.ing
pour /dev/sdc2
mais 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 sdb2
NTFS.
Réponses:
Comment puis-je fusionner deux sauvetages différents?
(Cela suppose que GNU
ddrescue
)tl; dr :
Générez un mapfile / logfile pour la première copie:
ddrescue --generate-mode infile outfile mapfile
Créez une copie fusionnée de 2nd → 1st comme décrit dans un message envoyé à la
ddrescue
liste 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:
(c'est moi qui souligne)
du manuel GNU
ddrescue
; 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
):"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
ddrescue
reconstruit principalement à partir deoutfile
(dans ce cascore-1.img
), avec très peu de lecturesinfile
. J'ai testé cela avecinotifywatch
: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 :
Heureusement, ils peuvent être fusionnés en utilisant
--domain-mapfile
:Et la solution au problème similaire impliquait cette option :
Dans votre cas, en supposant que vous ayez généré un fichier journal pour, que vous les ayez
core.img
étiquetés1
, et que vous ayez conservé lecore.ing
etcore.log
comme2
(pour éviter toute confusion!):la source
-G
option fera-t-elle lire à/dev/sdb2
nouveau 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.outfile
pour générer lemapfile
; Je suppose que l’utilisation deinfile
est pour la cohérence / la vérification de l’image a un sens pour leoutfile
. 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 deoutfile
seul.inotify
information.