Raspbian SDカードイメージファイルの作成(改訂版)

Raspbian SDカードイメージファイルの縮小

概要

Raspberry Pi OS(May 7th 2021)のインストール でセットアップしたSDカードをバックアップしておけば逐一セットアップ作業を行わなくても環境を復元できます。

ただ、そのままSDカードをイメージファイル化しただけでは復元するSDカードのサイズが微妙に小さい場合などは、復元できなくなってしまいます。
そこで、バックアップしtイメージファイル内のパーティションサイズを縮小し、イメージファイルを小さくして保存します。

以前、Raspbian SDカードイメージファイルの縮小Jetson nano のSDカードをバックアップする でも書いていますが、今回はSDカード上でパーティションを縮小する方法にしてみました。
これだと、不要な部分のバックアップを行わなくて済むので、ディスク領域/時間敵に有利かと思います。

Windowsでは出来ない操作があるので、Ubuntu PCが必要です。
WSLではたぶん出来ません。
Virtualboxだと出来そうな気がしますが、試していません。

事前準備

RaspberryPiの準備

コピーしたSDカードで初回Boot時にパーティションを拡張するためのスクリプトexpand_partition.shここ から適当なディレクトリにダウンロードしておきます。
(SDカードのコピーからブートしたあとに実行するので、コピーからブートした環境でダウンロードしても良いですが、 マスタにダウンロードしておけばコピーの度にダウンロードしなくて済むので。)

mkdir ~/first_boot_settings
cd  ~/first_boot_settings
wget https://ippei8jp.github.io/memoBlog/misc/stock/expand_partition.sh

[!NOTE] RaspberryPiの場合はraspi-configでパーティション拡張できるので、このスクリプトはなくても良い。

RaspberryPiの電源をOFFし、SDカードを取り外してubuntu PCに挿入しておきます。

Ubuntu PCでの操作

以下、SDカードは/dev/mmcblk0に割り当てられているものとします。

[!NOTE] SDカードが自動マウントされている場合はアンマウントしておいてください。

sudo umount /dev/mmcblk0p1
sudo umount /dev/mmcblk0p2

gpartedのインストール

パーティション操作を行うため、gpartedがインストールされていなければインストールしておきます。

sudo apt install gparted

gpartedによりパーティションを縮小

[!NOTE] gpartedによるパーティションの縮小はマウントしたままではできません。
したがって、RaspberryPiでは作業できず、Ubuntu PCで行う必要があります。

データサイズを確認

以下のコマンドを実行し、コピーすべきデータサイズを確認します。

sudo parted /dev/mmcblk0 unit MiB print

以下が実行結果例。
ここで、パーティション2の終了位置をメモ(ここでは3760)しておきます。

モデル: SD SA16G (sd/mmc)
ディスク /dev/mmcblk0: 14772MiB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始     終了     サイズ   タイプ   ファイルシステム  フラグ
 1    4.00MiB  260MiB   256MiB   primary  fat32             lba
 2    260MiB   3760MiB  3500MiB  primary  ext4

イメージファイルの作成

以下のコマンドでSDカードのデータをイメージファイルに保存します。
ここで、of=で指定しているのが作成するイメージファイル名、
count=は上で調べたパーティションの終了位置をしていします。

sudo dd if=/dev/mmcblk0 of=hoge1.img bs=1M count=3760 status=progress

必要ならzip圧縮しておきます。

zip hoge1.zip hoge1.img 

新しい環境での起動

新しいSDカードにバックアップを復元

上で作成したイメージファイルをSDカードに書き込み(WindowsでもUbuntuでもお好きにどうぞ)、

最初のブート

RaspberryPiに挿入しBootします(特別な手順は特にありません)。

新しいSDカードのパーティションを拡張

Boot完了したらlog inしてパーティションサイズを変更するために 以下のコマンドを実行します。

bash first_boot_settings/expand_partition.sh

[!NOTE] または、RaspberryPiにgpartedをインストールして、
パーティションを縮小したときと同様に最大サイズまでパーティションサイズを拡大しても良いです。
パーティションの拡大はマウントしたままでも可能。

[!NOTE] RaspberryPiの場合はraspi-configでパーティション拡張できる

sudo raspi-config --expand-rootfs  

Please rebootと言われたらrebootする。

その他

必要であれば、ホスト名など必要な変更を行います。

リブート

リブートします。