web-dev-qa-db-ja.com

ddを使用したディスククローンが実際のデータサイズよりも多くのスペースを必要とするのはなぜですか?

ddコマンドを使用してディスクのクローンを作成しようとしています。私の入力ディスクサイズは1Tbで、10%しか満たされていません。出力ディスクのサイズは300Gbで、クローンを作成すると予想していたよりも大きくなっています。

しかし、クローン作成が終わった後、次のメッセージが表示されました:No space left on device

これは、1Tbの10%が300Gbのスペースを埋める方法が少し奇妙です。誰かが私にこのことを説明できますか、なぜこれが起こったのですか?データが破損しましたか?

2
kishoredbn

入力デバイス(if=)のサイズが1 TBの場合、出力ファイル(of=)も1TBになります。

ddは、データが何であるか、またはデータが割り当てられているかどうかに関係なく、入力ストリームから出力ストリームにすべてのバイトをコピーするだけの非常に低レベルのツールです。これには、空の(0x00)セクターやゴミが含まれているセクターも含まれます。 「ファイル」、「ディレクトリ」などを表す高レベルのデータ構造には関係ありません。

1TBディスクの正確なバイト単位のクローンを取得することが目標である場合は、データをより小さなディスクに収めるために、bzip2などの圧縮アルゴリズムを介してデータをパイプ処理する必要があります。

データを単にバックアップすることが目標である場合、ddはそのための適切なツールではありません。代わりに、tarまたはその他のアーカイブツールを使用することをお勧めします。

5
Wes Sayeed

ddは、ファイルシステムではなく、基盤となるディスクを直接コピーします。割り当てられたブロックや未使用のスペースについては知りません。

ファイルシステムのみをキャプチャする必要があり、それがマウントされていないLinux EXTxファイルシステムである場合は、を使用して最小サイズに縮小することをお勧めします(マウントを解除して最初にfsckする必要があります)。

resize2fs -M/dev/sd ??

次に、ファイルシステムが存在するパーティションをバックアップディスクにコピーします。

最も熟した茎を元のサイズに戻す(空き容量を取り戻す)には、次のコマンドを実行します。

resize2fs/dev/Ed ??

さらに良いことに、tarのようなファイルシステム対応のアーカイブツールを使用してください。

2
petiepooo

これは、1Tbの10%が300Gbのスペースを埋める方法が少し奇妙です。

いいえ。 100% 1TBの300GBのスペースがいっぱいになり、もっと欲しかった。

100ページと最初の10ページにメモがあるノートブックと考えてください。ノートブックをXeroxスタイルのコピー機に置き、本全体をコピーすると、100ページの新しいページになります。それらのほとんどが空白であっても。

Ddの使用はRAWコピーです。使用中のデータはコピーされません。そのためには、塗りつぶされたページと空行だけのページの違いを理解するものが必要になります。

誰かが私にこのことを説明できますか、なぜこれが起こったのですか?データが破損しましたか?

いいえ、あなたはあなたが望んでいた以外のことをするように命令しただけです。

0
Hennes