kopiaを真剣にLinuxで使う

投稿者: | 10月 10, 2023

大学に仮想マシンを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版からレポジトリへ接続してしまうという手がある。

バックアップストレージの設定を入れる

UntitledImage

パスワードを入れて、
Advanced Optionでバックアップ元のユーザ名とホスト名を入力する。これをしないと、バックアップデータが見えない。みるだけならConnect in read-only modeにしておくべき。立ち上げっぱなしだとコンフリクトするかも。

UntitledImage

Linuxで撮ったバックアップが参照できるようになった。

UntitledImage

設定も確認したり入力できる。

UntitledImage

UntitledImage

 

ポリシーのスケジューリング

実は、スケジュールのパラメータは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のバイナリの実行ができそうな感じ。とりあえず、実行してヘルプが出てくるのを確認。使い出がありそう。

コメントを残す