cat、dd、pv、または別の手順を使用してCD / DVDをコピーする方が良いですか?


22

バックグラウンド

一部のデータ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

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

linux  dd  cat  disk-image  pv 

ファイルサイズは同じですか?の結果cmp file1 file2?あなたddは間違って使用しましたかcount=(または本当にすべてが必要な場合は不要なカウント)?dmesgの読み取りエラー?
frostschutz

2
異なるサイズのファイル(99.9999999999 +%の確率)が異なるチェックサムを持つことは言うまでもありません。テストを行っている限り、すべての結果を投稿して、(1)使用した正確なddコマンド(どのブロックサイズ?何カウント?)、(2)のサイズとチェックサムを含めるとよいでしょうすべての出力、および(3)ソース光ディスク上のデータ量に関する独自の情報。………………PSなぜあなたは使用count=していddますか?ディスクイメージ全体をコピーしますか?  count=「これだけコピーしてから停止する」と言います。
スコット

@Scottこのページのlinuxjournal.com/content/archiving-cds-iso-commandlineで、著者はisoinfo -d -i /dev/cdromカウント数を知り、それを使用するべきだと言っていますdd。実際、彼は単に使用すべきではないと言っています。「いずれにせよ、そのCDの適切なISOイメージが必要な場合は、イメージを作成する前にブロックサイズとブロック数を正しく取得する必要があります。」

@frostschutz最初のケースではサイズが同一ではありませんでしたが、驚くべきことに、もう一度試したところ、異なる結果が得られました。詳細については、私が提供した回答をご覧ください。

回答:


27

以下のコマンドはすべて同等です。彼らは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

なぜあなたは他の上に1つを使用するのですか?

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

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

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

  • パフォーマンス。これはI / Oバウンドプロセスです。パフォーマンスの主な影響はバッファサイズです。ツールはソースからチャンクを読み取り、宛先にチャンクを書き込み、繰り返します。チャンクが小さすぎる場合、コンピューターはタスクの切り替えに時間を費やします。チャンクが大きすぎる場合、読み取りおよび書き込み操作を並列化できません。PCでの最適なチャンクサイズは通常数メガバイト程度ですが、これは明らかにOS、ハードウェア、およびコンピューターのその他の処理に大きく依存しています。私が作っベンチマークを、同じディスク内のコピーのためにそれを示したのLinux上で、しばらく前にハードディスクのコピーにハードディスク用のdd 大規模なバッファサイズがで優位性を持っていますが、クロスディスクコピー、のためにcat任意の上で獲得したddバッファサイズ。

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

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

主要なリスクddは、データを静かにスキップできることです。合格または不合格であるdd限り安全だと思いますが、これがすべてのプラットフォームに当てはまるかどうかはわかりません。ただし、パフォーマンス以外の利点はありません。skipcount

そのためpv、その高度な進捗レポートが必要なcat場合、または必要ない場合にのみ使用してください。


この反応を書いてくれてありがとうございます!=)今、私はそれらの違いを理解しています。ただの質問:(後者はpvのマニュアルページにあります)pv < /dev/sr0 > image.isoと同じpv /dev/sr0 > image.isoですか?

1
@ JBFWP286同じものをコピーしpv /dev/sr0 …ますが、ファイル名を進行状況レポートに含めることができますが、pv </dev/sr0できません。
ジル「SO-悪であるのをやめる」

別の注意:cpにエイリアスされている可能性がありますcp -R(少なくともGNU cpでは、rootとして)、コンテンツではなくデバイスノードcpをコピーします
marcelm

2
@ JBFWP286 デバイスノードは、ハードウェアまたはカーネルドライバーが提供するその他の特別な機能にアクセスするためのファイルです。のほぼすべてのファイル/devはデバイスノードです。例えばcp -R /dev/sr0 image.isoになるだろうimage.isoと同じように、CDドライブがアクセスされてファイルを/dev/sr0代わりに、あなたが取得するCDの内容のコピーを含む通常のファイルの、cp /dev/sr0 image.iso
ジル 'SO-悪であるのをやめる'

1
@Hashim私はそれより良いパフォーマンスを持っていると結論づけません。私はそれが時々より良いパフォーマンスを持っていると言います。私が作ったベンチマークにリンクしました-最良のケースでddcat、わずかなマージンだけです。
ジル「SO-悪であるのをやめる」

4

この場合、特にこれらの興味深い事実があります。

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

だから、今のところ、それはそうですpvし、dd同じ結果でCD / DVDのコピーを行うことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.