
私のマイクロSD(8GB)に.imgファイルを追加しようとしています。 ROM(.img)は2.66 GBですが、私のDD(ライブ)出力には送信済みとしてマークされています。9GB。 2GBの画像を9GBに変換する方法がわかりません。私はOSX Lionを実行しており、Belkinカードリーダーを使用しています。カードリーダーは問題ではなく、ディスクユーティリティを問題なく使用します。問題はddや私のカードにあると思います(私のカードではないことを願っています:()。
編集:これはファイルをコピーするために使用するコマンドです。
dd if=honey.img of=/dev/disk1 bs=1m
状態を確認するために使用するコードは次のとおりです。
killall -INFO dd
答え1
あなたが説明する動作とファイルの性質のために、これは次のように思われます。スパースファイル。スパースファイルは、ファイル内の大量のヌルバイトシーケンスがディスクに保存されない基本的な圧縮技術です。以下は、スパースファイルを生成する例です。
$ echo a | dd seek=999999999 >sparse
0+1 records in
0+1 records out
2 bytes (2 B) copied, 6.614e-05 s, 30.2 kB/s
$ ls -l a
-rw-r--r-- 1 gilles gilles 511999999490 Apr 30 00:03 sparse
$ du sparse
16 sparse
ファイルsparse
には511999999490バイト(999999999 512バイトブロック、すべてa
0、2バイトの後に改行文字)が含まれています。ただし、ファイルが使用する合計ディスク容量は16kBです(最後のブロックは4kBで、他の3つのブロックには他のブロックの場所に関するメタデータのみが含まれており、すべては存在しません)。
honey.img
ディスクイメージを十分に慎重に作成すると、未使用のスペースを持つディスクがまれになる可能性があります。
ファイルを読み取るときにリーンとマークするものはありません。したがって、honey.img
大容量ディスクイメージの場合は、dd
nullバイトのみを含むギガバイトを読み取ることができます。
ファイルでls -l
および(またはOSXの場合)を実行すると、保存に使用されるバイト数とブロック数が表示されます。バイト数がブロック数に合わない場合、ファイルは稀です。私が書いたように、あなたはこれを確認または証明する明確なデータを発表しませんでした。du
ls -ls
OSXから希少ファイルを効率的にコピーできるツールは次のとおりです。同期。しかし、ここで行うことは、あるファイルシステムから別のファイルシステムにファイルをコピーするのではなく、ファイルから発生したバイトストリームをディスクにコピーすることです。これは、データが実際にターゲットディスクに収まる場合にのみ実行できます。
答え2
Debianライブバイナリ.imgを2GBのUSBフラッシュドライブに転送しようとしたとき、非常に似た問題が発生しました。画像サイズは1.6GBで表示されます。 statの使用に関する上記のMattのコメントはとても役に立ちました。ブロックサイズをブロック数(3,109,040)の4096倍で計算した結果、リストされたサイズである1.6GBのほぼ8倍の12,734,627,840となった。 ddコマンドにもbs = 1Mを使用していることを確認し、bs = 4096がリストされているstatコマンドを再試行し、元の予想どおりに1.6GBファイルをコピーしました。そのため、ブロックサイズより大きいブロックをコピーすると、ブロック単位でのみコピーされるという感じがします。ただし、ブロックサイズにコピーする場合(テストされていないが小さい場合があります)、ddはブロック内の内容を評価し、余分なゴミを切り取ります。ヒントありがとう、マット。