空き容量のないディスクイメージ

空き容量のないディスクイメージ

16GB SDカード用のブータブルイメージがあります。以下を使用して画像を作成しました。

cat /dev/sdd | gzip >sdcard.img.gz

私は幸せだから

$ du -h sdcard.img.gz
482M    sdcard.img.gz

16GBの代わりに482MB、はい!

(圧縮されていない)画像の詳細は次のとおりです。

$ du -h sdcard.img
15G     sdcard.img
$ partx -s sdcard.img
NR START     END SECTORS SIZE NAME UUID
 1 16384   81919   65536  32M      6e1be81b-01
 2 81920 3588095 3506176 1.7G      6e1be81b-02

しかし、今この画像をSDカードに書き直す必要がありますが、14GBの末尾の0 /ガベージを書きたくありません!時間がかかります。

  1. 最後のパーティション以降のコンテンツをコピーせずにイメージを作成するには?
  2. SDカード全体の画像を作成した場合、役に立たないジャンクファイルが含まれないように画像を切り取るにはどうすればよいですか?

要点はバックアップされたイメージのサイズは関係ないが、SDカードに再転送されるサイズが気になる理由は、SDカードにコピーする速度も遅く、無駄な14GBをコピーしても役に立たないからです。データ。したがって、ディスクイメージを圧縮したり、意識が薄いインターネットの他の答えが示すように、ファイルシステムは私が探しているものではありません。

答え1

最初の質問に答えるには:そこにMBRがあるとし、「rawドライブの最初のメガバイト(ブートレコードとブートローダを含む)」などの操作を実行してから、含まれているddパーティションを繰り返すことをお勧めします。最初のメガバイトにターゲットドライブを使用するか、 dev=/dev/sda fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\) .*,\1,p' | while read part do dd "if=$part" "of=$(basename "$part")" done カーネルにパーティションテーブルを読み込むように依頼してください。その後、そのイメージコンテンツを新しいパーティションに追加できる必要があります。partprobekpartxdd

答え2

最後のパーティションの最後に書き込みます(この例では、合計2G(ギガバイト)のように少し多い)。

ddこの目的に使用できます。確認してもう一度確認してくださいEnterキーを押す前に、正しいSDカード(別のドライブではない)に書き込まれます。なぜなら、Enterキーを押すとdd質問なしで指示どおりに実行されるからです。

このコマンドラインは、圧縮されていないイメージファイルで機能します。

$ sudo dd if=sdcard.img of=/dev/sdx bs=1M count=2K

ここで、x はドライブ文字です。

ただし、この場合は圧縮されたイメージファイルがあります。rootたとえば、次のように実行するには、対応するsudo -sコマンドラインを次のようにzcat圧縮ファイルから抽出できますgzip

# < sdcard.img.gz zcat | dd of=/dev/sdx bs=4096 count=524288
524288+0 records in
524288+0 records out
2147483648 bytes (2,1 GB, 2,0 GiB) copied, 56,6886 s, 37,9 MB/s

関連情報