SDカードいっぱいにパーティションが作成されている場合、データが無い部分も含まれていて、そのままイメージ化すると無駄が多い。
そこで、データが記録されている部分だけにパーティションを縮小してイメージ化する方法をまとめた。
以下は別PC(Linux専用機)のFedoraでの作業
概要:
第2パーティションの使用量は2GB弱。(dfコマンドで確認する)
目標パーティションサイズを2.3GBとする。(少し余裕を残さないと後で困る)
resize2fsで縮小するサイズは2.2GBとする。
e2sck -f /dev/sdd2 チェックする(必須) resize2fs -p /dev/sdd2 2200M 目標パーティションサイズより少し少なくする 指定サイズが小さすぎて縮小が無理だとエラーがでる fdisk /dev/sdd dコマンドで第2パーティションを削除する pコマンドで状態を確認する nコマンドで新しいパーティションを作る(開始シリンダに注意) pコマンドで状態を確認する wコマンドで書き込む
e2fsck -f /dev/sdd2 チェックする(必須) fdisk /dev/sdd dコマンドで第2パーティションを削除する pコマンドで状態を確認する nコマンドで新しいパーティションを作る(開始シリンダに注意) pコマンドで状態を確認する wコマンドで書き込む resize2fs -p /dev/sdd2 サイズ指定をしなければ、パーティションサイズまで自動で拡張される
SDカードに作成した状態から、最小限のサイズだけイメージ化する。
例えば、8GBのカードに最小構成を作成して上記パーティションの縮小作業をして2GBまで切り詰めたとする。
これをそのままddやWin32DiskImageでイメージ化すると、8GBカードの後半6GBもゴミデータとしてファイルに書き出されてしまう。
# fdisk /dev/sdd Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sdd: 7948 MB, 7948206080 bytes, 15523840 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xf8e23f7b Device Boot Start End Blocks Id System /dev/sdd1 8192 92159 41984 c W95 FAT32 (LBA) /dev/sdd2 92160 4140072 2023956+ 83 Linux Command (m for help): q
dd if=/dev/sdd of=raspbian_pifw.img bs=512 count=4140073
こうしてやれば、出来上がったイメージを4GBのカードに展開することもできる。