DUICUO

素晴らしいデータバックアップ&リカバリツールを見つけました!オープンソースで無料、高速、効率的、そして安全です。

[[405900]]

導入

Resticは、高速で効率的、かつ安全なバックアッププログラムです。3つの主要オペレーティングシステム(Linux、macOS、Windows)と、一部の小規模オペレーティングシステム(FreeBSDおよびOpenBSD)をサポートしています。Goプログラミング言語で記述されており、データの暗号化にはAES-256を使用し、データ認証にはPoly1305-AESを使用しています。

GitHub アドレス: https://github.com/restic/restic

設計原則

Restic はバックアップを正しく実行できるプログラムであり、その設計は次の原則に従います。

  • シンプルさ:バックアップはシームレスなプロセスであるべきです。そうでなければ、バックアップを省略したくなるかもしれません。Resticは、データが失われた場合でも直接復元できるよう、設定と操作が簡単である必要があります。同様に、データ復旧も過度に複雑であってはなりません。
  • 速度: Resticを使ったデータのバックアップは、ネットワークやハードドライブの帯域幅に制限されることなく、毎日ファイルをバックアップできる必要があります。時間がかかりすぎると、誰もバックアップしなくなります。バックアップの復元は、ファイルの復元に必要なデータのみを転送することで、プロセスを迅速化します。
  • 検証可能: バックアップよりもリカバリの方が重要なので、Restic を使用すると、すべてのデータをリカバリできるかどうかを簡単に検証できます。
  • セキュリティ: Resticは暗号化を使用し、データの機密性と整合性を確保します。これは、バックアップデータが信頼できない環境(システム管理者や他のユーザーがバックアップにアクセスできる共有スペースなど)に保存されていることを前提としています。Resticは、このような攻撃者からデータを保護するように設計されています。
  • 効率性:データの増加に伴い、追加のスナップショットは実際の増分ストレージのみを占有するべきです。さらに重要なのは、重複データはストレージバックエンドに実際に書き込まれる前に重複排除され、貴重なバックアップスペースを節約することです。

インストール

セントOS

  1. [root@centos7 ~]# yum install yum-plugin-copr -y  
  2. [root@centos7 ~]# yum copr Enable copart/restic -y  
  3. ロードされたプラグイン: copr、fastestmirror  
  4. 完了 
  5. [root@centos7 ~]# yum installrestic -y

上記のインストールでエラーが発生した場合は、次のコマンドを実行してソースの問題を解決してください。

  1. [root@centos7 ~]# yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo  
  2. 読み込まれたプラグイン: fastestmirror  
  3. リポジトリの追加元: https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo  
  4. ファイル https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo を /etc/yum.repos.d/copart-restic-epel-7.repo に取得しています 
  5. リポジトリは /etc/yum.repos.d/copart-restic-epel-7.repo に保存されました

macOS

  1. # 醸造 
  2. $ brew インストール restic  
  3. # macprots  
  4. $ sudo ポートをインストール restic

詳細なインストール手順については、https://restic.readthedocs.io/en/latest/020_installation.html#stable-releases を参照してください。

バックアップリポジトリを構成する

バックアップが保存される場所は「リポジトリ」と呼ばれます。リポジトリはローカル、リモートサーバー、またはサービスに保存できます。以下の保存方法がサポートされています。

自動バックアップの場合、Restic は環境変数からリポジトリの場所 RESTIC_REPOSITORY を受け取ります。また、--repository-file オプションまたは環境変数で指定されたファイルからリポジトリの場所 RESTIC_REPOSITORY_FILE を読み取ることもできます。

パスワードにはいくつかのオプションがあります。

  • 環境変数RESTIC_PASSWORDを設定する
  • --password-file オプションまたは環境変数 RESTIC_PASSWORD_FILE を使用して、パスワードを含むファイル パスを指定します。
  • オプション --password-command または環境変数 RESTIC_PASSWORD_COMMAND を介してパスワードが必要なときに呼び出されるプログラムを構成します。

ローカルリポジトリを作成する

ローカルリポジトリの作成を例に挙げると

  1. [root@centos7 ~]# restic init --repo /restic/backup_dir  
  2. 新しいリポジトリのパスワードを入力してください:  
  3. パスワードをもう一度入力してください:
  4. /restic/backup_dir に restic リポジトリ dff64d39c6 を作成しました 
  5. アクセスするにはパスワードが必要ですのでご注意ください 
  6. リポジトリ。パスワードを紛失すると、データが 
  7. 回復不能なほど失われた。  
  8. ヒントは非常に明確です。ここで入力したパスワードを覚えておいてください。パスワードを紛失すると、データが失われます。

その他のリポジトリ作成方法については、公式ドキュメントを参照してください: https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html

バックアップの練習

データ ディレクトリの内容をリポジトリにバックアップします。

  1. [root@centos7 ~]# restic -r /restic/backup_dir --verbose バックアップ ./data  
  2. オープンリポジトリ 
  3. リポジトリのパスワードを入力してください:  
  4. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  5. /root/.cache/restic に新しいキャッシュを作成しました 
  6. リポジトリをロックする 
  7. インデックスファイルを読み込む 
  8. 親スナップショットが見つからないため、すべてのファイルを読み取ります 
  9. [./data]でスキャンを開始 
  10. [./data] でバックアップを開始します 
  11. スキャンは1.455秒で終了しました: 2922ファイル、71.126 MiB  
  12. ファイル: 新規 2922 件、変更 0 件、未修正 0 件 
  13. ディレクトリ: 新規 99 件、変更 0 件、未修正 0 件 
  14. データブロブ: 2889件の新規 
  15. 木の塊: 99個の新規 
  16. リポジトリに追加されました: 72.083 MiB  
  17. 2922 個のファイルが処理され、0:05 で 71.126 MiB になりました #バックアップファイルの数とサイズ 
  18. スナップショット 4d20711e を保存しました # ファイルスナップショットを作成しました 
  19. --verbose # プロセス情報を出力します

単一のファイルをバックアップすることもできます。

  1. [root@centos7 ~]# ls ./data  
  2. goInception-linux-amd64-v1.2.3.tar.gz httpd-2.4.6-95.el7.centos.x86_64.rpm mingongge.z02  
  3. httpd-2.4.46 mingongge.file mingongge.zip  
  4. httpd-2.4.46.tar.gz mingongge.z01  
  5. [root@centos7 ~]# restic -r /restic/backup_dir --verbose バックアップ ./data/mingongge.zip  
  6. オープンリポジトリ 
  7. リポジトリのパスワードを入力してください:  
  8. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  9. リポジトリをロックする 
  10. インデックスファイルを読み込む 
  11. 親スナップショットが見つからないため、すべてのファイルを読み取ります 
  12. [./data/mingongge.zip] のスキャンを開始します 
  13. [./data/mingongge.zip] のバックアップを開始します 
  14. スキャンは0.249秒で終了しました: 1ファイル、942.793 KiB  
  15. ファイル: 新規 1 件、変更 0 件、未修正 0 件 
  16. ディレクトリ: 新規 1 件、変更 0 件、未修正 0 件 
  17. データブロブ: 新規 0 件 
  18. 木の塊: 2つの新しい 
  19. リポジトリに追加されました: 750 B  
  20. 0:00に1ファイル、942.793 KiBを処理しました 
  21. スナップショット 3e5b7dea を保存しました

手順1のバックアップコマンドを再度実行すると、新しいコンテンツは追加されず、現在のデータのスナップショットが新たに追加されるだけであることがわかります。実際、Resticにはファイルスキャン機能(各ファイルを個別にスキャンして比較する機能)が搭載されているため、同じデータは一度だけバックアップされます。

文書検査機能

すべてのファイルの内容全体をスキャンするのはリソースの大きな無駄なので、Restic はファイル メタデータに基づく変更検出ルールも使用して、ファイルが最後のバックアップ以降変更されていないかどうかを判断し、変更されていない場合は再度スキャンしません。

Unix システム (Linux および Mac を含む) では、ファイルが以前のバックアップのファイルと同じ場所にある場合、その内容が変更されていないと想定するには、次のファイル メタデータ属性が一致する必要があります。

  • タイムスタンプの変更 (mtime)
  • メタデータ変更タイムスタンプ (ctime)
  • ファイルサイズ
  • inode 番号 (ファイルシステム内のファイルを参照するために使用される内部番号)。

したがって、上記の理由に基づいて、次のようないくつかのパラメータが導入されます。

  1. --force # 変更検出を無効にしてすべてのファイルを再スキャンします 
  2. --ignore-ctime # mtime が一致する必要がありますが、異なる ctimes が許可されます。  
  3. --ignore-inode # 一致する inode 時刻が必要ですが、inode 番号と ctime は異なっていてもかまいません。

除外ファイルパラメータ

  1. --exclude # 除外する 1 つ以上の項目を指定します。  
  2. --iexclude # exclude と同じですが、パスケースは無視されます 
  3. --exclude-caches # 除外する特殊なファイルを含むフォルダーを指定します。  
  4. --exclude-file # 除外する特殊なファイルを含むフォルダーを指定します。  
  5. --iexclude-file # exclude-file と同じですが、パスケースは無視されます 
  6. --exclude-if-present foo #fooという名前のファイルを含むフォルダーを除外する 
  7. --exclude-larger-than size # 指定されたサイズより大きいファイルを除外することを指定します。

その他の関連機能については、https://restic.readthedocs.io/en/latest/040_backup.html を参照してください。

リポジトリの使用

データがリポジトリにバックアップされたので、リポジトリを使用する必要があります。以下では、関連する操作について説明します。

リポジトリのすべてのスナップショットを一覧表示する

この機能は、システム上で ls コマンドを使用して情報を表示するのと同じです。

  1. [root@centos7 ~]# restic -r /restic/backup_dir/ スナップショット 
  2. リポジトリのパスワードを入力してください:  
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. ID 時間 ホスト タグ パス 
  5. ---------------------------------------------------------------------------------  
  6. 4d20711e 2021-06-04 03:40:47 centos7 /ルート/データ 
  7. 3e5b7dea 2021-06-04 03:46:34 centos7 /root/data/mingongge.zip  
  8. 94c62288 2021-06-04 03:51:21 centos7 /root/data  
  9. ---------------------------------------------------------------------------------  
  10. 3枚のスナップショット 
  11. #フィルタリングと一致には次のパラメータを使用することもできます。  
  12. --path = "ディレクトリ名"    
  13. --host ホスト名 
  14. #同じフィルター(ホスト、パス、タグ)を使用して出力をグループ化します 
  15. --group-by

詳細については、https://restic.readthedocs.io/en/latest/045_working_with_repos.html を参照してください。

リポジトリデータを検出する

  1. [root@centos7 ~]# restic -r /restic/backup_dir/ チェック 
  2. /tmp/restic-check-cache-294136679 の一時キャッシュを使用しています 
  3. リポジトリのパスワードを入力してください:  
  4. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  5. /tmp/restic-check-cache-294136679 に新しいキャッシュを作成しました 
  6. リポジトリの排他ロックを作成する 
  7. インデックスをロードする 
  8. すべてのパックをチェック 
  9. スナップショット、ツリー、ブロブをチェックする 
  10. [0:00] 100.00% 3 / 3 スナップショット 
  11. エラーは見つかりませんでした。

データ復旧

ここが重要なポイントです。データの復元が切り札です。

データ削除をシミュレートする環境を作成する

  1. [root@centos7 ~]# cd data/  
  2. [root@centos7 データ]# ll  
  3. 合計 33796  
  4. -rw-r--r-- 1 ルート ルート 13034487 2020年8月30日 goInception-linux-amd64-v1.2.3.tar.gz  
  5. drwxr-sr-x 11 ルート 40 4096 12月24日 22:35 httpd-2.4.46  
  6. -rw-r--r-- 1 ルート ルート 9363314 2020年8月5日 httpd-2.4.46.tar.gz  
  7. -rw-r--r-- 1 ルート ルート 2846172 2020年10月14日 httpd-2.4.6-95.el7.centos.x86_64.rpm  
  8. -rw-r--r-- 1 ルート ルート 0 1月16日 11:32 mingongge.file  
  9. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z01  
  10. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z02  
  11. -rw-r--r-- 1 ルート ルート 965420 1月16日 16:24 mingongge.zip  
  12. [root@centos7 データ]# rm -rf ./*  
  13. [root@centos7 データ]# ll  
  14. 合計 0

データ復旧

誤って削除したデータをスナップショットから直接復元する

  1. [root@centos7 ~]# restic -r /restic/backup_dir/ 4d20711e を復元 --target /root/  
  2. リポジトリのパスワードを入力してください:  
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. <スナップショット4d20711e of [/root/data] at 2021-06-04 03:40:47.878873654 -0400 EDT by root@centos7 >を /root/ に復元しています 
  5. [root@centos7 ~]# ll /root/data/  
  6. 合計 33796  
  7. -rw-r--r-- 1 ルート ルート 13034487 2020年8月30日 goInception-linux-amd64-v1.2.3.tar.gz  
  8. drwxr-sr-x 11 ルート 40 4096 12月24日 22:35 httpd-2.4.46  
  9. -rw-r--r-- 1 ルート ルート 9363314 2020年8月5日 httpd-2.4.46.tar.gz  
  10. -rw-r--r-- 1 ルート ルート 2846172 2020年10月14日 httpd-2.4.6-95.el7.centos.x86_64.rpm  
  11. -rw-r--r-- 1 ルート ルート 0 1月16日 11:32 mingongge.file  
  12. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z01  
  13. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z02  
  14. -rw-r--r-- 1 ルート ルート 965420 1月16日 16:24 mingongge.zip

上記のリカバリ方法は、どのスナップショットからデータを復元するかを指定することと同じです。スナップショットが複数ある場合があり、どのスナップショットから素早く復元すればよいか分からない場合は、「latest」パラメータを使用して、最新のバックアップスナップショットからデータを復元できます。

  1. [root@centos7 ~]# rm -rf /root/data/*  
  2. [root@centos7 ~]# ll /root/data/  
  3. 合計 0  
  4. [root@centos7 ~]# restic -r /restic/backup_dir/ 最新のものを復元 --target /root/  
  5. リポジトリのパスワードを入力してください:  
  6. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  7. <スナップショット94c62288 / [/root/data] at 2021-06-04 03:51:21.232686491 -0400 EDT by root@centos7 >を /root/ に復元しています 
  8. [root@centos7 ~]# ll /root/data/  
  9. 合計 33796  
  10. -rw-r--r-- 1 ルート ルート 13034487 2020年8月30日 goInception-linux-amd64-v1.2.3.tar.gz  
  11. drwxr-sr-x 11 ルート 40 4096 12月24日 22:35 httpd-2.4.46  
  12. -rw-r--r-- 1 ルート ルート 9363314 2020年8月5日 httpd-2.4.46.tar.gz  
  13. -rw-r--r-- 1 ルート ルート 2846172 2020年10月14日 httpd-2.4.6-95.el7.centos.x86_64.rpm  
  14. -rw-r--r-- 1 ルート ルート 0 1月16日 11:32 mingongge.file  
  15. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z01  
  16. -rw-r--r-- 1 ルート root 4194304 1 月 16 日 16:24 mingongge.z02  
  17. -rw-r--r-- 1 ルート ルート 965420 1月16日 16:24 mingongge.zip

その他の経営紹介

スナップショットを削除

ここでのスナップショットとバックアップは同じファイル名です。スナップショットが多すぎる場合は、定期的に削除する必要があります。通常、バックアップに必要な期間は約30日間ですが、特に重要なデータの場合は、実際の状況に応じてさらに時間がかかる場合があります。

  1. [root@centos7 ~]# restic -r /restic/backup_dir/ スナップショット 
  2. リポジトリのパスワードを入力してください:
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. ID 時間 ホスト タグ パス 
  5. ---------------------------------------------------------------------------------  
  6. 4d20711e 2021-06-04 03:40:47 centos7 /root/data  
  7. 3e5b7dea 2021-06-04 03:46:34 centos7 /root/data/mingongge.zip  
  8. 94c62288 2021-06-04 03:51:21 centos7 /root/data  
  9. ---------------------------------------------------------------------------------  
  10. 3枚のスナップショット 
  11. [root@centos7 ~]# restic -r /restic/backup_dir/ 4d20711e を忘れてください
  12. リポジトリのパスワードを入力してください:  
  13. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  14. [0:00] 100.00% 1 / 1 個のファイルを削除しました 
  15. [root@centos7 ~]# restic -r /restic/backup_dir/ スナップショット 
  16. リポジトリのパスワードを入力してください:  
  17. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  18. ID 時間 ホスト タグ パス 
  19. ---------------------------------------------------------------------------------  
  20. 3e5b7dea 2021-06-04 03:46:34 centos7 /root/data/mingongge.zip  
  21. 94c62288 2021-06-04 03:51:21 centos7 /root/data  
  22. ---------------------------------------------------------------------------------  
  23. 2枚のスナップショット 
  24. #この方法は復元と同じで、どちらもスナップショット ID を指定します。

この削除方法ではスナップショットのみが削除され、参照されているファイルはリポジトリ内に残ります。つまり、リポジトリのサイズは変更されず、データを消去するには `prune` パラメータを使用する必要があります。

  1. [root@centos7 ~]# restic -r /restic/backup_dir/ プルーン 
  2. リポジトリのパスワードを入力してください:
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. インデックスを読み込んでいます...  
  5. すべてのスナップショットを読み込んでいます...  
  6. 2つのスナップショットでまだ使用中のデータを見つける 
  7. [0:00] 100.00% 2 / 2 スナップショット 
  8. 中古パックを検索中...  
  9. 削除と再パックのためのパックの収集 
  10. [0:00] 100.00% 19 / 19パック処理済み 
  11. 再パック: 0 ブロブ / 0 B  
  12. これにより、0 個のブロブ / 0 個の B が削除されます 
  13. 削除対象: 0 個のブロブ / 0 バイト 
  14. 合計プルーン: 0 ブロブ / 0 B  
  15. 残り: 2990 ブロブ / 72.175 MiB  
  16. プルーニング後の未使用サイズ: 0 B (残りのサイズの 0.00%)  
  17. 終わり

次のコマンドを使用して、上記の 2 つの手順を同時に実行することもできます。これは、マージ操作と同等です。

  1. restic 忘れる --keep-last 1 --prune  
  2. #--keep-last 1 最後のスナップショットを削除しない

スナップショットの削除の詳細については、https://restic.readthedocs.io/en/latest/060_forget.html を参照してください。

リポジトリのパスワード管理

`key` コマンドを使用して同じリポジトリに複数のパスワードを設定できます。また、`add`、`list`、`remove`、`passwd` を使用してパスワードを管理することもできます。

  • パスワードを表示
  1. [root@centos7 ~]# restic -r /restic/backup_dir/ キーリスト 
  2. リポジトリのパスワードを入力してください:  
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。
  4. ID ユーザー ホスト作成 
  5. ---------------------------------------------  
  6. *d216779f ルート Centos7 2021-06-04 03:28:34  
  7. ---------------------------------------------
  • パスワードを追加
  1. [root@centos7 ~]# restic -r /restic/backup_dir/ キーを追加 
  2. リポジトリのパスワードを入力してください:  
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. 新しいパスワードを入力してください:  
  5. パスワードをもう一度入力してください:  
  6. 新しいキーを< root@centos7 のキー、2021-06-04 04:43:18.024358447 -0400 EDT m =+18.001857421に作成>として保存しました   
  7. [root@centos7 ~]# restic -r /restic/backup_dir/ キーリスト 
  8. リポジトリのパスワードを入力してください:  
  9. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  10. ID ユーザー ホスト作成 
  11. ---------------------------------------------  
  12. *d216779f ルート Centos7 2021-06-04 03:28:34  
  13. 33d0b428 ルート Centos7 2021-06-04 04:43:18  
  14. ---------------------------------------------
  • 消去
  1. [root@centos7 ~]# restic -r /restic/backup_dir/ キー削除 33d0b428  
  2. リポジトリのパスワードを入力してください:
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. 削除されたキー 33d0b428cba5c62585f1190432e61d46b88b4a6418c693d09ec47db596eace1f  
  5. [root@centos7 ~]# restic -r /restic/backup_dir/ キーリスト
  6. リポジトリのパスワードを入力してください:  
  7. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  8. ID ユーザー ホスト作成 
  9. ---------------------------------------------  
  10. *d216779f ルート Centos7 2021-06-04 03:28:34  
  11. ---------------------------------------------
  • パスワードを変更する
  1. [root@centos7 ~]# restic -r /restic/backup_dir/ キー パスワード 
  2. リポジトリのパスワードを入力してください:  
  3. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  4. 新しいパスワードを入力してください:  
  5. パスワードをもう一度入力してください:  
  6. 新しいキーを< root@centos7 のキー、2021-06-04 04:51:13.658184739 -0400 EDT m =+27.022974479に作成>として保存しました   
  7. [root@centos7 ~]# restic -r /restic/backup_dir/ キーリスト 
  8. リポジトリのパスワードを入力してください:  
  9. リポジトリ dff64d39 が正常に開かれました。パスワードは正しいです。  
  10. ID ユーザー ホスト作成 
  11. ---------------------------------------------  
  12. *a62168f6 ルート Centos7 2021-06-04 04:51:13  
  13. ---------------------------------------------  
  14. #パスワードが正常に更新されました。IDの変更を確認できます。

よくある質問

https://restic.readthedocs.io/en/latest/faq.html

より詳しい機能や操作方法については、ご興味のある読者の皆様はご自身でインストールして体験してみてください。すべて試した結果、Resticは非常に強力で、高速、安全、そして効率的なバックアップツールだと感じました。重要なのは、オープンソースで無料であることです。これは素晴らしいことです。強くお勧めします。