web-dev-qa-db-fra.com

Vérifier l'exactitude des fichiers copiés

Après avoir copié, disons plus de 50 Go (30 000 fichiers, y compris différents formats) de fichiers d’un disque dur interne vers un lecteur externe. Existe-t-il un moyen 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 fusion lors de la poursuite de l'opération, l'exactitude prendra-t-elle un coup?

Je pourrais utiliser des applications telles que back-in-time mais je suis très difficile en copiant des fichiers et pour la prochaine fois, je compte utiliser l'opération copy et dire merge au lieu de replace. Est-il conseillé de copier un grand nombre de fichiers?

14
Chethan S.

J'utilise hashdeep pour vérifier les sauvegardes/restaurations et occasionnellement 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 utilisent plus le processeur que d’autres) ainsi que de la vitesse de lecture de vos disques. Sur mon système, hashdeep peut traiter ou vérifier environ 1 To/heure avec une vitesse de lecture md5 et 300 Mo/s.


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

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

Paramètres:

  • r - récursif
  • l - utilise des chemins relatifs
  • c - spécifie la fonction de hachage
  • . - récursif à partir du répertoire en cours
  • > - redirige la sortie vers le fichier spécifié

Voir le page de manuel .


Exemple de vérification de 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 - verbose (pour obtenir une liste des incohérences, plusieurs vs signifie plus prolixe)
  • k - fichier de hachages connus

Notez que depuis mars 2016, hashdeep semble être abandonné .

16
j-g-faustus

Cela semble être la tâche idéale pour rsync . Rsync compare et copie les diffs.

L'utilitaire rsyncm'est apparu lorsque j'ai vu votre question. Faire quelque chose comme ci-dessous pourrait rapidement montrer quels fichiers sont dans le répertoire amais pas dans bname__:

$ 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. rsyncname L'algorithme delta de __ est optimisé pour ce type de cas d'utilisation. Ensuite, si vous souhaitez que bcorresponde au contenu de aname__, vous pouvez simplement supprimer l'option -n pour effectuer la synchronisation réelle.

Quelques questions connexes:

13
ddeimeke

Si les applications de l'interface graphique suggérées ci-dessus à Outil de comparaison de fichiers et de répertoires? ne le faites pas à votre place, essayez diff -rq /path/to/one /path/to/other pour lire à travers les deux répertoires en silence, en enregistrant uniquement les différences avec l'écran.

8
Amanda

La situation que vous dites est trop complexe. Bien que vous puissiez écrire un script pour calculer le MD5 de tous les fichiers que vous voulez copier, puis 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
3
puneet

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

0
Hans