起動可能な16GBSDカードのイメージがあります。私は次のように画像を作成しました:
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の後続ゼロ/ジャンクを書きたくありません。それには時間がかかります。
重要なのは、バックアップで画像が取るサイズは気にしないが、SDカードへのコピーは遅く、14GBの無駄なデータをコピーするのは無意味なので、SDカードに転送されるサイズは気にする。 したがって、インターネット上の他の回答が示唆しているように、ディスクイメージを圧縮するか、スパースアウェアファイルシステムにコピーすることは、私が探しているものではありません。
最初の質問に答える:そこにMBRがある場合、元のドライブ(ブートレコードと場合によってはブートローダーを含む)の最初のメガバイトをdd
'してから、反復することをお勧めします。そこに含まれるパーティション:dev=/dev/sda fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\) .*,\1,p' | while read part do dd "if=$part" "of=$(basename "$part")" done
そして、最初のメガバイトをターゲットドライブに記録した後、カーネルにpartprobe
またはkpartx
でパーティションテーブルを読み取るように依頼します。この後、対応するイメージの内容を新しいパーティションにdd
できるようになります。
最後のパーティションの最後に書き込みます(さらに少し、たとえばこの場合は合計2G(ギビバイト))。
この目的のためにdd
を使用できます。 チェックとダブルチェックdd
は問題なく指示どおりに実行するため、Enterキーを押す前に正しいSDカード(別のドライブではなく)に書き込みます。
このコマンドラインは、非圧縮の画像ファイルから機能します
$ 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