Je viens de rsynchroniser 2 000 000 de fichiers (3 To) d'un RAID à un autre.
Je veux m'assurer que mes données sont intactes.
rsync -c
prend très longtemps.
diff
ne me montre pas ce qu'il fait.
Existe-t-il une alternative qui est (a) plus rapide et (b) me montrera les progrès pendant la comparaison?
(Je suis sur Mac et brew search diff
me donne apgdiff colordiff diffstat diffutils fmdiff libxdiff open-vcdiff podiff rfcdiff vbindiff
bsdiff diffpdf diffuse dwdiff kdiff3 ndiff perceptualdiff rdiff-backup tkdiff wdiff
... est-ce que l'un d'eux ferait le travail?)
rsync
les données ont été copiées à environ 150 Mo / s, mais ne sediff
comparent qu'à 60 Mo / s ...?rsync
est plus rapide b / crsync
par défaut n'utilise pas de sommes de contrôle pour comparer les fichiers, il regarde les informations de taille et de date. Lorsque vous utilisezrsync -c
tous les fichiers, leur somme de contrôle doit être calculée, ce qui est une tâche fastidieuse, d'où la raison pour laquelle ce n'est pas la valeur par défaut.Réponses:
modifier pour la correction et la clarté des options - j'ai oublié '--brief'
et ajoutez d'autres options au goût, selon ce que vous comparez:
diff -rs lira chaque octet de l'original et des fichiers de copie et de rapport qui sont identiques.
Le format de sortie diff est défini par POSIX, il est donc assez portable. Vous voudrez peut-être ajouter quelque chose comme:
| tee diff-out.1 | grep -v -Ee 'Les fichiers. * et. * sont identiques'
Vous pouvez utiliser des chksums ou des hachages, mais vous devez ensuite les synchroniser avec les arborescences de fichiers, de sorte que vous devriez de nouveau lire chaque octet de chaque fichier.
EDIT - trop long pour être un commentaire, en réponse à:
Vous voudrez peut-être essayer cette option diff: --speed-large-files
Il est possible que le diff que vous utilisez ne gère pas bien les fichiers très volumineux (plus gros que la mémoire système, par exemple), et signale donc des différences entre les fichiers qui sont en fait les mêmes.
J'avais pensé qu'il y avait une option -h ou un 'bdiff' qui faisait mieux sur les gros fichiers, mais je n'en trouve pas dans Fedora. Je crois que les options --speed-large-files sont un successeur à une option de comparaison "-h" ".
Une approche différente serait de répéter la commande rsync que vous avez utilisée, avec '-vin' (verbose, itemize, no_run). Cela signalerait toute différence trouvée par rsync - et il ne devrait pas y en avoir.
Pour déplacer certains fichiers, vous regardez un script quelque chose comme:
mais je ne recommande pas de faire ça. La question sous-jacente est "comment puis-je être sûr que rsync a correctement copié une hiérarchie de fichiers?" et si vous pouvez vous démontrer que rsync fonctionne bien, avec diff ou un autre outil, alors vous pouvez simplement compter sur rsync, plutôt que de le contourner.
rsync -vin compare en fonction des autres options que vous lui donnez. Je pensais que la valeur par défaut était la somme de contrôle, mais vous avez raison, -c ou --checksum est requis pour cela.
L'utilitaire diff est vraiment destiné aux fichiers de lignes de texte, mais il devrait signaler des sous-s «identiques» pour les fichiers binaires.
Le --brief devrait supprimer toute sortie de contenu de fichier - mes excuses pour l'avoir ignoré plus tôt - il a été semi-enterré dans un script laid.
la source
mv
chaque fichier qu'il trouve dans un dossier "vérifié" à la racine du lecteur, en préservant le chemin d'accès complet? Par exemple, si/disk1/a/b/c/file1
est identique à/disk2/a/b/c/file1
, déplacez-le vers/disk1/verified/a/b/c/file1
. Ensuite, je pourrais me retrouver avec seulement les fichiers mal copiés. (Jusqu'à présent, BEAUCOUP de fichiers de plus de 10 Go ne vérifient pas, ce qui est effrayant.)rsync -vin
- cela fait-il une comparaison octet par octet ou somme de contrôle? Je pensais que rsync ne comparait que la taille / la date, sauf si vous ajoutez-c
. Et d'après ce que j'ai lu, lespeed large files
semble ne faire la différence qu'avec les fichiers non binaires ... ou je me trompe?diff
me donne des résultats sous la forme de"Files __ and ___ differ"
... et je suis en cours d'exécutionsed -e "s/Files /cp -afv /" -e "s/ and / /" -e "s/ differ$//"
pour essayer de générer un script pour recopier les mauvais fichiers. Mais la sortie de diff n'est pas citée, donc cela ne fonctionne pas. Puis-je l'obtenir pour me donner des chemins cités?Voici
diff
un rapport d'étape basé sur le nombre de fichiers:Vous aurez besoin de pv (pipe viewer): http://www.ivarch.com/programs/pv.shtml
Explication:
diff -r
comparer récursivement les répertoires et sous-répertoires.diff -q
imprimer uniquement les noms de fichiers des fichiers diffèrent. n'imprime pas les différences réelles.diff -s
imprimer également les noms de fichiers qui ne diffèrent pas. ceci est important pour les informations de progression.pv -l
signaler les progrès en fonction du nombre de lignes.pv -s count
estimer le temps nécessaire pour terminer en fonction du nombre.logfile
est pour une jolie sortie. Sinon, la sortie dediff
se mélangera avec la ligne d'état depv
.pour obtenir le nombre de fichiers, utilisez la commande suivante:
Filtrez le fichier journal pour les fichiers différents:
Cette variation imprimera des fichiers différents en temps réel tout en se connectant à tout
logfile
:Vous pouvez également enregistrer uniquement les fichiers différents:
Remarque: les commandes ci-dessus indiqueront la progression en fonction du nombre de fichiers. Cela fonctionne mieux s'il y a beaucoup de petits fichiers. Si vous avez quelques fichiers énormes, cela ne vous amusera pas beaucoup.
Malheureusement, je ne connais pas de moyen simple de signaler les progrès en fonction des octets comparés.
Si vous pouvez trouver votre tranquillité en comparant simplement les métadonnées (et non le contenu réel des fichiers), vous pouvez utiliser rsync. Ce sera considérablement plus rapide.
Pour plus de détails:
la source
J'envisagerais d'utiliser une sorte d'application de hachage pour vérifier l'intégrité des données. Je sais que de nombreux utilitaires de recherche de fichiers en double utilisent des hachages pour identifier les doublons / non-doublons. Il me semble que cette enquête pourrait être utile.
la source
Vous pouvez utiliser rdiff-backup pour cela. Installez-le sur les deux serveurs et il fera des comparaisons intelligentes des sommes de contrôle et synchronisera ce qui n'est pas encore là.
la source