Create SDCard Image - h-sendai/RaspberryPi GitHub Wiki

独自イメージの作成

既存のRaspberry Pi OSをSDカードに書いて、自分に必要な パッケージをセットアップし、ユーザー登録した状態のイメージを 準備できれば手間が減る。

いったんSDカードを使って自分の環境をセットし、SDカードを ddで読み出す。

例:

# dd if=/dev/sdg of=myraspi-64bit.img status=progress
15459705856 bytes (15 GB, 14 GiB) copied, 469 s, 33.0 MB/s 
30228480+0 records in
30228480+0 records out
15476981760 bytes (15 GB, 14 GiB) copied, 469.897 s, 32.9 MB/s

書いたイメージを PiShrink https://github.com/Drewsif/PiShrink を使って縮小する:

# /path/to/pishrink.sh myraspi-64bit.img 
pishrink.sh v0.1.3
pishrink.sh: Gathering data ...
Creating new /etc/rc.local
pishrink.sh: Checking filesystem ...
rootfs: 46892/910176 files (0.2% non-contiguous), 489078/3712000 blocks
resize2fs 1.45.6 (20-Mar-2020)
pishrink.sh: Shrinking filesystem ...
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/loop0 to 683441 (4k) blocks.
Begin pass 2 (max = 76005)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 114)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/loop0 is now 683441 (4k) blocks long.

pishrink.sh: Shrinking image ...
pishrink.sh: Shrunk myraspi-64bit.img from 15G to 2.9G ...

ddですいだした16GBのイメージが2.9GBまで減った。

できたイメージをkpartx -a /path/to/myraspi-64bit.imgとして マウント可能なようにして mount -o ro /dev/mapper/loop0p2 /mnt してみると/etc/rc.localにSDカードの全領域を使うようにする プログラムが入っており、最初の起動でこれが実行されることが わかる。

実際にPiShrinkで作ったイメージをddコマンドでSDカードに書いて 試してみると、ディスク領域拡張後に自動でリブートし、リブート後は SDカード上の/パーティションの領域が拡張されていた。

PiShrinkが追加する/etc/rc.localファイル