iPhoneと異なり、いまいちバックアップ手法に決め手が無い Android 。私は初期の頃から rsync を使った母艦PCやNASとの同期を愛用しているのですが、アプリの設定が面倒なのが最大のネック。しかし動いてしまえば、以後はワンクリックで同期出来るこの手法を機種変更時の備忘録としてまとめます。
rsync backup for Android
Androidのかなり初期から愛用してきたのが、こちらのrsync backup for androidというラッパーアプリ。
Android 7搭載の華為 Mate 9でも機能していたシンプルなアプリなので、ASUS ZenFone 7(Android 10)でも大丈夫と思っていたら、動きませんでした。アプリのインストールは問題なく終え、開くことも出来るのですが、実際にプロファイルを作って同期させても即終了に。元々作者さまによるメンテも途絶えて数年なので、改善を待つより代替アプリを探すことにします。
ちなみにこのとてもシンプルなアプリは、作成するプロファイルがほぼ手打ちになってしまうのが辛いところですが、プロファイルデータは、
1 |
/data/data/eu.kowalczuk.rsync4android/shared_prefs/settings.xml |
に格納されているので、機種移行の際やもしもの時のバックアップにこのファイルを利用するのが便利。
尚、Android 7搭載の華為 Mate 9での動作の様子はこのようになります。動けばシンプルでサクサクです。
rsync Wrapper
代替としてまず見つかるのがこちら、名前の通りのrsyncのラッパーアプリです。
早速インストールしてみると、rsync backup for android同様、シンプルなUIですが、ラッパーの向こうにいるのは同じrsyncなので、オプションパラメータはほぼ同じ要領で受け付けてくれます。
sshプロトコルでの鍵認証に使う鍵ペアは、rsync backup for Androidで使っていたのを引き継ぎます。どちらのアプリでもアプリ内に鍵ペアを生成する機能はあるのですが、近年はOpenSSHサーバ側の鍵の最低強度が厳しくなってきていることもあり、制約のあるAndroid上で作るより、ubuntu母艦上で生成、dropbear形式に変換して、Androidへ設置する方が確実です。
Ubuntu 18.04 母艦での作業、鍵は何度か作ったことがあるのですが、dropbearへの変換は初めてなので、dropbearをインストールします。
1 |
$ sudo apt-get install dropbear |
続いてssh-keygenでファイル名を指定して鍵ペアを作り、dropbearconvertを使って秘密鍵をdropbear形式に変換します。
1 2 |
$ ssh-keygen -t rsa -f rsync.key $ /usr/lib/dropbear/dropbearconvert openssh dropbear rsync.key rsync.key.db |
ここまでの作業で以下の3つのファイルが生成されました。このうち、公開鍵についてはその末尾に追記されるユーザ名@ホスト名が当然のことながら、生成した母艦の情報となっているので、authorized_keyへappendする際に、誤解を招かぬよう適宜編集した方が良いかもしれません(この部分はいじっても特に認証へ影響無し)。
- rsync.key : 秘密鍵 → 破棄
- rsync.key.pub : 公開鍵 → 母艦やNASのauthorized_keyへappend
- rsync.key.db : dropbear形式秘密鍵 → Android機へコピー
アプリを開き、内部ストレージ用に以下の要領でタスクを作ってみます。
1 2 3 |
Srouce : /storage/emulated/0/ Destination: IP_ADDRESS:PATH Option : -vHrltD --delete-after -e "ssh -l USERNAME -y -i /sdcard/rsync.key.db" --exclude-from=/sdcard/rexclude.txt |
オプションのうち、exclude-fromは処理に当たり除外する項目をテキストファイルに一括指定するもので、実際にはこのようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
- *cache* - *Cache* - *thumb* - *.log - container - /LOST.DIR - */log/ - */themeimg/ - */AppGame/ - */.logTmp/ - */GoStore/ - */.emoticons/ - */.stickers/ |
タスクが完成したらDRY RUNで期待通りの動作をするか、実際に同期されることなくログ上で確認します。問題無ければRUNで本実行させましょう。初回実行は転送量が多くなるのでかなり時間と負荷が掛かるので、WiFi電波環境の良いところで行いましょう。
タスクが1つ完成してしまえば、これを元に類似タスクを作ることが出来るので楽ちんです。外部ストレージ用のタスクや別のNASへの同期タスクも作りました。
ここまでAndroidからPC母艦・NASへのバックアップ同期を組んでみましたが、rsyncなのでその逆、レストア動作も当然可能です。とは言え、ストレージ丸ごとレストアさせるのは怖いので、適当なフォルダ単位にしてみました。
Android側に復元されたファイルを見ても、タイムスタンプがしっかり維持されたままの復元となっていて期待通りです。普段は誤って押しても実行されないよう、敢えて無効なオプションを付与してタスクを保存しておきます。
最後に、root権限より/data配下を丸ごとバックアップ出来るか試してみました。タスクを作る前にPreferencesを開いて、Running as rootを有効にします。そして既存のタスクをベースに、Sourceを/data/とし、Destinationを母艦の適当な場所に用意して実行してみます。
以上、rsyncをラッパーアプリ経由で利用するバックアップを解説してみました。動かすまでの過程でrsyncやssh認証に関する理解が必要なものの、普段はWiFi経由でアプリを数回タップするだけでバックアップ出来てしまうことや、バックアップ先に特別なアプリを必要とせず、Linux系では普遍的なsshサーバさえあれば良いところは、自分にとっては定番のソリューションです。