[Raspberry Pi 3]ディスクイメージを作ってバックアップする

   2018/07/31

Raspberry Piのバックアップとして、イメージディスクを作る。
単純にバックアップを取るだけだと、SDカード内の空き領域を含めた無駄にでかいイメージファイルになってしまうので、ここでは圧縮したイメージディスクを作る。

2種類の方法を紹介。

パーティションを縮小してからバックアップを取る方法

圧縮というか、パーティションを縮めてしまえばイメージディスクのサイズが小さくなるでしょう、という考え。
主にUbuntu(Linux)を使う。

パーティションを縮小

まずGPartedでSDカードのパーティションを縮小する。
空き領域をギリギリまで削ってしまうと縮小に失敗するので、少し余裕を持たせて縮小させる。
僕の場合、8.2GBまでしか縮小できないところを、8.5GBで縮小しようとしたらエラーが発生した。
9GBで成功した。
更に言うと、Raspbianでやろうとしたら失敗して、Ubuntuだとうまくいった。

shrink file system 00:00:00 ( ERROR )
 resize2fs -p /dev/sda2 8704000K
  resize2fs 1.42.12 (29-Aug-2014)
  resize2fs: New size smaller than minimum (2291995)

ddコマンドでイメージディスクを作る

UbuntuでもMacでもできる。

Ubuntu

デバイス名を調べる。

今回は/dev/sdfだとわかったので、以下のコマンドでパーティションサイズを調べる。

/dev/sdf2の「最後から」の数値が最終セクタ番号になるらしい。
ということで、その値に+1した値を指定して、以下のコマンドを走らせるらしい。

また、status=progressをつけることで進捗が見られるようになる。

ちなみに、うちの環境だとこれで転送速度が20[MB/s]くらいになる。

Mac

SDカードがどのデバイスかを確認。

番号がわかったら、それを元に以下のコマンドを走らせる。

2番目のstart+size(=18524160)が欲しいバックアップのサイズになるので、この値を指定してddコマンドを走らせる。

今回の場合、SDカードはdisk2だったので、それを指定して「rpi.img」という名前のイメージディスクを作る。
注意すべき事として、この時指定するデバイス名は「rdisk2」のように、先頭にrを足すこと。その方が早い。

ちなみにCtrl+Tを押すことで、コピーの途中経過を知ることができる。

転送速度は1[MB/s]くらい。めちゃくちゃ遅い。
Ubuntuを持っているのであれば、Ubuntuでddコマンドを走らせて、それをUSBメモリでMacに移し替えるのがいいかも。

SDカード全体のイメージファイルを作ってから圧縮する方法

圧縮には、Raspberry Piを使う。
ちなみにこの方法はRaspbian限定なので注意。

イメージファイルを作る

イメージファイルの作成はPCで行う。
デバイス名を調べる方法は「ddコマンドでイメージディスクを作る」を見てほしいが、コピーするコマンドは以下のようになる。
今回はSDカード全体をコピーするのでcountオプションを使う必要がなく、bsオプションで転送速度を上げることができる。

Ubuntu

転送速度は20[MB/s]くらい。
Ubuntuではあんまり違いが出ない。

Mac

転送速度が60M[bytes/sec]くらいまで跳ね上がる。

Raspberry Piに接続

そしたら、生成したイメージファイルと下のPerlスクリプトを外付けHDDとかに入れて、Raspberry Piに接続する。

ちなみに、Macの外付けHDDを接続した場合、フォーマットの違いで読み取り専用になってしまうので、以下のようにして書き込みもできるような形でマウントし直す。

圧縮する

Raspberry Piを起動したらターミナルを開き、resizeimage.plのあるディレクトリに移動して、以下のコマンドを実行。

これで圧縮されたimgファイルが作成されるはずだ。
場合によっては「/dev/loop0: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.」といったようなエラーが出てしまうが、その時はなんとかしないといけない。
まだ解決法が見つかっていないので、ここはあとで追記する。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

eight + 19 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください