前書き

Resticは、Go言語で記述された安全で効率的なバックアップクライアントです。 ローカルディレクトリ、SFTPサーバー、S3互換オブジェクトストレージサービスなど、さまざまなバックエンドリポジトリにローカルファイルをバックアップできます。

このチュートリアルでは、Resticをインストールし、オブジェクトストレージサービスのリポジトリを初期化します。 次に、いくつかのファイルをリポジトリにバックアップします。 最後に、バックアップを自動化して、1時間ごとのスナップショットを作成し、必要に応じて古いスナップショットを自動的に削除します。

前提条件

このチュートリアルでは、バックアップするファイルがいくつかあるUNIXベースのコンピューターが必要です。 ResticはMac、Linux、およびWindowsで使用できますが、このチュートリアルで使用するコマンドとテクニックはMacOSとLinuxでのみ機能します。

Resticを実行するには十分な量のメモリが必要なので、エラーが発生しないように1 GB以上のRAMが必要です。

また、オブジェクトストレージサービスに関する次の詳細を知る必要があります。

  • アクセスキー

  • 秘密鍵

  • サーバーURL

  • バケット名

DigitalOcean Spacesオブジェクトストレージサービスを使用している場合は、チュートリアルhttps:// wwwに従ってスペースを設定し、上記のすべての情報を取得できます。 .digitalocean.com / community / tutorials / how-to-create-a-digitalocean-space-and-api-key [DigitalOceanスペースとAPIキーを作成する方法]。

オブジェクトストレージ情報を入手したら、次のセクションに進んでResticソフトウェアをインストールします。

Restic Backup Clientのインストール

Resticは、多くのプラットフォームでプリコンパイルされた実行可能ファイルとして利用できます。 つまり、1つのファイルをダウンロードして実行できます。パッケージマネージャーや依存関係は必要ありません。

ダウンロードする適切なファイルを見つけるには、まずWebブラウザーを使用してhttps://github.com/restic/restic/releases/latest[GitHubのResticのリリースページ]に移動します。 * Downloads *ヘッダーの下にファイルのリストがあります。

64ビットLinuxシステム(最も一般的なサーバー環境)の場合、ファイルの末尾を `+ _linux_amd64.bz2 +`にします。

MacOSの場合、 `+ _darwin_amd64.bz2 +`でファイルを探します。

システムに適したファイルを右クリックして、[リンクアドレスのコピー]を選択します(ブラウザの表現は若干異なる場合があります)。 これにより、ダウンロードURLがクリップボードにコピーされます。

次に、バックアップするコンピューターのターミナルセッションで(最初にSSH経由でログインする必要があるリモートマシンの場合)、ホームディレクトリにいることを確認してから、「+ curl +」でファイルをダウンロードします:

cd ~
curl -LO https://github.com/restic/restic/releases/download//

ダウンロードしたファイルを解凍します。

bunzip2 restic*

次に、ファイルを「+ / usr / local / bin 」にコピーし、アクセス許可を更新して実行可能にします。 通常のユーザーには ` / usr / local / bin `への書き込み権限がないため、これら2つのアクションには ` sudo +`を使用する必要があります。

sudo cp restic* /usr/local/bin/restic
sudo chmod a+x /usr/local/bin/restic

引数なしで `+ restic +`コマンドを呼び出して、インストールが成功したことをテストします。

restic

一部のヘルプテキストが画面に印刷されます。 その場合、 `+ restic +`バイナリは適切にインストールされています。 次に、Resticの構成ファイルを作成し、オブジェクトストレージリポジトリを初期化します。

構成ファイルの作成

Resticは、バックアップできるリポジトリを初期化するために、アクセスキー、秘密キー、オブジェクトストレージ接続の詳細、およびリポジトリパスワードを知っている必要があります。 環境変数を使用して、この情報をRestrictで利用できるようにします。

環境変数は、シェルで定義できる情報の一部であり、実行するプログラムに渡されます。 たとえば、コマンドラインで実行するすべてのプログラムは、現在のディレクトリのパスを含む環境変数 `+ $ PWD +`を見ることができます。

機密性の高いトークンとパスワードを環境変数に入れるのが一般的な方法です。これらをコマンドラインで指定することは安全ではないためです。 後でバックアップを自動化するため、スクリプトにアクセスできるファイルにこの情報を保存します。

最初に、ホームディレクトリのファイルを開きます。

nano ~/.restic-env

これにより、 `+ nano `テキストエディターで空のファイルが開きます。 完了すると、ファイルは4つの「 export 」コマンドで構成されます。 これらの ` export +`ステートメントは環境変数を定義し、将来実行するすべてのプログラムで使用できるようにします。

restic-env
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export RESTIC_REPOSITORY="s3:/"
export RESTIC_PASSWORD=""

アクセスキーと秘密キーは、オブジェクトストレージサービスによって提供されます。 キーが失われたり侵害されたりした場合にアクセスを簡単に取り消せるように、Restic専用のキーの一意のセットを生成することができます。

`+ RESTIC_REPOSITORY `の値の例は、 ` s3:nyc3.digitaloceanspaces.com / example-bucket `になります。 非標準ポートまたは安全でないHTTPのみでサーバーに接続する必要がある場合は、「 s3:http:// example-server:3000 / example-bucket + `のようにURLにその情報を含めます。

`+ RESTIC_PASSWORD +`は、Resticがバックアップの暗号化に使用するパスワードを定義します。 この暗号化はローカルで行われるため、ファイルの内容が公開されることを心配することなく、信頼できないオフサイトサーバーにバックアップできます。

ここで強力なパスワードを選択し、バックアップ用に安全な場所にコピーする必要があります。 強力なランダムパスワードを生成する1つの方法は、 `+ openssl +`コマンドを使用することです:

openssl rand -base64 24
Outputj8CGOSdz8ibUYK137wtdiD0SJiNroGUp

これにより、24文字のランダムな文字列が出力され、構成ファイルにコピーして貼り付けることができます。

すべての変数が適切に入力されたら、ファイルを保存して閉じます。

リポジトリの初期化

設定をシェル環境にロードするために、作成したファイルを「+ source」します:

source ~/.restic-env

変数の1つを出力することにより、これが機能することを確認できます。

echo $RESTIC_REPOSITORY

リポジトリのURLが印刷されます。 これで、Resticコマンドを使用してリポジトリを初期化できます。

restic init
Outputcreated restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket

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

これで、リポジトリはバックアップデータを受信する準備ができました。 次にそのデータを送信します。

ディレクトリのバックアップ

リモートオブジェクトストレージリポジトリが初期化されたので、バックアップデータをそこにプッシュできます。 暗号化に加えて、Resticはバックアップ中に差分と重複排除を行います。 つまり、最初のバックアップはすべてのファイルの完全バックアップであり、後続のバックアップでは新しいファイルと変更を送信するだけで済みます。 さらに、重複データが検出され、バックエンドに書き込まれないため、スペースが節約されます。

バックアップする前に、ベアシステムでテストを行い、バックアップのためにサンプルファイルが必要な場合は、ホームディレクトリに単純なテキストファイルを作成します。

echo "sharks have no organs for producing sound" >> ~/facts.txt

これにより、 `+ facts.txt +`ファイルが作成されます。 次に、ホームディレクトリの残りの部分とともにバックアップします。

restic backup ~
Outputscan [/home/sammy]
scanned 4 directories, 14 files in 0:00
[0:04] 100.00%  2.558 MiB/s  10.230 MiB / 10.230 MiB  18 / 18 items  0 errors  ETA 0:00
duration: 0:04, 2.16MiB/s
snapshot  saved

Resticは少しの間動作し、途中で最新のステータスを表示してから、新しいスナップショットのIDを出力します(上に強調表示)。

次に、リポジトリに保存されているスナップショットに関する詳細情報を確認する方法を学びます。

スナップショットの一覧表示

リポジトリに保存されているバックアップを一覧表示するには、 `+ snapshots +`サブコマンドを使用します。

restic snapshots
OutputID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
427696a3  2017-10-23 16:37:17  restic-test              /home/sammy

最初のバックアップ中に受け取ったスナップショットID、スナップショットが作成されたときのタイムスタンプ、ホスト名、タグ、およびバックアップされたディレクトリを確認できます。

この例では何も使用しなかったため、* Tags *列は空白です。 `-tag +`フラグの後にタグ名を含めることで、スナップショットにタグを追加できます。 `-tag +`オプションを繰り返すことで、複数のタグを指定できます。

タグは、保持ポリシーを設定するとき、または復元する特定のスナップショットを手動で検索するときに、後でスナップショットをフィルタリングするのに役立ちます。

  • Host *は、複数のホストから単一のリポジトリにスナップショットを送信できるため、リストに含まれています。 リポジトリのパスワードを各マシンにコピーする必要があります。 リポジトリに複数のパスワードを設定して、よりきめ細かいアクセス制御を行うこともできます。 リポジトリパスワードの管理に関する詳細については、https://restic.readthedocs.io/en/stable/manual.html#manage-repository-keys [公式のResticドキュメント]をご覧ください。

スナップショットがアップロードされ、リポジトリのコンテンツを一覧表示する方法がわかったので、スナップショットIDを使用してバックアップの復元をテストします。

スナップショットの復元

スナップショット全体を一時ディレクトリに復元して、すべてが正常に機能していることを確認します。 前のステップのリストのスナップショットIDを使用します。 復元されたファイルを `+ / tmp / restore +`の新しいディレクトリに送信します。

restic restore  --target /tmp/restore
Outputrestoring <Snapshot 427696a3 of [/home/sammy] at 2017-10-23 16:37:17.573706791 +0000 UTC by [email protected]> to /tmp/restore

ディレクトリに移動して、その内容をリストします。

cd /tmp/restore
ls

バックアップしたディレクトリが表示されます。 この例では、ユーザー* sammy *のホームディレクトリになります。 復元されたディレクトリを入力し、内部のファイルをリストします。

cd
ls
Outputfacts.txt  restic_0.7.3_linux_amd64

`+ facts.txt `ファイルと、チュートリアルの最初に抽出した残りのバイナリがあります。 画面に「 facts.txt +」を印刷して、期待どおりであることを確認します。

cat facts.txt

前にファイルに入れたサメの事実を見るはずです。 出来た!

バックアップと復元が機能していることがわかったので、新しいスナップショットの作成を自動化しましょう。

バックアップの自動化

Resticには、スナップショットの実行中のアーカイブを維持するのに役立つ `+ forget `コマンドが含まれています。 「 restic forget –prune +」を使用して、毎日、毎時、毎週などのように保持するバックアップの数に関するポリシーを設定できます。 ポリシーに適合しないバックアップはリポジトリから削除されます。

`+ cron +`システムサービスを使用して、1時間ごとにバックアップタスクを実行します。 まず、ユーザーのcrontabを開きます。

crontab -e

テキストエディタを選択するよう求められる場合があります。 お気に入りを選択するか、意見がない場合は「+ nano 」を選択し、「 ENTER」を押します。 ユーザーのデフォルトのcrontabがテキストエディターで開きます。 crontab構文を説明するコメントが含まれている場合があります。 ファイルの最後で、次の行を新しい行に追加します。

crontab

. . .
42 * * * * . //.restic-env; /usr/local/bin/restic backup -q /; /usr/local/bin/restic forget -q --prune

このコマンドをステップ実行してみましょう。 `42 * * * * +`は、 ` cron +`がいつタスクを実行するかを定義します。 この場合、時間、および*曜日*の42番目の*分*で実行されます。 この構文の詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-on-a-vps[Cronを使用して自動化する方法]を参照してください。タスク]。

次に、 +。 //。restic-env; + `は、以前にキーとパスワードをシェル環境にロードするために実行した + source〜/ .restic-env + `と同等です。 これは、crontabと同じ効果があります。この行の後続のコマンドは、この情報にアクセスできます。

`+ / usr / local / bin / restic backup -q /; `は、Resticバックアップコマンドです。 ` cron `サービスはコマンドの ` / usr / local / bin `を自動的に検索しないため、 ` restic `バイナリへのフルパスを使用します。 同様に、「〜」ショートカットを使用する代わりに、「 / home / sammy 」でホームフォルダーのパスを明示的に記述します。 ` cron `のコマンドを記述するときは、できるだけ明示的にするのが最善です。 Resticからのステータス出力を抑制するために、 ` -q +`フラグを使用します。

最後に、 `+ / usr / local / bin / restic forget -q –prune +`は、指定された保持フラグに基づいて、不要になった古いスナップショットを整理します。 この例では、24時間ごとのスナップショットと7日間のスナップショットを保持しています。 毎週、毎月、毎年、およびタグベースのポリシーのオプションもあります。

ニーズに合わせてコマンドを更新したら、ファイルを保存してテキストエディターを終了します。 crontabがインストールされ、アクティブ化されます。 数時間後、「+ restic snapshots +」を再度実行して、新しいスナップショットがアップロードされていることを確認します。

結論

このチュートリアルでは、オブジェクトストレージ認証の詳細を使用してResticの構成ファイルを作成し、Resticを使用してリポジトリを初期化し、いくつかのファイルをバックアップし、バックアップをテストしました。 最後に、cronを使用してプロセスを自動化しました。

Resticには、ここで説明したよりも多くの柔軟性と機能があります。 Resticの詳細については、https://restic.readthedocs.io/en/stable/index.html [公式ドキュメント]またはhttps://restic.github.io/ [メインWebサイト]をご覧ください。