ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

すごく簡単にRaspberry PiのSDカードをバックアップする方法

まえがき

スマホを再起動すると、SDカードに保存していた写真データが消えていました。電源断でいってしまったようです。SDカードのフォーマットで8割復活しました。

ところで、ラズパイのHDDもSDカードです。

2019年にラズパイの3b+モデルを購入し安定的に作動していましたが、これを機にバックアップ機構を作ることにしました。

ラズパイ4モデルでも可能です。

バックアップ方法検討

最も手数が少ない方法1を採用です。

方法 概要 コメント
SDカード(差し込み式のUSBリーダー)にバックアップ rpi-cloneを使う方法です。すべてがCUIで完結し、ラズパイが壊れてもSDカードを差し替えるだけです。
USBメモリにバックアップ ラズパイが壊れた時にUSBからブートするよう設定処理が必要です。ddコマンドなどを使って操作するので慎重に行う必要があります。ラズパイ4だとより簡便になったようです。
WindowsでMiniTool Partition Wizardを使ってバックアップ Windowsのアプリで頑張る方法ですが、一番手間が多いです。バックアップ毎に毎回ラズパイからSDカードを抜く必要があります。

使うもの

上で書いた「SDカード(差し込み式のUSBリーダー)」とは、以下のようなmicroSDカードリーダーとUSBメモリーが一体化した一品です。 Amazonで333円でゲットしました。さすがバッファロです。

これにはSDカードはついていないので、別途購入します。

ラズパイと同じ16GBのSDカードが家にありましたのでそれを使います。

そして前者に後者をドッキングさせます。以下のように差し込むところの意外性にちょっと驚きます。

実施

SD Card Copierでラズパイのバックアップ(クローン)もしくは、rpi-clone + cronで毎夜1時にバックアップする - あとをしNOTE こちらのサイトの通り実行しました。 すべてpiユーザで実行しています。

買ってきたUSBリーダーは後にして、まず挿入前の状態です。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 14.9G  0 disk 
├─mmcblk0p1 179:1    0  1.6G  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0  256M  0 part /boot
└─mmcblk0p7 179:7    0   13G  0 part /
$ df -m
ファイルシス   1M-ブロック  使用 使用可 使用% マウント位置
/dev/root            12961  4909   7372   40% /
devtmpfs               404     0    404    0% /dev
tmpfs                  437     0    437    0% /dev/shm
tmpfs                  437    28    409    7% /run
tmpfs                    5     1      5    1% /run/lock
tmpfs                  437     0    437    0% /sys/fs/cgroup
/dev/mmcblk0p6         253    48    205   19% /boot
tmpfs                   88     1     88    1% /run/user/1000

16GB(おそらく実質は15GB)のSDカードなので、大体10GBくらい使っています。

やっていきます。

gitからrpi-cloneモジュールを落としてきて、コマンド実行できるようにsbin配下に置きます。

$ git clone https://github.com/billw2/rpi-clone.git
$ cd rpi-clone
$ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin

ラズパイをシャットダウン(sudo shutdown -h nowコマンド)し、コンセントを引っこ抜き、USBを差し込みます。

USBポートは4口あったのでどこにするか迷います。

また電源を差し込みます。勝手に起動します。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1   15G  0 disk 
mmcblk0     179:0    0 14.9G  0 disk 
├─mmcblk0p1 179:1    0  1.6G  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0  256M  0 part /boot
└─mmcblk0p7 179:7    0   13G  0 part /

sdaパーティションが仲間に加わっています。

さて、あとはrpi-cloneを実行するだけです。

$ sudo rpi-clone sda
Initialize and clone to the destination disk sda? (yes/no):  ←yesを入力
Optional destination ext type file system label (16 chars max):  ←Enter

22分かかりました。

おわりです。

sda配下に色々作られています。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1   15G  0 disk 
├─sda1        8:1    1  1.6G  0 part 
├─sda2        8:2    1    1K  0 part 
├─sda5        8:5    1   32M  0 part 
├─sda6        8:6    1  256M  0 part 
└─sda7        8:7    1 13.1G  0 part 
mmcblk0     179:0    0 14.9G  0 disk 
├─mmcblk0p1 179:1    0  1.6G  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0  256M  0 part /boot
└─mmcblk0p7 179:7    0   13G  0 part /

毎夜3時に実行されるようcronを登録しておきます。

差分バックアップしてくれるようです。

$ sudo crontab -e
00 3 * * * sudo bash rpi-clone sda -q

実行ログは以下のパスにあります。

$ cat /var/log/rpi-clone.log

おわり

これで安心してラズパイを使い続けられるようになりました。 バックアップ処理失敗時に、Slackやgmailに通知するようにしたいですが、またの機会に。