CD / DVDをコピーするには、cat、dd、pv、または他のプログラムを使用する方が良いですか?

CD / DVDをコピーするには、cat、dd、pv、または他のプログラムを使用する方が良いですか?

背景

一部のデータCD/DVDをドライブに入れずに後で使用できるようにISOファイルにコピーしています。

オンラインでプログラムを探してみると、次のような内容がたくさんありました。

  • メディアをコピーするには、cat次を使用します。http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • 以下を使用してこれを行いますdd(明らかに最も広く使用されています)。http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • pvこれを行うために使用してください。man pv詳細については、参考資料を参照してください。ここで抜粋した内容は次のとおりです。

    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
    

md5sumそれらのいくつかを(このツールを使用して)テストしましたが、少なくともそれらがすべて同じであるべきかどうかはわかりません。ddpvいいえ同じ。md5sum各プロセスを使用するドライバと結果ファイルは次のとおりです。

ddプロセスのmd5:71b676875b0194495060b38f35237c3c

PVプログラムのmd5:f3524d81fdeeef962b01e1d86e6acc04

編集する:出力は、与えられた出力以外のCDからのものです。実際、私は答えでいくつかの興味深い事実を提供したことに気づきました。

実際、各ファイルのサイズはは違うお互いに比較してください。

それでは、CD/DVDコピーに最適なプログラムはありますか?それとも、私はコマンドを間違って使用しましたか?


状況に関する追加情報

これまでに見つかったプロセスを確認するために使用していたテストケースに関する追加情報は次のとおりです。

isoinfo -d i /dev/sr0 出力:https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddメディアをコピーし、チェックサムとファイル情報を出力します。https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvメディアをコピーし、チェックサムとファイル情報を出力します。https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

どんな助けでも大変感謝します!

ベストアンサー1

次のコマンドはすべて同じです。彼らはCDのバイトを読み、これ/dev/sr0image.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

なぜ他のものを使うのですか?

  • 単純な。たとえば、またはcat既に知っている場合は、cp他のコマンドを学ぶ必要はありません。

  • 堅牢性。これは単なるバリエーションです。コマンドを変更すると機能が変更されるリスクは何ですか?いくつかの例を見てみましょう。

    • リダイレクトのあるアイテム:誤って誤ったリダイレクトを受け取ったり忘れたりする可能性があります。ターゲットは存在しないファイルと見なされるため、set -o noclobber何も上書きしないでください。しかし、誤って書き込んだ場合は、デバイスを上書きする可能性があります>/dev/sda(読み取り専用CDを使用すると確かに危険ではありません)。 )。これは、(リダイレクトを元に戻したり、入力を忘れた場合に作成します)などの代替手段cat /dev/sr0 >image.isoよりも(破壊的な方法で間違えるのが難しい)方が有利です。tee </dev/sr0 >image.isotee/dev/sr0
    • cat:誤って2つのファイルをリンクする可能性があります。これにより、データを簡単に回復できます。
    • dd:キーボードに非常に近い、やや珍しいですioこれに相当するものはなく、何でも幸せにnoclobber対処of=します。リダイレクト構文はエラーが少なくなります。
    • cp:誤ってソースとターゲットを置き換えると、デバイスが上書きされます(再び読み取り専用デバイスではないと仮定)。特定のオプション(エイリアスで追加したオプションなど)と一緒に呼び出されると、デバイスの内容ではなくcpデバイスノードがコピーされます。-R-a
  • 追加機能ここで役に立つ追加機能は、ツールpvに強力なレポートオプションがあることです。
    しかし、ここでは、出力ファイルのサイズを見ると、どれだけのコンテンツがコピーされたかを確認できます。

  • パフォーマンス。これはI / O集約的なプロセスです。パフォーマンスに最大の影響を与えるのはバッファサイズです。ツールはソースからブロックを読み取り、ターゲットにブロックを書き込んでから繰り返します。チャンクが小さすぎると、コンピュータはタスク間の切り替えに時間を費やします。チャンクが大きすぎると、読み書き操作を並列化できません。 PCの最適ブロックサイズは通常数メガバイト程度ですが、これは明らかにオペレーティングシステム、ハードウェア、およびコンピュータが実行する他の作業によって大きく異なります。私はそうだった基準しばらく前にLinuxでハードディスクコピーを実行した場合、同じディスク内からコピーする場合dd より大きなバッファサイズを持ちます。利点がありますが、ディスク間コピーの場合は、catすべてのddバッファサイズよりも優れています。

ddあなたがよく言及される理由はいくつかあります。パフォーマンスを除いて、特に良い理由ではありません。

  • 非常に古いUnixシステムでは、一部のテキスト処理ツールはバイナリデータを処理できませんでした。null で終わる文字列内部的にはヌルバイト問題がある傾向があります。一部のツールは、文字が7ビットのみを使用し、8ビット文字セットを正しく処理しないと想定しています。これが問題かどうかはよくわかりませんがcat(などの行指向ツールに近いですhead)、sed人々はテキスト処理に関連するバイナリデータではこれを避ける傾向があります。これは、Linux、OSX、* BSD、または最新のPOSIX互換システムでは問題になりません。
  • デバイスに直接アクセスするなど、他のツールに比べてdd少し「低い」という神話があります。catこれは完全に間違っています。他の人ddcat同様にtee、すべて入力からバイトを読み取り、出力にバイトを書き込みます。まさにここに本当の魔法があります/dev/sr0
  • dd珍しいコマンドライン構文があるため、どのように機能するかを説明すると、作成された内容を説明することでより多くの機会を得ることができますcat /dev/sr0
  • 使用dd より大きなバッファサイズを持ちます。より良いパフォーマンスが可能ですが、必ずしもそうではありません(参照Linuxの一部のベンチマーク)。

主なリスクdd一部のデータを自動的にスキップできます。。パスがddあるかskipどうかにかかわらず安全だと思いますがcount、すべてのプラットフォームでそういうものかはわかりません。しかし、パフォーマンス以外には利点はありません。

pvしたがって、素晴らしい進捗状況を報告したい場合や望まない場合は、catそれを使用してください。

おすすめ記事