
背景
一部のデータCD/DVDをドライブに入れずに後で使用できるようにISOファイルにコピーしています。
オンラインでプログラムを探してみると、次のような内容がたくさんありました。
メディアをコピーするには、
cat
次を使用します。http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.htmlcat /dev/sr0 > image.iso
以下を使用してこれを行います
dd
(明らかに最も広く使用されています)。http://www.linuxjournal.com/content/archiving-cds-iso-commandlinedd 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
それらのいくつかを(このツールを使用して)テストしましたが、少なくともそれらがすべて同じであるべきかどうかはわかりません。dd
pv
いいえ同じ。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/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
:キーボードに非常に近い、やや珍しいですi
。o
これに相当するものはなく、何でも幸せに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
これは完全に間違っています。他の人dd
とcat
同様にtee
、すべて入力からバイトを読み取り、出力にバイトを書き込みます。まさにここに本当の魔法があります/dev/sr0
。 dd
珍しいコマンドライン構文があるため、どのように機能するかを説明すると、作成された内容を説明することでより多くの機会を得ることができますcat /dev/sr0
。- 使用
dd
より大きなバッファサイズを持ちます。より良いパフォーマンスが可能ですが、必ずしもそうではありません(参照Linuxの一部のベンチマーク)。
主なリスクdd
は一部のデータを自動的にスキップできます。。パスがdd
あるかskip
どうかにかかわらず安全だと思いますがcount
、すべてのプラットフォームでそういうものかはわかりません。しかし、パフォーマンス以外には利点はありません。
pv
したがって、素晴らしい進捗状況を報告したい場合や望まない場合は、cat
それを使用してください。
答え2
答え3
このイベントにはいくつかの興味深い事実があります。
- 私が受け取った出力(今回は別のディスク、正確にはXubuntu 15.04 x64インストールディスクを使用しました)と2つのプロセスのチェックサム(
dd
およびpv
まったく同じ。 - 私の考えは、
dd
プロセスが完了した後に同じディスクでドライブを開いて閉じてから、そのpv
プロセスでテストを完了することです。これにより、両方のプログラムの同じコピーが得られました。 - 私考える最初は別のチェックサムを手に入れました。これは、何らかの理由でCD / DVDドライブから収集されたデータが、ある期間にわたって他の目的(たとえばキャッシュ)に「書き込まれた」ように見えたためです。つまり、チェックサムや他のタスクと同じです。これは送信よりもはるかに速く行われます。具体的な理由をご存知の方はコメントお願いします。
- もう1つの事実は、
dd
w / ocount=X
パラメータがディスクの端で正しく停止しpv
(同じチェックサム)、同じディスクイメージを提供することです。したがって、私にはdd
w / oパラメータを使用するか、単にpv
。
したがって、現時点では同じ結果でCD / DVDコピーを実行しているpv
ようです。dd