Ubuntu Weekly Recipe

第765回高度なことが簡単にできる多機能バックアップツール、Restic[前編]

今回はGo言語で書かれた、オープンソースでマルチプラットフォームなバックアップツールであるResticを紹介します。前後編に分かれており、今回はインストールとバックアップ方法2種類を解説します。

Resticとは

第653回で紹介したDéjà DupはDuplicityというバックアップツールのフロントエンドです。しかしバージョン43.0以降はバックエンドをResticへ変更できるようになっています。

図1 Déjà Dupの実験的機能。なおこのタブは表示されない場合もある
図1

Duplicityは高性能ではあるもののコマンドラインオプションが複雑で使用するのは難しく、Duplyというコマンドラインのフロントエンドまであるくらいです。

ではこのResticはどうなのかと思って調査したところ、後発(とはいえ最初のリリースは8年前)だからか洗練されており、かつGo言語で書かれているのでメンテナンスも簡単であり、マルチプラットフォームでもあります。

こんな素晴らしいツール、使わない手はありません。

注意点としては、まだまだ開発版であり後方互換性が失われる可能性があることです。とはいえ復元できなくなるようなことはないのでそれほど気にする必要はありません。現に0.14.0以降で、リポジトリバージョンが変更されています

使用するResticのバージョン

ResticはUbuntuのリポジトリにパッケージがあります。22.04 LTSではバージョン0.12.1です。Snapパッケージにもなっており、こちらはバージョン0.14.0です。執筆段階での最新バージョンは0.15.2であり、差異が大きいので可能な限りこれから紹介する公式ビルドをインストールしてください。

インストール

前述の理由で公式ビルドのバイナリを使用します。オーソドックスに/usr/local/bin/以下にインストールします。

公式ビルドはbzip2形式で配布されています。Ubuntu(デスクトップ)では問題ありませんが、Ubuntuサーバーで使用する場合はアーカイバーがインストールされていません。次のコマンドを実行して事前にインストールしてください。

$ sudo apt install lbzip2

あとは共通で、次のコマンドを実行してください。

$ cd /usr/local/bin
$ sudo wget https://github.com/restic/restic/releases/download/v0.15.2/restic_0.15.2_linux_amd64.bz2
$ sudo bzip2 --decompress restic_0.15.2_linux_amd64.bz2 
$ sudo mv restic_0.15.2_linux_amd64 restic
$ sudo chmod +x ./restic

前述のとおり執筆段階で最新版の0.15.2をインストールしています。

入力するコマンドを補完したい(bash-completionを使用したい)場合は、さらに続けて次のコマンドを実行してください。

$ sudo restic generate --bash-completion /etc/bash_completion.d/restic
$ . /etc/bash_completion

ローカルにバックアップ

手始めにローカルにバックアップする方法を紹介しますが、特にお勧めなわけではありません。理由は後述しますが、いかに簡単かわかりやすいのでとにかく例示します。

想定としては、ローカルで動作しているSamba(/srv/samba/)のバックアップを/srv/restic/samba/に作成します。バックアップとしての意味はあまりありませんが[1]、ほかのUbuntuからバックアップ先として指定したと仮定してください。

何はともあれ次のコマンドを実行してください。

$ sudo mkdir -p /srv/restic/samba
$ sudo restic init --repo /srv/restic/samba/
enter password for new repository: 
enter password again: 
created restic repository 00aba54843 at /srv/restic/samba/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

バックアップ先のフォルダーを作成し、そこをリポジトリとして初期化すると、パスワードを聞かれるので2回入力しています。このパスワードを忘れたらリポジトリにアクセスできなくなるのでくれぐれもご注意ください。

実際にバックアップを実行します。次のコマンドを実行してください。

$ sudo restic -r /srv/restic/samba/ --verbose backup /srv/samba/
open repository
enter password for repository: 
repository 00aba548 opened (version 2, compression level auto)
created new cache in /root/.cache/restic
lock repository
no parent snapshot found, will read all files
load index files
start scan on [/srv/samba/]
start backup on [/srv/samba/]
scan finished in 0.219s: 387 files, 582.663 MiB
[0:01] 268 files 396.720 MiB, total 387 files 582.663 MiB, 0 errors

Files:         387 new,     0 changed,     0 unmodified
Dirs:           13 new,     0 changed,     0 unmodified
Data Blobs:    629 new
Tree Blobs:     14 new
Added to the repository: 502.136 MiB (475.047 MiB stored)

processed 387 files, 582.663 MiB in 0:02
snapshot 55fd44e5 saved

たった3つのコマンドを実行するだけでバックアップできてしまいました。

前述のとおりローカルへのバックアップはあまりお勧めしません。たとえローカルのバックアップであっても後述のMinIOによるストレージバックエンドにバックアップを置くのがお勧めです。理由としては、MinIOはメンテナンスが充分に容易であること、スケールすることなどが挙げられます。

MinIOにバックアップ

次に、MinIOにバックアップしてみます。MinIO第655回で紹介したオプジェクトストレージ機能を提供するサーバーです。MinIOもGo言語で書かれており、オープンソースでマルチプラットフォームです。

MinIOサーバーは当然のことながらどこにあってもいいのですが、今回はResticと同じサーバーにインストールします。

まずはMinIOのインストール方法から紹介します。第655回とは少し違いがあります。次のコマンドを実行してください。

$ sudo adduser --system --group --no-create-home minio-user
$ sudo mkdir /opt/minio
$ cd /opt/minio/
$ sudo wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ sudo chown minio-user: -R /opt/minio/
$ sudo mkdir /srv/minio
$ sudo chown minio-user: /srv/minio/

ご覧のとおりユーザー「minio-user」を作成し、実行バイナリは/opt/minioに置いています。実際のファイルは/srv/minio/以下に置くので、フォルダーを作成してパーミッションを変更しています。

続けて設定ファイルを作成します。

$ sudo editor /etc/default/minio
# Volume to be used for MinIO server.
MINIO_VOLUMES="/srv/minio/"
# Use if you want to run MinIO on a custom port.
# MINIO_OPTS="--address :9199"
# Root user for the server.
MINIO_ROOT_USER=unique-minioadmin
# Root secret for the server.
MINIO_ROOT_PASSWORD=secure-minioadmin-password

環境変数を指定しています。これは一目瞭然でしょう。

デーモンとして動作するように設定します。次のコマンドを実行してください。

$ sudo bash -c "cd /etc/systemd/system/; curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service"
$ sudo sed -i -e "s|/usr/local/bin/|/opt/minio/|g" -e "s|/usr/local/|/opt/minio/|" /etc/systemd/system/minio.service
$ sudo systemctl daemon-reload 
$ sudo systemctl enable --now minio.service 

これでMinIOがサーバーとして動作するようになりました。

ではリポジトリを作成します。サーバー名は「hamana.local」としていますので、お使いのPCに合わせてください。それを踏まえた上で次のコマンドを実行してください。

$ export AWS_ACCESS_KEY_ID=unique-minioadmin
$ export AWS_SECRET_ACCESS_KEY=secure-minioadmin-password
$ restic -r s3:http://hamana.local:9000/restic init

環境変数としてMINIO_ROOT_USERAWS_ACCESS_KEY_IDに、MINIO_ROOT_PASSWORDAWS_SECRET_ACCESS_KEYにエクスポートしているところがポイントです。

実際にバックアップを行います。次のコマンドを実行してください。

$ sudo restic -r s3:http://hamana.local:9000/restic --verbose backup /srv/samba/

オブジェクトストレージを自力で用意できる場合はMinIOでいいのですが、そうではない場合、あるいは自力で用意したくない(面倒を見たくない)場合にはWasabiが比較的安価でいいでしょう。

今回は一旦ここで区切りとします。後編では、Rclone経由でWebDAVサーバーにバックアップする方法と、リストアなど運用に関する内容をお届けします。

おすすめ記事

記事・ニュース一覧