Existe-t-il une commande copier-vérifier dans Ubuntu / Linux?

23

J'ai sauvegardé toutes mes photos numériques à quelques endroits. J'utilise la commande cp, mais - étant donné la valeur personnelle - j'ai commencé à me demander s'il existe un moyen plus fiable. Je ne suis pas étranger à Linux, Bash, Perl, etc., donc je pourrais écrire quelque chose pour copier et comparer les hachages md5, mais je me demandais si quelque chose existait déjà (réinvention, roues et quoi).

La plupart de mes recherches sur Google pour la copie et (vérifier | valide | vérifier | hachage | confirmer) apparaissent rsync. Cependant, pour autant que je sache, rsync utilise uniquement des hachages pour voir si un fichier doit être mis à jour. Il n'effectue pas de comparaison de hachage par la suite.

Pour cette utilisation, en particulier, les fichiers sont binaires et généralement de 8 à 10 Mo. Toutes les recommandations pour les services publics ou des conseils pour les solutions de bricolage seraient grandement appréciées.

N13
la source
Et l' unisson ? Il est utilisé pour la synchronisation bidirectionnelle mais il vérifie sûrement la somme de contrôle d'un fichier.
taper

Réponses:

19

De man rsync, sous -coption:

-c, --checksum: sauter en fonction de la somme de contrôle, pas du temps de modification et de la taille

Notez que rsync vérifie toujours que chaque fichier transféré a été correctement reconstruit du côté réception en vérifiant une somme de contrôle de tout le fichier qui est générée lors du transfert du fichier, mais que la vérification automatique après le transfert n'a rien à voir avec cette option. avant le transfert "Ce fichier doit-il être mis à jour?" vérifier.

icyrock.com
la source
7
Certaines personnes ont compris que le manuel rsync est trompeur sur la vérification par défaut de la copie après: unix.stackexchange.com/a/66702/148560 Il ne semble pas y avoir une telle vérification. Afin de vérifier toutes les copies, vous devez effectuer une autre rsync avec l'option --checksum, disent-ils.
Rotareti
5

Il y a plusieurs années, j'avais les mêmes exigences que vous. La solution que j'ai choisie était d'utiliser ZFS via le pilote ZFS-FUSE sur mon serveur de stockage. Je pensais que mes photos personnelles, documents numérisés et autres fichiers similaires étaient des choses auxquelles je ne pouvais accéder qu'occasionnellement, donc cela peut prendre beaucoup de temps, disons un an ou plus, avant de remarquer qu'un fichier a été corrompu en raison de une erreur de lecteur ou similaire.

À ce moment-là, toutes les copies de sauvegarde que j'ai peuvent être cette version pourrie des fichiers.

ZFS présente un avantage sur RAID-5 en ce qu'il peut détecter et réparer les erreurs dans les données stockées sur les disques individuels, même si les lecteurs ne signalent pas d'erreur de lecture lors de la lecture des données. Il détectera, via des sommes de contrôle, que l'un des disques a retourné des informations corrompues et utilisera les données de redondance pour réparer ce disque.

En raison de la façon dont la somme de contrôle dans ZFS est conçue, je sentais que je pouvais compter sur elle pour stocker des données rarement utilisées pendant de longues périodes. Chaque semaine, je lance un "zpool scrub" qui passe en revue et relit toutes les données et vérifie les sommes de contrôle.

ZFS-FUSE a très bien fonctionné pour moi au cours des dernières années.

Dans un passé lointain, pour un client, j'ai implémenté un système de base de données qui stockait des informations de somme de contrôle sur tous les fichiers stockés dans un répertoire particulier. J'ai ensuite eu un autre script qui s'exécuterait périodiquement et vérifierait le fichier par rapport à la somme de contrôle stockée dans la base de données. Avec cela, nous avons pu détecter rapidement un fichier corrompu et restaurer à partir de sauvegardes. Nous implémentions essentiellement les mêmes types de contrôles que ZFS effectue en interne.

Sean Reifschneider
la source
Pourquoi le vote négatif? Puisqu'aucun commentaire n'a été laissé, je suppose que c'est un "-1, pas d'accord". :-)
Sean Reifschneider
... mais alors: sur quelle partie est en désaccord? Bien que peut-être un peu hors sujet pour la question, cela me semble solide. J'espère donc que le downvote a été pour "ne pas répondre à la question" plutôt que de nous laisser inconscients d'un vrai défaut dans ce qui précède ...
Arjan
J'ai réalisé ce matin que je supposais que icyrock demandait à cause des inquiétudes concernant la pourriture du bit, ce qui était ma préoccupation. Mais c'est peut-être en quelque sorte différent. Bien que je ne puisse pas imaginer quel serait le cas d'utilisation qui changerait légitimement le contenu du fichier sans changer la durée du fichier.
Sean Reifschneider
Je pense que la préoccupation du PO était la corruption des données en transit. Vous copiez un fichier et la copie finit par être différente de l'original.
Jon Bentley
btrfs? qui a des sommes de contrôle et est natif ...
Dmitry Kudriavtsev
1

J'ai trouvé cet utilitaire (Linux et Windows) qui fait exactement ce que vous voulez (copie hachée + vérification hachée avec journal): http://sourceforge.net/projects/quickhash/

Le seul inconvénient étant qu'il n'existe que sous forme d'interface graphique (pas d'accès en ligne de commande)

Depuis la v1.5.0, un dossier source sélectionné peut être haché, puis copié et reconstruit dans un dossier de destination où le contenu est à nouveau haché pour vérification. Depuis 1.5.5, les masques de fichiers sélectionnés peuvent également être utilisés (* .doc; * .xls etc.).

2072
la source
0

si vous copiez le fichier localement (comme l'implique votre référence à la cpplace de scpetc), alors juste cmples fichiers source et de destination ... mais de façon réaliste, s'il cpn'émet pas une sorte d'erreur (soit sur la ligne de commande soit dans la valeur de retour d'exécution), il n'y a aucune raison de croire que cela ne fonctionne pas.

si vous souhaitez en effet une sauvegarde légitimement redondante, envisagez une solution distante comme dropbox .

Brad Clawsie
la source
+1. On ne sait pas pourquoi cette réponse a été rejetée car elle fournit (ce qui me semble) une solution parfaitement valide au problème, bien qu'elle nécessite deux commandes plutôt qu'une.
Jon Bentley
Vous aurez vraiment besoin d'écrire un script avec une boucle pour utiliser cette réponse, car elle ne prend pas en compte plusieurs fichiers et dossiers.
Gringo Suave