web-dev-qa-db-fra.com

Est-il préférable d'utiliser CAT, DD, PV ou une autre procédure pour copier un CD / DVD?

Fond

Je copie quelques données de données/DVD sur des fichiers ISO pour les utiliser plus tard sans le besoin d'eux dans le lecteur.

Je regarde sur le net pour les procédures et j'ai beaucoup trouvé:

  • Utilisation de cat pour copier un support: http://www.yolinux.com/tatudials/linuxtorialcdburn.html

    cat /dev/sr0 > image.iso
    
  • Utilisation de dd pour le faire (apparemment le plus largement utilisé): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • Utilisation de juste pv pour accomplir ceci: voir man pv Pour plus d'informations, bien que voici un extrait de celui-ci:

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

Je ne sais pas si tous devraient être équivalents, même si j'ai testé certains d'entre eux (en utilisant le md5sum outil) et, au moins, dd et pv sont pas équivalent. Ici se trouve le md5sum du lecteur et des fichiers générés à l'aide de chaque procédure:

mD5 de la procédure DD: 71b676875b0194495060b38f35237c3c

mD5 de PV Procédure: f3524d81fdeeef962b01e1d86e6acc04

Edit: Cette sortie était d'un autre CD que la sortie donnée. En fait, j'ai réalisé qu'il y a des faits intéressants que je fournis comme une réponse.

En fait, la taille de chaque fichier est différente comparer les uns aux autres.

Ainsi, y a-t-il une meilleure procédure pour copier un CD/DVD ou dois-je simplement utiliser les commandes de manière incorrecte?


Plus d'informations sur la situation

Voici plus d'informations sur le cas de test que j'utilise pour vérifier les procédures que j'ai trouvées jusqu'à présent:

isoinfo -d i /dev/sr0 Sortie: https://gist.github.com/jbfwp286/7f50f069DC5D1593BA62#FILE-ISOINFO-OUTPUT-19-AUG-2015

dd Pour copier le support, avec les checksums de sortie et les informations de fichier Sortie: https://gist.github.com/jbfwp286/75decda0a67605590d32#file-dd-Output-with-md5-and-sha256 -19-août 2015

pv Pour copier le support, avec les checksums de sortie et les informations de fichier de fichier: https://gist.github.com/jbfwp286/700a13fe0a2f06ce5e7a#file-pv-Output-with-md5-and-sha256 -19-août 2015

Toute aide serait appréciée!

24
user129371

Toutes les commandes suivantes sont équivalentes. Ils ont lu les octets du CD /dev/sr0 et écrivez-les à un fichier appelé image.iso.

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

Pourquoi utiliseriez-vous un sur l'autre?

  • Simplicité. Par exemple, si vous savez déjà cat ou cp, vous n'avez pas besoin d'apprendre une autre commande.

  • Robustesse. Celui-ci est un peu une variante de simplicité. Combien de risque y a-t-il de la modification de la commande va changer ce qu'il fait? Voyons quelques exemples:

    • N'importe quoi avec redirection: vous pourriez accidentellement mettre une redirection dans le mauvais sens, ou l'oublier. Puisque la destination est censée être un fichier non existant, set -o noclobber devrait s'assurer que vous ne écrasez rien; Cependant, vous pouvez écraser un appareil si vous écrivez accidentellement >/dev/sda (pour un CD, qui est en lecture seule, il n'y a pas de risque, bien sûr). Cela parle en faveur de cat /dev/sr0 >image.iso (difficile de se tromper de manière endommagée) sur des alternatives telles que tee </dev/sr0 >image.iso (Si vous inverser les redirections ou oubliez l'entrée une, tee va écrire sur /dev/sr0).
    • cat: vous pourriez accidentellement concaténer deux fichiers. Qui laisse les données facilement récupérables.
    • dd: i et o sont fermés sur le clavier et un peu inhabituel. Il n'y a pas d'équivalent de noclobber, of= va heureusement écraser n'importe quoi. La syntaxe de redirection est moins sujette d'erreur.
    • cp: Si vous échangez accidentellement la source et la cible, le périphérique sera écrasé (à nouveau, en supposant un périphérique non en lecture seule). Si cp est invoqué avec certaines options telles que -R ou -a Quelles personnes ajoutent à travers un alias, il copiera le nœud de périphérique plutôt que le contenu du périphérique.
  • Fonctionnalité supplémentaire. Le seul outil ici qui a une fonctionnalité supplémentaire utile est pv, avec ses puissantes options de rapport.
    [.____] Mais ici, vous pouvez vérifier combien de temps a été copié en regardant la taille du fichier de sortie quand même.

  • Performance. Ceci est un processus d'I/O-liés; L'influence principale dans la performance est la taille de la mémoire tampon: l'outil lit un morceau de la source, écrit le morceau à la destination, répète. Si le morceau est trop petit, l'ordinateur dépense son temps de commutation entre tâches. Si le morceau est trop grand, les opérations de lecture et d'écriture ne peuvent pas être paralléléées. La taille optimale des morceaux sur un PC est typiquement autour de quelques mégaoctets, mais cela est évidemment très dépendant du système d'exploitation, sur le matériel et sur ce que l'ordinateur fait d'autre. J'ai fait Benchmarks pour disque dur aux copies de disque dur il y a un moment, sous Linux, qui a montré que pour des copies dans le même disque, dd avec une grande taille de tampon a l'avantage, mais pour des copies croisées, cat a gagné sur n'importe quelle taille de tampon dd.

Il y a quelques raisons pour lesquelles vous trouverez dd mentionné si souvent. Outre la performance, ils ne sont pas particulièrement de bonnes raisons.

  • Dans de très anciens systèmes UNIX, certains outils de traitement de texte ne pouvaient pas faire face à des données binaires (ils ont utilisé chaînes à terminaison null en interne, ils ont donc eu tendance à avoir des problèmes avec des octets nuls; certains outils ont également supposé que les caractères utilisés Seulement 7 bits et ne pas traiter correctement les ensembles de caractères 8 bits). Je ne sais pas si cela était un problème avec cat (c'était avec plus d'outils axés sur la ligne telles que head, sed, etc.), mais les gens avaient tendance à Pour l'éviter sur des données binaires en raison de son association avec le traitement du texte. Ce n'est pas un problème sur des systèmes modernes tels que Linux, OSX, * BSD, ou tout ce qui est conforme à POSIX.
  • Il y a une sorte de mythe que dd est un "niveau inférieur" que d'autres outils tels que cat et accès directement aux appareils. Ceci est complètement faux: dd et cat et tee et les autres ont tous des octets de leur entrée et écrivent les octets à leur sortie. La vraie magie est en /dev/sr0.
  • dd a une syntaxe de ligne de commande inhabituelle, expliquant ainsi comment cela fonctionne donne davantage la possibilité de briller en expliquant quelque chose qui n'écrit que cat /dev/sr0.
  • En utilisant dd avec une grande taille de tampon peut avoir une meilleure performance, mais ce n'est pas toujours le cas (voir quelques points de repère sur Linux ).

Un risque majeur avec dd est celui-ci (((, il peut sauter silencieusement certaines données . Je pense que dd est en sécurité tant que skip ou count ne sont pas passés, mais je ne sais pas si c'est le cas sur toutes les plateformes. Mais cela n'a aucun avantage sauf pour la performance.

Donc, il suffit d'utiliser pv si vous voulez son rapport de progression fantaisie, ou cat si vous ne le faites pas.

Il y a des faits intéressants dans ce cas, spécialement-ci:

  • Je viens de vérifier la sortie que j'ai reçue et fournie (j'ai utilisé un autre disque cette fois-ci, exactement, le disque de configuration Xubuntu 15.04 x64) et avec les deux procédures (dd et pv) Les checksums sont - identique.
  • J'avais l'idée d'avoir eu l'idée, après la procédure dd, ouvrez le lecteur et fermez-la avec le même disque, puis terminez le test avec la procédure pv. Cela, j'ai eu des copies identiques avec les deux procédures.
  • I pense J'ai eu des checks différents la première fois, car pour une raison quelconque, les données recueillies à partir du lecteur CD/DVD semblent être "enregistrées" à d'autres fins depuis un certain temps (comme un cache) - Ainsi, d'autres opérations comme des checksums ont été rattrapées beaucoup plus rapidement que le transfert. S'il vous plaît commenter si vous connaissez la cause exacte pour cela.
  • Un autre fait est que dd w/o le count=X Le paramètre s'arrête correctement à la fin du disque et donne la même image de disque que possible avec pv (les checksums sont identiques), il est donc préférable d'utiliser des paramètres dd w/o ou juste pv.

Donc, pour l'instant, il semble que pv et dd peut accomplir une copie de CD/DVD avec les mêmes résultats.

4
user129371