また、そもそも未使用部分が多いであろう場合に、カード全体をイメージにするのが適当なのだろうか、という素朴な疑問もある。
そこで、日本Ejectコマンド研究会会長にしてRaspberry Pi界の重鎮である、あっきいさんが書かれた、「NOOBS用カスタムOSイメージの作成」に触発を受け、実験してみたところうまくいったので報告しておく。
前提としてここでは、なにか別のSDカードに複製したい、オリジナルのSDカードがあり、さらに未使用もしくは再度利用する可能性のないSDカードがもう1枚があることを前提とした記述とする。
このためには、ext4ファイルシステムを理解するOSということで、Linuxマシンが必要となる。僕はUbuntu 14.4のマシンを用意した。
Ubuntuマシンに、オリジナルのSDカードを挿入すると、自動的に各パーティションすべてを一気にマウントしてくれる。それはつまり、bootパーティションであり、rootパーティションである。rootパーティションは、Raspbianのバージョンにも依存するかと思うけれど、6月20日版の場合、rootパーティションにはラベルがなく、 UUIDが直接マウントポイントになってしまう。
ここで、以下のようなコマンドを入力する。
内容まるごとUbuntu側にバックアップすることになる。# cd /home/xxxx/boot ←xxxxは自分のユーザ名 # tar cvpf ~/boot.tar . # cd ../root ←もしくは長いUUIDのフォルダ名 # tar cvpf ~/root.tar .
次に、新しいSDカードにそれを入れたいのだが、Raspbianの設定に合ったパーティションの設定しなおしから始まる。
gpartedは、Linuxでは非常に便利な、ディスクパーティションエディタだと思う。Ubuntu側にapt-get install gpartedで入れておく。
最初はOSがSDカードをマウントした状態で、gpartedを起動する。すると、ドライブを/dev/sdbに切り替えられるので、ここでようやく[パーティション]→[アンマウント]でマウントを外してパーティション設定ができるようになる(外さなくてもできるときもあるようだけれどあまり深く調べていない)。
Raspbianのパーティション構成は、以下の通り。
- 先頭4MB―未使用
- 56MB―bootパーティション(fat16フォーマット)
- 残り(4GB SDカードなら、3260MB)―rootパーティション(ext4フォーマット)
- 未使用が若干残る
バックアップした内容を、SDカードに書き込む。
これであとは、syncでもなんでもしてSDカードをアンマウントして、Raspberry Piに挿し直せばすぐに起動することができる。おそらく、4GBより大きなSDカードに対しても有効だと思う。# cd /media/ユーザ名/boot # tar xvpf ~/boot.tar # cd ../root ←もしくはUUID名。UUIDだと見づらいから、パーティションを切るときに「root」のラベルを付けておくとよいと思う。 # tar xvpf ~/root.tar