web-dev-qa-db-ja.com

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ツールを使用して)テストし、少なくともddpvnotと同等です。以下は、各手順を使用してドライブと生成されたファイルの両方のmd5sumです。

ddプロシージャのmd5:71b676875b0194495060b38f35237c3c

pvプロシージャのmd5:f3524d81fdeeef962b01e1d86e6acc04

EDIT:その出力は、指定された出力以外の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 2015年8月19日

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

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

24
user129371

以下のコマンドはすべて同等です。 CDのバイト/dev/sr0を読み取り、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

なぜどちらを使用するのですか?

  • シンプルさ。たとえば、すでにcatまたはcpを知っている場合は、さらに別のコマンドを学ぶ必要はありません。

  • 堅牢性。これは単純さを少し変えたものです。コマンドを変更すると、コマンドの機能が変わるというリスクはどのくらいありますか?いくつかの例を見てみましょう:

    • リダイレクトのあるもの:誤ってリダイレクトを間違った方向に回したり、忘れたりする可能性があります。宛先は存在しないファイルであることが想定されているため、set -o noclobberは何も上書きしないようにする必要があります。ただし、誤って>/dev/sdaを書き込んだ場合は、デバイスが上書きされる可能性があります(もちろん、読み取り専用のCDの場合、リスクはありません)。これは、cat /dev/sr0 >image.isoなどの代替案よりもtee </dev/sr0 >image.iso(有害な方法で誤解しにくい)を支持しています(リダイレクトを反転するか、入力を忘れた場合、tee/dev/sr0)。
    • cat:2つのファイルを誤って連結する可能性があります。これにより、データを簡単に回収できます。
    • ddioはキーボードの近くにあり、やや珍しいです。 noclobberに相当するものはなく、of=は何でも喜んで上書きします。リダイレクト構文は、エラーが発生しにくくなります。
    • cp:ソースとターゲットを誤って入れ替えると、デバイスが上書きされます(ここでも、読み取り専用でないデバイスを想定しています)。 cp-R-aなどの一部のオプションを使用して呼び出された場合、エイリアスを介して追加すると、デバイスのコンテンツではなくデバイスノードがコピーされます。
  • 追加機能。便利な追加機能を持つ1つのツールはpvで、その強力なレポートオプションがあります。
    しかし、ここで出力ファイルのサイズを確認することで、コピーされた量を確認できます。

  • パフォーマンス。これはI/Oバウンドプロセスです。パフォーマンスにおける主な影響はバッファサイズです。ツールはソースからチャンクを読み取り、宛先にチャンクを書き込み、繰り返します。チャンクが小さすぎる場合、コンピューターはタスク間の切り替えに時間を費やします。チャンクが大きすぎると、読み取り操作と書き込み操作を並列化できません。 PCでの最適なチャンクサイズは通常数メガバイト程度ですが、これは明らかにOS、ハードウェア、およびコンピューターの動作に大きく依存しています。 Linuxで ベンチマーク をハードディスクからハードディスクへのコピーに作成したところ、同じディスク内のコピーの場合、ddバッファサイズには利点がありますが、ディスク間コピーの場合、catはどのddバッファサイズよりも優先されます。

ddが頻繁に言及されるのにはいくつかの理由があります。パフォーマンスは別として、それらは特に良い理由ではありません。

  • 非常に古いUnixシステムでは、一部のテキスト処理ツールはバイナリデータに対応できませんでした(内部で使用する nullで終了する文字列 を使用したため、nullバイトで問題が発生する傾向がありました。一部のツールでは、文字が使用されていると想定していました7ビットのみで、8ビット文字セットは適切に処理されませんでした)。これがcatの問題かどうかはわかりませんが(headsedなどの行指向のツールに問題がありました)、テキスト処理との関連があるため、バイナリデータではそれを回避します。これは、Linux、OSX、* BSDなど、POSIX準拠のシステムでは問題になりません。
  • ddcatなどの他のツールよりもいくらか「低レベル」であり、デバイスに直接アクセスするという神話があります。これは完全に偽です:ddcatteeと他のすべては、入力からバイトを読み取り、そのバイトを出力に書き込みます。本当の魔法は/dev/sr0にあります。
  • ddは通常とは異なるコマンドライン構文を使用しているため、その仕組みを説明することで、cat /dev/sr0とだけ書いて何かを説明することで、輝かせる機会が増えます。
  • dd大きなバッファサイズを使用するとパフォーマンスが向上しますが、常にそうであるとは限りません( Linuxのいくつかのベンチマーク を参照)。

ddの主なリスクは 黙って一部のデータをスキップできる です。 ddまたはskipが渡されない限り、countは安全だと思いますが、すべてのプラットフォームでこれが当てはまるかどうかはわかりません。ただし、パフォーマンス以外の利点はありません。

そのため、ファンシープログレスレポートが必要な場合はpvを、必要ない場合はcatを使用してください。

この場合、特に以下のような興味深い事実があります。

  • 取得して提供した出力(今回は別のディスク、正確にはXubuntu 15.04 x64セットアップディスクを使用しました)と両方の手順(ddおよびpv)でチェックサムを確認しました同一です。
  • dd手順を実行した後、ドライブを開いて同じディスクで閉じ、pv手順でテストを終了するというアイデアがありました。それだけで、両方の手順で同一のコピーを取得しました。
  • I think初めて異なるチェックサムを取得しました。これは、何らかの理由で、CD/DVDドライブから収集されたデータがしばらくの間(キャッシュなど)他の目的に「記録」されているように見えるためです-したがって、チェックサムなどの他の操作は、転送よりもはるかに高速に行われました。この正確な原因がわかっている場合はコメントしてください。
  • もう1つの事実は、dd w/o the count=Xパラメータはディスクの最後で正しく停止し、pvと同じディスクイメージを提供します(チェックサムは同じです)。そのため、dd w/oパラメータを使用するか、ちょうどpvです。

したがって、現時点では、pvddが同じ結果でCD/DVDコピーを実行できるようです。

4
user129371