J'utilise dd
pour copier des données d'un ancien disque dur vers un nouveau. Je veux être sûr que l'intégrité des données est sécurisée.
Sur cette réponse , Gilles dit
Si [dd] s'est terminé avec succès, alors la sauvegarde est correcte, sauf erreur matérielle…
Qu'est-ce que ça veut dire exactement? Y dd
a- t -il une sorte de vérification intégrée?
Si je devais utiliser rsync à la place, j'exécute également une deuxième passe avec --checksum
, pour vérifier. Ce genre de paranoïa est-il justifié?
dd
verification
integrity
Sparhawk
la source
la source
rsync
seraient probablement les plus simples.Réponses:
dd
ou toute autre application n'a pas "une sorte de vérification intégrée" dans le sens auquel vous pensez probablement: elle ne lit pas les données du support de stockage pour les comparer avec ce qui a été écrit. C'est le travail du système d'exploitation.Il n'est pas vraiment possible d'effectuer une lecture-vérification du matériel à partir d'une application. Cela fonctionnerait dans certains scénarios, mais dans la plupart des cas, cela n'aboutirait à rien. L'application pourrait relire ce qu'elle vient d'écrire si elle écrit directement sur un support de stockage , mais cela relira généralement à partir d'un cache en mémoire, ce qui ne donnerait aucune assurance utile. Dans l'exemple que vous citez ,
dd
écrit sur un tube, et dans ce cas, il n'a aucun contrôle sur ce qui arrive aux données plus loin sur la ligne. Dans votre exemple rsync, une deuxième passe dersync --checksum
est inutile: en théorie, il pourrait attraper une erreur, mais en pratique, si une erreur se produit, alors la deuxième passe ne rapporterait probablement rien de mal, donc vous gaspillez des efforts sur quelque chose qui ne donne pas réellement une assurance utile.Cependant, les applications ne vérifient ce qui se passe aux données, au sens où ils vérifient que le système d'exploitation a accepté la responsabilité pour les données. Tous les appels système renvoient un état d'erreur. Si un appel système renvoie un état d'erreur, l'application doit propager cette erreur à l'utilisateur, généralement en affichant un message d'erreur et en renvoyant un état de sortie différent de zéro.
Attention, c'est
dd
une exception: selon les paramètres de la ligne de commande,dd
peut ignorer certaines erreurs . C'est extrêmement inhabituel:dd
c'est la seule commande courante avec cette propriété. Utilisez à lacat
place dedd
cette façon, vous ne risquez pas la corruption et cela pourrait être plus rapide .Dans une chaîne de copie de données, deux types d'erreurs peuvent survenir.
la source
dd if=/dev/sdc of=/dev/sdb bs=4M
, donc ma compréhension est que les problèmes d'ignorer les erreurs et la vitesse (plus ou moins, par rapport àcat
) sont sans objet. Voulez-vous simplement vérifier la taille en montant alorsdf
?Non,
dd
ne fait pas de vérification explicite. Si vous souhaitez / avez besoin d'une copie de votre disque ou d'une partie de celle-ci, utilisezdcfldd
une version améliorée dedd
développée par le Département américain de la défense informatique Forensics Lab.la source
La seule façon d'être «sûr» est d'effectuer une passe de lecture et de comparaison supplémentaire (après avoir supprimé les caches).
En plus de cela,
dd
détecte les erreurs de lecture et d'écriture de la même manière que tous les autres programmes ... cela fonctionne si les lecteurs (et les autres composants impliqués) signalent des erreurs; pour les lecteurs qui acceptent les données en silence sans les écrire, vous n'avez pas de chance.Si vous ne pouvez pas faire confiance à votre matériel pour être fiable, les choses se compliquent ...
la source
dd
détection des erreurs.dd
a de graves problèmes de corruption de données, mais des cas spéciaux comme ceux-ci ne faisaient pas partie de la question.dd
. La vraie solution est d'utiliser n'importe quoi maisdd
puisque la corruption silencieuse des données est une spécialité dedd
.dd
d'ignorer les erreurs. Vous ne pouvez pas exactement blâmer un programme de faire exactement ce que vous lui avez demandé.dd
ne pas ignorer les erreurs? Et non, ceconv=noerror
n'est pas une bonne réponse. Voir la réponse de frostschutz pour un exemple. Je ne blâme la conceptiondd
pour faire des erreurs en ignorant un mode par défaut, et qui ne peut être éteint sans connaître sa mécanique interne très précisément.Oui, un matériel défectueux peut insérer des bits d'erreur aléatoires dans les données à un certain taux comme un bit par nombre de mégaoctets, cela est possible et se produit parfois en pratique.
Habituellement, j'utilise le hachage md5 ou sha1 pour vérifier que les données sont intactes, en relisant à la fois la source et la destination, par exemple:
Cela suppose que les données sont beaucoup plus volumineuses que le cache du système de fichiers, sinon, vous devrez peut-être redémarrer le système pour vérifier les données réelles sur le support et non le contenu du cache, ou utiliser un autre système pour cela.
la source
De
man dd
:dd
vérifie que les tailles de bloc d'entrée / sortie correspondent à chaque fois qu'il copie un bloc. S'ils ne le font pas, il gère l'erreur avec un avertissement ou une erreur fatale (remplacée parnoerror
). C'est pourquoidd
fonctionne pratiquement tout le temps.Pourtant, il ne remplace pas la vérification manuelle de l'intégrité de votre disque. Si les informations vous sont précieuses, alors oui, votre paranoïa est justifiée . Exécutez une vérification manuelle une fois
dd
terminée.la source
dd
ne fonctionne pratiquement pas tout le temps: avec lebs
paramètre, il ignore certaines erreurs .