
FriendlyElec NanoPi R2Sを例に、 OpenWRT 設定 のNASへの定期 バックアップ に加え、システムが収められたmicro SDの定期的な イメージ バックアップ を設定しました。
OpenWRT設定バックアップ対象を確認
OpenWRTの設定バックアップでその対象となるファイルは、LuCIを System → Backup / Flash Firmware と辿った Configuration タブで、設定・確認することができます。
/etc/config/ はデフォルトでバックアップ対象になっているので、他に必要な項目を適宜追加して、 Open list ボタンでリストを確認する要領です(CLIでの sysupgrade -l に相当)。
私はrootホーム直下にスクリプトファイルを置いているのでそれを追加したり、今までに触ったことのある設定ファイルをなどを追記しています。
設定バックアップ項目の追加
OpenWRTの設定をバックアップする上で、公式ガイドととても参考になるのがこちらの記事でした(Great Works!!)。
OpenWRTではユーザが後から導入したパッケージのリストが設定バックアップに含まれていないので、 /etc/config/ へリストを生成しておくと、レストア時に困りません。
1 |
# opkg list-installed > /etc/config/installed.packages |
先述の記事では、このリストを opkg へ投げつけてのパッケージ一括レストアの方法も紹介されているのですが、流石に今回は試しません。なお、このリストにはレポジトリ外から ipk ファイルでインストールしたパッケージも含まれるので、注意が必要です。
また、導入したものの敢えて動かしていないサービスがあるとレストア時に紛らわしいので、これも次の要領でリスト化しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# for F in /etc/init.d/* ; do $F enabled && echo $F on || echo $F **disabled**; done > /etc/config/svclist.txt # cat /etc/config/svclist.txt /etc/init.d/boot on /etc/init.d/cron on /etc/init.d/ddns on /etc/init.d/dnsmasq on /etc/init.d/done on /etc/init.d/dropbear on /etc/init.d/firewall on /etc/init.d/gpio_switch on /etc/init.d/irqbalance on /etc/init.d/led on /etc/init.d/log on /etc/init.d/network on /etc/init.d/ocserv on /etc/init.d/odhcpd on /etc/init.d/rpcd on /etc/init.d/sysctl on /etc/init.d/sysfixtime on /etc/init.d/sysntpd on /etc/init.d/system on /etc/init.d/ucitrack on /etc/init.d/uhttpd on /etc/init.d/umount **disabled** /etc/init.d/urandom_seed on /etc/init.d/urngd on /etc/init.d/usbmode on /etc/init.d/vnstat on /etc/init.d/wpad on |
OpenWRT設定をリモートバックアップ
CLIベースでOpenWRTの設定をバックアップする sysupgrade -b コマンドの出力先を標準出力とし(コマンド末尾のハイフン)、NASへのsshをパイプで繋ぐことで、リモートホストへのオンザフライバックアップが実現されます。
1 |
# sysupgrade -b - | ssh USERNAME@IP_ADDR "cat > /volume1/gadget/routers/${HOSTNAME}/${HOSTNAME}_$(date +%F).tar.gz" |
このとき、R2Sのssh公開鍵( ~/.ssh/id_rsa.pub )をバックアップ先NASの authorized_keys へ登録して、パスワードレスでのsshアクセスが可能であることが前提です(解説記事はこちら)。
先のインストール済パッケージリストやサービスリスト生成コマンドと共に、これをOpenWRTの Scheduled Tasks へ登録しておけば、NASへ定期的な設定のバックアップが蓄積されるという仕組みです。
システムSDイメージをリモートバックアップ
GL-AR750Sの時と異なり、NanoPi R2SのOpenWRTシステムはmicro SDカードに展開されているので、ブロックデバイスレベルでのイメージをバックアップとして取得することが可能です。
このアプローチは以前にRapsberry Piにて、試したことがありました。
まず、ターミナルにてmicro SDデバイスの情報を確認。
1 2 3 4 5 6 7 8 9 |
# ls -l /dev/mmc* brw------- 1 root root 179, 0 Jul 24 17:40 /dev/mmcblk0 brw------- 1 root root 179, 1 Jul 24 17:40 /dev/mmcblk0p1 brw------- 1 root root 179, 2 Jul 24 17:40 /dev/mmcblk0p2 # df -h Filesystem Size Used Available Use% Mounted on /dev/root 788.5M 49.1M 723.5M 6% / tmpfs 495.8M 1.6M 494.2M 0% /tmp tmpfs 512.0K 0 512.0K 0% /dev |
これを元にRapsberry Piの時と同じ要領で、中間ファイルを作らずにネットワーク上のSynology NASへイメージのオンザフライバックアップを試みます。
1 2 3 4 5 6 |
# dd if=/dev/mmcblk0 conv=sync,noerror | gzip -6 | ssh USERNAME@IP_ADDR dd of=/volume1/gadget/routers/${HOSTNAME}.img.gz 1968128+0 records in 1968128+0 records out 48836+1 records in 48836+1 records out 25004136 bytes (25 MB) copied, 73.1178 s, 342 kB/s |
容量1GBあるmicro SDカードはその1割も使用していないので、ディスクイメージのバックアップと言っても、1分程度で終わりました。バックアップ先のNASで生成物を確認します。
1 2 3 4 5 6 |
$ ls -l /volume1/gadget/routers/ drwxrwxrwx 2 admin users 4096 Jul 28 10:21 R2S -rw-r--r-- 1 admin users 25004136 Jul 28 21:40 R2S.img.gz $ gzip -l /volume1/gadget/routers/R2S.img.gz compressed uncompressed ratio uncompressed_name 25004136 1007681536 97.5% /volume1/gadget/routers/R2S.img |
本当にディスクイメージは吸い出せたのか、以前記事にした要領でイメージファイルをループバックデバイスに登録の上、 gparted で覗いてみます。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo losetup -f /dev/loop31 $ sudo losetup /dev/loop31 ~/Desktop/R2S.img $ ls -l /dev/loop31* brw-rw---- 1 root disk 7, 31 7月 28 22:46 /dev/loop31 $ sudo gparted /dev/loop31 Unit -.mount does not exist, proceeding anyway. ====================== libparted : 3.2 ====================== |
始めの設定バックアップに続き、イメージバックアップも Scheduled Task へ追加します(頻度は週一とした)。
数日運用後、バックアップフォルダの様子を確認しました。
1 2 3 4 5 6 7 8 9 10 |
$ ls -lR /volume1/gadget/routers/ /volume1/gadget/routers/: drwxrwxrwx 2 admin users 4096 Aug 1 03:18 R2S -rw-r--r-- 1 admin users 25008068 Jul 30 04:29 R2S.img.gz /volume1/gadget/routers/R2S: -rw-r--r-- 1 admin users 100678 Jul 28 10:21 R2S_2022-07-28.tar.gz -rw-r--r-- 1 admin users 104791 Jul 29 09:15 R2S_2022-07-29.tar.gz -rw-r--r-- 1 admin users 107982 Jul 30 03:18 R2S_2022-07-30.tar.gz -rw-r--r-- 1 admin users 106677 Jul 31 03:18 R2S_2022-07-31.tar.gz -rw-r--r-- 1 admin users 106900 Aug 1 03:18 R2S_2022-08-01.tar.gz |
このまま放置すると設定バックアップが無限に増え続けるので、直近14個を保持するようにこちらの記事で以前組んだスクリプトをSynology NAS上で定期実行しています。