2019年8月14日水曜日

Raspberry Piのイメージバックアップのサイズを小さくする

Raspberry Piでイメージバックアップをとるとき、ddコマンドなどでSDカード全体のイメージをファイルにする方法がある。この方法で問題になるのが、同じ容量のSDカードでも微妙に使用できる容量が違うことがあって、例えば、16GBのSDカードからとったイメージバックアップを別の16BGのSDカードに正常にリストアできないことがある。また、大きなサイズのSDカードを使っていると、無駄にサイズが大きなバックアップファイルになってしまうこともある。そういうわけで、イメージバックアップを作成するときに、パーティションの使っていない領域を削って上記の問題が起きないようにする方法をまとめておく。


使うもの


Raspbery Pi 3 Model 3
縮小バックアップをとるRaspbian(Stretch)がインストールされたマイクロSDカード
Raspbian with desktopのイメージ(パーティション縮小やバックアップに使う)
USBメモリ(Raspbian with desktopをインストールする)
マイクロSDカード(縮小バックアップのリストア確認用)


バックアップ&パーティション縮小環境の作成


イメージバックアップのサイズを減らすためにパーティションのサイズを縮小するが、そのためにはGpartedを使う。Gpartedが使えるUbuntuなどの環境があればそれでもできると思うが、ない場合はUSBメモリにインストールしたRaspbianでGpartedを使う。

まずはUSBメモリにデスクトップ環境が使えるRaspbian with desktopのイメージを書き込む。作成しておいたイメージバックアップでもいいし、Raspberry PiのサイトからダウンロードしたイメージでもOK。USBメモリにイメージを書き込んだら、Raspberry Pi 3でUSBブートするにあるように/boot/config.txtに「program_usb_boot_mode=1」を追記する。


このUSBメモリをRaspberry Piに挿入し(SDカードは抜いておく)、電源を入れて起動させる。USBメモリからブートして初期設定などが終わったら、Gpartedをインストールする。メニュー>設定>Add/Remove Softwareで「Gparted」で検索すると「GNOME partition editor」が見つかるのでこれをインストールする。


パーティションの縮小


バックアップをとるSDカードにあるパーティションのサイズをGpartedで縮小する。パーティションをいじるので、万が一のことに備えて前もってSDカードのイメージバックアップ(フルサイズ)を作成しておいた方が安心。

USBメモリから起動したRaspberry Piに縮小バックアップをとるSDカードをスロットに挿入して、設定>GpartedでGpartedを起動する。

SDカードを挿入すると自動的にマウントされるので、Gpartedが起動したら対象のSDカードを選択してアンマウントする。

続いて、サイズを縮小するパーティションを選択してメニューから「リサイズ」を選ぶ。

ウィンドウ上部の枠をマウスでドラッグすると左右に動かせるので、それで縮小後のサイズを決める。ギリギリまで縮小するとリストアしたときに空き容量不足になってしまうかもしれないので、余裕を持たせておく。

最後に、変更を適用する。

※パーティションサイズを縮小したSDカードを後で使う予定なら、縮小バックアップ後にパーティションサイズを戻しておく。


縮小したイメージのバックアップ


ddコマンドで縮小したパーティションサイズに合わせてイメージバックアップを作成する。まずは、ターミナルを起動してバックアップを作成するSDカードのパーティションを確認する。


確認するのはバックアップを作成するSDカードのデバイス名(/dev/mmcblk0)。それから、セクターサイズ(Sector size)と/dev/mmcblk0p2(最後のパーティション)のEndセクターの値。ここではそれぞれ512と20639743で、/dev/mmcblk0p2の終端は512バイトのセクター20639743個分の位置にあることになる。

ddコマンドはブロックサイズ単位で読み書きをするが、ブロックサイズはbsオプションで指定する。また、コピーするブロック数はcountオプションで指定できる。ddコマンドでバックアップを作成するときに/dev/mmcblk0p2の終端を含むようにオプションを指定すればデータが欠損することなくイメージバックアップを作成できる。

ddコマンドでブロックサイズを4MBに指定する場合、countオプションに指定する値を求める式は以下のようになる。

(セクターサイズ)x (/dev/mmcblk0p2のEndセクター数)/ (ddコマンドのブロックサイズ)

今回の場合は次のようになる。
512 x 20639743 / (4 x 1024 x 1024) = 2519.499...

countオプショには小数点以下を切り上げした2520を指定し、以下のddコマンドでSDカード(mmcblk0)のイメージバックアップをbackup.imgとして保存する。



バックアップしたイメージの確認


最後にバックアップしたイメージをSDカードに書き込んで、それで問題なく起動できることを確認しておいた方が安心。USBメモリから起動したRaspbianのddコマンドでSDカードに書き込んでもいいが、今回はWindows PCでSDカードにイメージを書き込む。

バックアップファイルはext4のドライブに保存したので、特別なソフトウェアなどを使わないとWindowsではバックアップファイルを読めない。そこで、NASを経由してWindows PCにコピー。

RaspbianでNASをマウントするには以下のコマンド。nasuser、naspasswordはNASにアクセスするユーザーとそのパスワード。192.168.1.100はNASのIPアドレスでbackupは共有名。


あとは、Windowsで縮小バックアップしたイメージをSDカードに書き込んで、そのSDカードで正常に起動できることが確認できれば完了。



0 件のコメント:

コメントを投稿