序章

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

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

前提条件

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

Resticを実行するには大量のメモリが必要なため、エラーを受け取らないように1GB以上のRAMが必要です。

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

  • アクセスキー
  • シークレットキー
  • サーバーのURL
  • バケット名

DigitalOcean Spaces オブジェクトストレージサービスを使用している場合は、チュートリアル DigitalOceanSpaceとAPIキーの作成方法に従って、Spaceを設定し、上記のすべての情報を取得できます。

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

Resticバックアップクライアントのインストール

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

ダウンロードする適切なファイルを見つけるには、まずWebブラウザーを使用して、GitHubResticのリリースページに移動します。 Downloadsヘッダーの下にファイルのリストがあります。

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

MacOSの場合、次のファイルを探します _darwin_amd64.bz2.

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

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

  1. cd ~
  2. curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

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

  1. bunzip2 restic*

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

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

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

  1. restic

一部のヘルプテキストが画面に印刷されます。 もしそうなら、 restic バイナリが正しくインストールされています。 次に、Resticの構成ファイルを作成し、オブジェクトストレージリポジトリを初期化します。

構成ファイルの作成

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

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

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

まず、ホームディレクトリでファイルを開きます。

  1. nano ~/.restic-env

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

.restic-env
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_REPOSITORY="s3:server-url/bucket-name"
export RESTIC_PASSWORD="a-strong-password"

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

RESTIC_REPOSITORY 値は次のようになります: s3:nyc3.digitaloceanspaces.com/example-bucket. 非標準ポートまたはセキュリティで保護されていないHTTPのみを介してサーバーに接続する必要がある場合は、その情報を次のようにURLに含めます。 s3:http://example-server:3000/example-bucket.

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

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

  1. openssl rand -base64 24
Output
j8CGOSdz8ibUYK137wtdiD0SJiNroGUp

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

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

リポジトリの初期化

構成をシェル環境にロードするには、 source 作成したファイル:

  1. source ~/.restic-env

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

  1. echo $RESTIC_REPOSITORY

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

  1. restic init
Output
created 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はバックアップ中に差分と重複排除を行います。 つまり、最初のバックアップはすべてのファイルの完全バックアップであり、後続のバックアップは新しいファイルと変更を送信するだけで済みます。 さらに、重複データが検出され、バックエンドに書き込まれないため、スペースが節約されます。

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

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

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

  1. restic backup ~
Output
scan [/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 427696a3 saved

Resticは少しの間機能し、途中でライブステータスの更新を表示してから、新しいスナップショットのIDを出力します(上で強調表示されています)。

注:別のディレクトリをバックアップする場合は、 ~ 上記のディレクトリのパス。 あなたが使用する必要があるかもしれません sudo の前に restic backup ターゲットディレクトリがユーザーによって所有されていない場合。 必要な場合 sudo バックアップするには、スナップショットを復元するときに再度使用することを忘れないでください。そうしないと、権限を適切に設定できないというエラーが発生する可能性があります。

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

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

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

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

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

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

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

Host は、複数のホストから単一のリポジトリにスナップショットを送信できるため、リストに含まれています。 リポジトリのパスワードを各マシンにコピーする必要があります。 リポジトリに複数のパスワードを設定して、よりきめ細かいアクセス制御を行うこともできます。 リポジトリパスワードの管理の詳細については、公式のResticドキュメントを参照してください。

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

スナップショットの復元

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

  1. restic restore 427696a3 --target /tmp/restore
Output
restoring <Snapshot 427696a3 of [/home/sammy] at 2017-10-23 16:37:17.573706791 +0000 UTC by sammy@restic-test> to /tmp/restore

ディレクトリに移動し、その内容を一覧表示します。

  1. cd /tmp/restore
  2. ls

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

  1. cd sammy
  2. ls
Output
facts.txt restic_0.7.3_linux_amd64

私たちの facts.txt ファイルは、チュートリアルの最初に抽出したresticバイナリとともにそこにあります。 印刷 facts.txt それが私たちが期待したものであることを確認するために画面に:

  1. cat facts.txt

以前にファイルに入れたサメの事実を確認する必要があります。 機能した!

注:スナップショット内のすべてのファイルを復元したくない場合は、 --include--exclude 選択を微調整するためのオプション。 詳細については、Resticドキュメントの[復元]セクションをお読みください。

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

バックアップの自動化

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

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

  1. crontab -e

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

crontab
. . .
42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7

このコマンドをステップスルーしてみましょう。 The 42 * * * * いつ定義する cron タスクを実行する必要があります。 この場合、時間、および曜日ごとの42番目ので実行されます。 。 この構文の詳細については、チュートリアルCronを使用してタスクを自動化する方法をお読みください。

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

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

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

必要に応じてコマンドを更新したら、ファイルを保存してテキストエディタを終了します。 crontabがインストールされ、アクティブ化されます。 数時間実行した後 restic snapshots もう一度、新しいスナップショットがアップロードされていることを確認します。

結論

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

Resticには、ここで説明したよりも柔軟性と機能があります。 Resticの詳細については、公式ドキュメントまたはメインWebサイトを参照してください。