Vérifier l'exactitude des fichiers copiés

14

Après avoir copié disons 50+ Go (30 000 fichiers, y compris différents formats) de fichiers d'un disque dur interne vers un disque externe, est-il possible de savoir si tout a été copié correctement? De plus, si je m'arrête entre les deux en annulant l'opération et que je dis plus tard fusionner en poursuivant l'opération, la correction sera-t-elle corrigée?

Je pourrais utiliser des applications comme back-in-timemais je suis très exigeant dans la copie de fichiers et pour la prochaine fois j'ai l'intention d'utiliser l' copyopération et de dire à la mergeplace de replace. Est-il conseillé lors de la copie d'un grand nombre de fichiers?

Chethan S.
la source
2
vous pouvez trouver une réponse ici .
Takkat

Réponses:

16

J'utilise hashdeep pour vérifier les sauvegardes / restaurations et parfois pour vérifier la corruption du système de fichiers dans un RAID.

La vitesse dépend des fonctions de hachage que vous utilisez (certaines sont plus gourmandes en CPU que d'autres) ainsi que de la vitesse de lecture de vos disques. Sur mon système, je hashdeeppeux traiter ou vérifier environ 1 To / heure avec une vitesse de lecture md5 et 300 Mo / s.


Exemple sur le calcul des sommes de contrôle et leur stockage dans un fichier:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

Paramètres:

  • r - récursif
  • l - utiliser des chemins relatifs
  • c - spécifier la fonction de hachage
  • . - récursif à partir du répertoire courant
  • > - rediriger la sortie vers le fichier spécifié

Voir la page de manuel .


Exemple de vérification des sommes de contrôle et d'impression d'une liste de différences:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

Paramètres:

  • a - audit (comparer avec la liste des sommes de contrôle connues)
  • v- verbeux (pour obtenir une liste des discordances, plusieurs vs signifie plus verbeux)
  • k - fichier de hachages connus

Notez que depuis mars 2016 hashdeepsemble être abandonné .

jg-faustus
la source
14

Cela ressemble à la tâche parfaite pour rsync . Rsync compare et copie des différences.

L' rsyncutilitaire m'est apparu pour la première fois quand j'ai vu votre question. Faire quelque chose comme ci-dessous pourrait rapidement montrer quels fichiers sont dans le répertoire amais pas dans b:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

C'est une bonne option car vous pouvez également comparer le contenu des fichiers pour vous assurer qu'ils correspondent. rsyncL'algorithme delta est optimisé pour ce type de cas d'utilisation. Ensuite, si vous souhaitez faire bcorrespondre le contenu de a, vous pouvez simplement supprimer l' -noption pour effectuer la synchronisation réelle.

Quelques questions connexes:

ddeimeke
la source
1
rsync est certainement l'outil pour ce travail, mais il ne compare pas et ne copie pas les différences, en soi. Il compare les fichiers en utilisant des tailles et des hachages.
Justin Force
@JustinForce Utilisation de la taille? Bien sûr, une taille différente garantit que le fichier n'est pas exactement le même, mais rsync est très polyvalent, il peut éventuellement faire confiance aux métadonnées (comme le temps) pour éviter de relire tous les fichiers. Lors de la copie via le réseau, il calcule un hachage roulant pour détecter finement les parties communes afin d'éviter de les transférer, mais sur le disque local par défaut, les hachages ne jouent pas ce rôle (s'ils sont utilisés du tout). Vous pouvez même lui demander de croire qu'une destination plus courte a déjà un contenu correct et doit simplement être ajoutée, mais restons sur le sujet.
Stéphane Gourichon
3

La situation que vous dites est trop complexe. Bien que vous puissiez écrire un script pour calculer MD5 de tous les fichiers que vous souhaitez copier et ensuite les comparer avec ceux copiés:

Si vous voulez quelque chose de simple et rapide (cela ne fonctionnera pas dans des scénarios très complexes), vous pouvez utiliser Meld

sudo apt-get install meld
puneet
la source
0

Sur le "si tout a été copié correctement", j'utilise un cp (ou mv) modifié qui inclut le checksum (éventuellement stocké dans xattr, donc il ne doit être calculé qu'une seule fois pour la source) http://sourceforge.net/projects / crcsum /

Hans
la source
1
Bien que votre réponse soit correcte à 100%, il est également presque impossible pour un utilisateur débutant de l'implémenter. Par conséquent, veuillez modifier votre réponse et inclure les étapes de téléchargement, de compilation, d'installation et de désinstallation crccpdans votre réponse! ;-) Vous pouvez toujours laisser le lien en bas de votre réponse comme source pour votre matériel ...
Fabby