大学に仮想マシンを40VMほど持っていて管理しているのだが、問題はバックアップ。AWSにお引越しとなってしまった。それもARMを使えと。安いので。
学生はあんまし、バックアップに興味がないので、しれっと安くバックアップしたいということでkopiaを使うことに。Resticでもよかったんだが。新し物好きということで。
閑話休題
よって、ちょっと真剣に検証してみた。環境は、MacBook Air M2のVMware FusionでUbuntu 20.04.5 Server arm64でやってみた。
事前に、別VMでminioをDockerで立てておく。(オレオレ証明書の環境)
実は、以前GUI版の検証をしている。今回はCLI版の検証となる。
前回のGUIの記事。 https://www.blog.slow-fire.net/2022/06/14/フリーのオブジェクトストレージへのバックアッ/
kopiaのダウンロード
https://github.com/kopia/kopia
動作環境は以下
- Windows 7以降、64ビット
- macOS 10.11以降、64ビット
- Linux – amd64、armhfまたはarm64
リリースページから落とせるのだが、対応プラットフォームが多すぎw Raspberry Piで言えば、Raspberry Pi 3以降で動く。今回は、UIを使わないので、UIじゃないほう、kopia-0.12.1-linux-arm64.tar.gzをダウンロード。(Intel版ならarm64-x64にしてください。)
curl -OL https://github.com/kopia/kopia/releases/download/v0.12.1/kopia-0.12.1-linux-arm64.tar.gz
kopiaのインストール
以下のようにしてインストール。completionも設定しておく。
tar xvfz kopia-0.12.1-linux-arm64.tar.gz
mv kopia-0.12.1-linux-arm64/kopia /usr/local/bin/
chmod +x /usr/local/bin/kopia
eval "$(kopia --completion-script-bash)"
echo 'eval "$(kopia --completion-script-bash)"' >> ~/.bashrc
rm -rf kopia-0.12.1-linux-arm64*
kopiaの基本
以下のページに書いてあるのだが、少しわかりにくい。
https://kopia.io/docs/getting-started/
知っておくべきキーワード
この概念がわからないと、話が進まないのでざっくり理解をしておく。
snapshot
ファイル/ディレクトリのポイントインタイムバックアップです。各スナップショットには、必要なときに復元できるファイル/ディレクトリが含まれています。
ー>スナップショットと言っても、何か(VMとかストレージ)のバックエンドを使ってスナップショットを撮るわけではない。
repository
スナップショットが保存されるストレージロケーションです。Kopiaはクラウド/リモート、ネットワーク、およびローカルストレージロケーションをサポートし、すべてのリポジトリは指定したパスワードで暗号化されます。
ー>俗に言うバックアップストレージ、バックアップ保存先。ローカルストレージ、オブジェクトストレージ、sftpなどをサポートしている。
policy
kopiaにスナップショットを作成/管理する方法を伝える一連のルールです。これには、圧縮、スナップショットの保持、スナップショットを自動的に撮るタイミングなどの機能が含まれます。
ー>俗に言うバックアップジョブ設定
kopiaの使い方
流れとしては、repository(バックアップストレージ)を設定して、snapshot (バックアップ)を実行。詳細な設定はpolicyを設定。ただそれだけ。
repositoryの登録
Minioコンソールでバケットを作成。特に特別な設定は不要。
kopiaからrepositoryの登録
https://kopia.io/docs/repositories/
設定は、エンドポイント名、https接続で、証明書のベリファイ無視、バケット名、クレデンシャルを入力。(オレオレ証明書でhttps接続の設定)
kopia repository create s3 \
--endpoint="172.16.155.131:9000" \
--disable-tls-verification \
--bucket kopiatest1 \
--access-key <ACCESSKEY> \
--secret-access-key <SECRET KEY>
パスワードを設定する。パスワードを忘れたら一巻の終わり。。。
Enter password to create new repository:
Re-enter password for verification:
テスト用のバックアップ対象データの作成
とりあえず1kBのファイル5000ファイルを作成。/dataがバックアップ対象となる。
mkdir /data
cd /data
SIZE=1024
GENFILE=test
FILENAME=$GENFILE.bin
openssl rand $SIZE > $FILENAME ; for i in {1..5000};do cp $FILENAME test_${i}.file;done
初回のスナップショット
kopia snapshot create /data
重複排除が効いたのかすぐ終わる。(元データが1kb x 5000ファイル、合計20MBなので)
スナップショットのリスト
kopia snapshot list /data
root@kopia:/data
2022-10-02 04:25:44 UTC ke50b31df247fb3dd8416474ea8204afd 5.1 MB drwxr-xr-x files:5001 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1)
ファイルを追加してみる
mkdir /data/add1
cd /data/add1
SIZE=1024
GENFILE=test
FILENAME=$GENFILE.bin
openssl rand $SIZE > $FILENAME ; for i in {1..5000};do cp $FILENAME test_${i}.file;done
2回目以降も同じく
kopia snapshot create /data
スナップショットのリスト
kopia snapshot list /data
2022-10-02 04:25:44 UTC ke50b31df247fb3dd8416474ea8204afd 5.1 MB drwxr-xr-x files:5001 dirs:1 (latest-2)
2022-10-02 04:28:33 UTC k7a543b19b119472fb408706410447076 10.2 MB drwxr-xr-x files:10002 dirs:2 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1)
差分は、diffで見れる
kopia diff ke50b31df247fb3dd8416474ea8204afd k7a543b19b119472fb408706410447076
ファイルの一覧
kopia ls ke50b31df247fb3dd8416474ea8204afd
kopia ls k7a543b19b119472fb408706410447076
ボリュームのリストア
mkdir -p /data_restore
kopia restore ke50b31df247fb3dd8416474ea8204afd /data_restore
スナップショットをマウントしてみる。
初回のスナップショットの確認
mkdir -p /tmp/mnt/1st
kopia mount ke50b31df247fb3dd8416474ea8204afd /tmp/mnt/1st &
ls /tmp/mnt/1st/
umount /tmp/mnt/1st/
ポリシー
ポリシーは、コマンドラインの場合、スケジュールの設定は効かない。リテンションなどの設定を行うために必要。
ポリシーの一覧
グローバルポリシー。他にuser@host @host user@host:pathなどのポリシーが作れる。
kopia policy list
グローバルポリシーの内容は以下で見れる。
kopia policy show --global
ポリシーの編集
以下のコマンドでできる。もし、ポリシーの名前がわからなかったらkopia snapshot listとするとポリシーが出てくる。
kopia policy edit root@kopia:/data
エディタが開くのでjsonファイルを編集。
jsonファイルが苦手なら、GUI版からレポジトリへ接続してしまうという手がある。
バックアップストレージの設定を入れる
パスワードを入れて、
Advanced Optionでバックアップ元のユーザ名とホスト名を入力する。これをしないと、バックアップデータが見えない。みるだけならConnect in read-only modeにしておくべき。立ち上げっぱなしだとコンフリクトするかも。
Linuxで撮ったバックアップが参照できるようになった。
設定も確認したり入力できる。
ポリシーのスケジューリング
実は、スケジュールのパラメータはGUI板でしかサポートしていない。(GUI版は、立ち上げるとバックエンドプロセスで常駐してくれる。)
なので、コマンドライン版ではcrontabなどで設定しておくこと。
crontabに以下を記載しておく。
kopia snapshot create --all
他のマシンからrepositoryに繋げてみる
GUIから繋げてみたので、他のLinuxから繋げてみた。接続方法は以下の2つの方法がある。
- configファイルを指定して接続
- tokenで接続
configファイルを指定して接続する方法はパスワードの入力が必要だが、tokenでの接続はパスワードは不要(ただし、tokenを知っている人は誰でも接続できてしまうので注意。)
tokenで接続する場合は、すでに設定されている環境で、以下のコマンドでtokenの確認できる。
kopia repository status -t -s
To reconnect to the repository use:
$ kopia repository connect from-config –token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
NOTICE: The token printed above can be trivially decoded to reveal the repository password. Do not store it in an unsecured place.
接続tokenが表示されている。
このコマンドをkopiaがインストールされている別のマシンで実行する。
kopia repository connect from-config --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
これで接続ができたので、スナップショット一覧の表示や、リストアが可能になる。
結論からすると、バックアップソフトとしてめちゃくちゃ便利でパフォーマンスがいい。さらに、オブジェクトストレージやらローカル、リモートフォルダにも保存ができ、バックアップに関する情報がすべてバックアップ先に格納されているので、バックアップサーバレスで運用もかなり楽。もうファイルサーバのバックアップはこれでいいんじゃないかと思った。これで無料とは。
2022/10/3追記
Intel版のQNAP/Synologyでもkopiaのバイナリの実行ができそうな感じ。とりあえず、実行してヘルプが出てくるのを確認。使い出がありそう。