圧縮、暗号化、リモート対応の差分バックアップを作成できる「Borg Backup」の使い方

公開日:2020/02/16 更新日:2020/02/16
圧縮、暗号化、リモート対応の差分バックアップを作成できる「Borg Backup」の使い方のサムネイル
Photo by Vincent Botta on Unsplash

はじめに

圧縮、暗号化に対応し差分バックアップを作成できるソフトウェアである「Borg Backup」をUbuntuにインストールして使ってみたのでその手順をまとめます。「Borg Backup」はLinux、macOSに対応しています。

Borg Backupについて

Borg Backup(以降、Borg)は、圧縮、暗号化に対応し差分バックアップを作成できるソフトウェアです。 リモートでのバックアップにも対応しているため、本番で使用しているサーバーや自分のPCの定期的なバックアップを安全に作成できるソフトウェアとして強力です。

オープンソースで開発されており、以下が公式リポジトリです。

github.com

Deduplicating archiver with compression and authenticated encryption.

前提と環境

以下の通りとなります。

  • OS : Ubuntu18.04

この記事ではUbuntuにBorgをインストールしますが、公式ドキュメントに記載されている通り他の多くのディストリビューションにも対応しています。 BorgはSSH経由でリモートにあるファイルをバックアップすることもできますが、この記事では、ローカルのファイルをローカルの他の場所にバックアップする場合の使い方をまとめます。公式ドキュメントの通りに作業します。

Borgをインストールする

公式ドキュメントに記載の通り、Ubuntuの場合は以下でBorgをインストールします。

$ sudo apt install borgbackup

以上でインストールが完了です。

バックアップ用のリポジトリを作成する

まずはborg initを使用してバックアップ先とするディレクトリを指定して初期化し、バックアップ用のリポジトリを作成します。

$ borg init オプション バックアップ先のパス

以下が例です。

$ borg init -e repokey /media/share/borg-backup

上記は、暗号化モードとしてrepokeyを指定し、/media/share/borg-backupをバックアップファイルを格納するディレクトリのパスとしています。 ここではオプションの詳細は省略しますが、borgで使用できるコマンドのオプションについては以下に詳しくまとめられており大変参考になりました。

qiita.com

圧縮に特化していて使いやすい差分バックアップツール「borg」について、公式ドキュメントを翻訳してみました。 実験的なもの、あまり使用しないと思われる項目については省いてあります。

以下が実行結果です。

$ borg init -e repokey /media/share/borg-backup
Enter new passphrase: 
Enter same passphrase again: 
Do you want your passphrase to be displayed for verification? [yN]: N
Failed to securely erase old repository config file (hardlinks not supported>). Old repokey data, if any, might persist on physical storage.

By default repositories initialized with this version will produce security
errors if written to with an older version (up to and including Borg 1.0.8).

If you want to use these older versions, you can disable the check by running:
borg upgrade --disable-tam /media/share/borg-backup

See https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability for details about the security implications.

borg init実行時にバックアップ暗号化用のパスフレーズを2回入力します。Do you want your passphrase to be displayed for verification? [yN]は、確認のためにパスフレーズを表示するか?と聞かれています。ここではNで表示しないようにしました。

なお、Failed to securely erase old repository config fileと出ていますが、このエラーに気づかずにそのままバックアップ作成や復元まで問題なくおこなえました。 ちょっと現状エラーを再現できないためまたもし何か発生したらメモします。

バックアップを作成する

borg createを使用してバックアップを作成します。

$ borg create オプション バックアップ先のパス::バックアップ名 バックアップ対象のパス

以下が例です。

$ borg create /media/share/borg-backup::bkdoc ~/Documents

上記は、borg initで初期化したバックアップ先に、bkdocという名前で~/Documentsのバックアップを作成します。実行時にはborg initで指定したパスフレーズを入力します。

複数のディレクトリを指定してバックアップを作成することも可能です。

$ borg create /media/share/borg-backup::bkdoc ~/Documents ~/Downloads

また、-C 圧縮アルゴリズムのようにオプションを使用すると、圧縮アルゴリズムを指定できます。デフォルトの圧縮アルゴリズムはLZ4です。以下はzlibを指定した場合です。

$ borg create -C zlib /media/share/borg-backup::bkdoc ~/Documents ~/Downloads

zlibを指定すると処理時間は長くなりますがより高い圧縮率になります。デフォルトのLZ4では圧縮率はそこそこですが処理時間が短くなります。

なお、Borgのコマンドは進捗を表示しないものが多いです。もし進捗を出力したい場合は、以下のように--progressオプションを使用します。

$ borg create --progress /media/share/borg-backup::bkdoc ~/Documents

また、実行結果も表示されないものが多いので、--stats--info--verboseを使用するとより詳しい情報を出力できます。

バックアップの一覧を表示する

borg listを使用して作成済のバックアップを一覧表示できます。

$ borg list /media/share/borg-backup

バックアップファイルを復元する

borg extractを実行して復元します。

~/restore
$ borg extract /media/share/borg-backup::bkdoc

カレントディレクトリ直下にバックアップが復元されるので、復元先としたいディレクトリに移動してから使用します。

バックアップファイルを削除する

borg deleteを使用して指定したバックアップを削除します。

$ borg delete /media/share/borg-backup::bkdoc

期間を指定してバックアップファイルを削除する

borg pruneを使用することで、一定期間経過しているバックアップをまとめて削除できます。なお、borg pruneを実行する前に、borg prune -v --list --dry-runによるドライラン(実際には何も削除せず実行結果を確認する)のオプションを使って実行することが強く推奨されています。

$ borg prune オプション バックアップ先のパス

以下が例です。以下は、直近7日分のバックアップをキープし、それ以外は削除します。

$ borg prune -v --list --dry-run --keep-daily=7 /media/share/borg-backup

なお、毎時間バックアップを作成していたとしても上記で残されるバックアップは7個のみになります。すなわち、1日につき1つの最新のバックアップが残されます。

もし直近7日間に作成した全てのバックアップをキープしたい場合は--keep-within=7dを使用します。

$ borg prune -v --list --dry-run --keep-within=7d /media/share/borg-backup

--keep-within=10dとすれば10日間になります。

他にも時間単位、日単位、週単位、月単位、年単位で指定できます。詳しくはすでに載せたこちらの参考記事公式ドキュメントで確認してみてください。

なお、borg prune -v --list --dry-runで実行すればどのバックアップがキープされてどのバックアップが削除されるか確認用に出力されるのでそれで見てみるのが早いと思います。 実際に削除する場合は--dry-runを外して実行します。

まとめ

ここではローカル内でのBorgの使い方を簡単にまとめましたが、スクリプト等を作成してリモートにあるファイルを定期的にバックアップするようにできると色々と楽になりそうです。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。