2-18. Raspberry Pi を "USBメモリ" に定期・自動バックアップ


rsyncを使って nginx Webサーバー + WordPress を、USBアダプタにつけたマイクロSDカードに同期させることで、 定期・自動バックアップ 運用を実現。


マイクロSDカードの書き換え寿命への完璧対策
 SDカード/マイクロSDカードの書き換え寿命は1万回くらいらしい。
 バックアップ用のマイクロSDカードは、1日1回バックアップを取った場合、
 読み・書き・削除で、バックアップ1回につき3回として、
 3回 x 365日 x 10年 = 10,950回 ➡ 10年は持つ。
 さらに、約 4G の使用領域を、約 29G の領域にバックアップするので、寿命は約 7倍。
 70年は持つ。

1. USBアダプタをつけたマイクロSDカードが認識されるか確認。

使用したUSBアダプタとマイクロSDカード。


変換名人
microSDHC(最大32GB)対応リーダーライター
USB2.0 接続 超短&キャップ付 TF-USB2/M

TOSHIBA
microSDHCカード 32GB Class10 (最大転送速度30MB/s)
SD-C032GR7AR30

下記例は、USBに接続した Raspberry Pi のSDカードが認識された状態。

ブート領域が、/dev/sda1 でマウント先が /media/usb0 になり、
/root 領域が、/dev/sda2 でマウント先が /media/usb1 になっている。

USBアダプタをつけたマイクロSDカードが認識されない場合。

sudo apt-get install usbmount

USBに挿入したままリブートしなければ認識されない場合がある。

sudo reboot
df -h

※: USBアダプタが認識される状態の Raspberry Pi SDカードをベースにしないと、
バックアップ後の(同期された)SDカードで起動したとき、USBアダプタが認識されない。
・・・と言う、厄介なことになる。


2. rsync のインストール

sudo apt-get install rsync

同期しない/同期してはいけないディレクトリを登録。

cd /
sudo nano rsync-exclude.txt

/proc/*
/sys/*
/dev/*
/boot/*
/tmp/*
/run/*
/mnt/*
/var/tmp/*
/var/log/*
/media/*

3. バックアップ用のマイクロSDカードを準備

①. Raspberry PiのSDカードを Win32DiskImager を使ってバックアップ。

②.  バックアップ用のマイクロSDカードにバックアップしたファイルをリストア。

③. もともとのSDカードをRaspberry Piに差し込んでRaspberry Piを起動。

④. USBアダプタにバックアップ用のマイクロSDカードをつけ、USBに装着。
 ・・・ この時のマウント先を確認 = /media/usb1


4. Raspberry Pi を rsync で同期してみる

rsync を使って実際に同期してみる。

sudo rsync -aEv --delete-during --exclude-from=/rsync-exclude.txt / /media/usb1/

rsync-exclude.txt の指定で、除外リストの読み込み。
 /media/usb1/ でUSBメモリを指定。

 正常に終了すると、次のようなメッセージが出て、完了。

sent 996,399,255 bytes received 1,309,730 bytes 500,732.24 bytes/sec
total size is 3,742,654,824 speedup is 3.75

さらに、/media/usb1/ の中に
 rsync-exclude.txt が入っていれば同期ができている。


5. バックアップの実行を cron で自動化する

crontabを編集。

sudo crontab -e

7 5 * * * rsync -a --delete-during --exclude-from=/rsync-exclude.txt / /media/usb1/

上記例は、毎日・5時7分にバックアップを実行。


2019.07.15 追記:
上記の方法で、上手く運用できていたが、
サーバのバージョンアップを行ったところ、
この方法ではうまく同期できなくなった。
コマンドベースで、且つ、除外ディレクトリを次のように指定すると、問題なく同期できる。
sudo rsync -av --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/etc/fstab","/var/share/*"} / /media/usb1/


参考:
★ Raspberry Pi SDカードに関するノウハウ一覧
 




関連ページ