GNU/Linux >> Linux の 問題 >  >> Linux

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

以下のコマンドはすべて同等です。 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 つのファイルを連結する可能性があります。これにより、データを簡単に回収できます。
    • dd :io キーボードに近く、やや珍しいです。 noclobber に相当するものはありません 、 of= 何でも喜んで上書きします。リダイレクト構文は、エラーが発生しにくいです。
    • 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 などの他のツールよりもやや「低レベル」です。 デバイスに直接アクセスします。これは完全に誤りです:ddcattee その他はすべて、入力からバイトを読み取り、そのバイトを出力に書き込みます。本当の魔法は /dev/sr0 にあります .
  • dd は珍しいコマンド ライン構文を持っているため、それがどのように機能するかを説明すると、cat /dev/sr0 を記述するだけで何かを説明することで、より多くの機会が得られます。 .
  • dd の使用 バッファ サイズが大きい パフォーマンスが向上する可能性がありますが、常にそうとは限りません (Linux のベンチマークを参照してください)。

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

pv を使用するだけです 派手な進捗レポートが必要な場合、または cat


cat のような一般的なツールを使用する代わりに または dd 、次のような読み取りエラーに対してより信頼性の高いツールを優先する必要があります

  • レスキュー
  • readcd (CD/DVD ドライブのエラー修正/再試行メカニズムが組み込まれています)

さらに、それらのデフォルト設定は、例よりも適しています。 dd


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

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

したがって、今のところ、pv のようです。 および dd 同じ結果で CD/DVD コピーを実行できます。


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  1. Linux の /dev/zero および /dev/null ファイルとは

  2. /dev/zero から /dev/null への DD ...実際に何が起こるか

  3. カーネル:/dev/kmem と /dev/mem を無効化

  1. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  2. /dev/null に書き込む仮想ブロック デバイスを作成します。

  3. /dev/sda と /dev/sda1 の違い