「Restic」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→Systemd Service: 翻訳) |
(→セキュリティ: 空白を削除) |
||
(2人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
[[Category:バックアップ]] |
[[Category:バックアップ]] |
||
+ | [[en:Restic]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|システムバックアップ}} |
{{Related|システムバックアップ}} |
||
27行目: | 28行目: | ||
== セキュリティ == |
== セキュリティ == |
||
− | Restic はリポジトリの対称暗号化を使用します。これは、自動化されたプロセスがバックアップを作成できるように、一般的にキーをプレーンテキストで保存する必要があるため、バックアップにいくつかの問題をもたらします [https://github.com/restic/restic/issues/533] [https://github.com/restic/restic/issues/2666] |
+ | Restic はリポジトリの対称暗号化を使用します。これは、自動化されたプロセスがバックアップを作成できるように、一般的にキーをプレーンテキストで保存する必要があるため、バックアップにいくつかの問題をもたらします [https://github.com/restic/restic/issues/533] [https://github.com/restic/restic/issues/2666] |
− | Restic は、key vault などからパスワードを取得するスクリプトのアイデアをサポートしています。ただし、key vault やシークレットストアのロックを解除するためにも、おそらくどこかで資格情報をハードコードする必要があるでしょう。理想的には、公開鍵を使用してスナップショットを作成し (restic によって自動化されたスクリプトで使用される) |
+ | Restic は、key vault などからパスワードを取得するスクリプトのアイデアをサポートしています。ただし、key vault やシークレットストアのロックを解除するためにも、おそらくどこかで資格情報をハードコードする必要があるでしょう。理想的には、公開鍵を使用してスナップショットを作成し (restic によって自動化されたスクリプトで使用される)、プライベートキーでのみスナップショットを復号化できる非対称暗号化があると良いですが、これはサポートされていません。 |
− | この問題を回避するために、リポジトリのパスワードを [[LUKS]] 暗号化ボリューム上のファイルに保存できます。ボリュームは、ユーザーが提供する [[YubiKey]] などのパスフレーズや FIDO キー ( |
+ | この問題を回避するために、リポジトリのパスワードを [[LUKS]] 暗号化ボリューム上のファイルに保存できます。ボリュームは、ユーザーが提供する [[YubiKey]] などのパスフレーズや FIDO キー ([[Universal 2nd Factor]] 参照) を使用して、起動時に復号化されます。crypttab ( [[dm-crypt]] 参照) および [[fstab]] で設定できます。 |
{{Note|Restic リポジトリ (バックアップ) は、LUKS で暗号化する必要はありません。Restic はデフォルトでデータを暗号化します。}} |
{{Note|Restic リポジトリ (バックアップ) は、LUKS で暗号化する必要はありません。Restic はデフォルトでデータを暗号化します。}} |
||
39行目: | 40行目: | ||
=== Systemd タイマー === |
=== Systemd タイマー === |
||
− | timeshift [https://github.com/teejee2008/timeshift] などの他のツールとは異なり、restic にはスケジューリング機能が含まれていません。[[cron]] または [[systemd |
+ | timeshift [https://github.com/teejee2008/timeshift] などの他のツールとは異なり、restic にはスケジューリング機能が含まれていません。[[cron]] または [[systemd/タイマー]] を使用することが期待されています。 |
− | [https://github.com/erikw/restic-automatic-backup-scheduler restic-automatic-backup-scheduler] などの準備されたプロジェクトを使用するか、この例に従って、ローカル (完全) システムバックアップを作成し、[[ |
+ | [https://github.com/erikw/restic-automatic-backup-scheduler restic-automatic-backup-scheduler] などの準備されたプロジェクトを使用するか、この例に従って、ローカル (完全) システムバックアップを作成し、[[Root ユーザ]] として実行する必要があります。 |
この例では、既存の restic リポジトリが初期化された既存のディレクトリがあると想定されています ( [[#インストール]]参照)。 |
この例では、既存の restic リポジトリが初期化された既存のディレクトリがあると想定されています ( [[#インストール]]参照)。 |
||
52行目: | 53行目: | ||
もちろん、将来の追加のインクリメンタルな変更に対してスペースが必要ですので、バックアップされるデータのサイズの 2 倍、または 3 倍のボリュームを作成することが良いです。例えば、 {{ic|/}} が {{ic|55G}} を占めている場合、 {{ic|/mnt/restic}} を {{ic|110G}} で作成できます。 |
もちろん、将来の追加のインクリメンタルな変更に対してスペースが必要ですので、バックアップされるデータのサイズの 2 倍、または 3 倍のボリュームを作成することが良いです。例えば、 {{ic|/}} が {{ic|55G}} を占めている場合、 {{ic|/mnt/restic}} を {{ic|110G}} で作成できます。 |
||
− | |||
− | ==== Systemd Service ==== |
||
− | |||
− | You will need a service unit. [[Create]] one: |
||
− | |||
− | {{hc|/etc/systemd/system/restic-backup.service|2= |
||
− | [Unit] |
||
− | Description=Backup system |
||
− | |||
− | [Service] |
||
− | ExecStart=/usr/local/bin/restic-backup |
||
− | }} |
||
− | |||
− | {{Note|The service will be invoked by the timer below but can also be [[start]]ed on demand for any unplanned snapshots.}} |
||
==== Systemd サービス ==== |
==== Systemd サービス ==== |
||
87行目: | 74行目: | ||
restic が使用するリソースを制約する別の方法は、[https://restic.readthedocs.io/en/latest/047_tuning_backup_parameters.html#cpu-usage 公式ドキュメント] で説明されているように、 {{ic|GOMAXPROCS}} 環境変数を使用することです。 |
restic が使用するリソースを制約する別の方法は、[https://restic.readthedocs.io/en/latest/047_tuning_backup_parameters.html#cpu-usage 公式ドキュメント] で説明されているように、 {{ic|GOMAXPROCS}} 環境変数を使用することです。 |
||
− | ==== Systemd |
+ | ==== Systemd タイマー ==== |
+ | タイマーユニットも必要です(この例では、15 分ごとに実行されます)。 |
||
− | You will also need a timer unit (this one runs every 15 min): |
||
{{hc|/etc/systemd/system/restic-backup.timer|2= |
{{hc|/etc/systemd/system/restic-backup.timer|2= |
||
104行目: | 91行目: | ||
}} |
}} |
||
− | ==== |
+ | ==== バックアップスクリプト ==== |
+ | また、必要なオプションをすべて渡すための小さなシェルスクリプトを作成することも必要でしょう。例えば: |
||
− | You will also want to create a small shell script to pass in all the required options, for example: |
||
{{hc|/usr/local/bin/restic-backup|<nowiki> |
{{hc|/usr/local/bin/restic-backup|<nowiki> |
||
140行目: | 127行目: | ||
# chmod 700 /usr/local/bin/get-restic-password |
# chmod 700 /usr/local/bin/get-restic-password |
||
− | ===== |
+ | ===== 圧縮 ===== |
− | + | [[Btrfs]] ファイルシステムを圧縮 (例:{{ic|1=compress=zstd}}) で使用している場合、圧縮済みのデータを再圧縮してもあまり利益がないため、再度データを暗号化することは意味がありません(それによりバックアップが遅くなるだけです)。一方、[[ext4]] を使用している場合、スペースを節約するために [https://restic.readthedocs.io/en/latest/047_tuning_backup_parameters.html#compression restic で圧縮を有効にする] ことが必要かもしれません。 |
|
− | ===== |
+ | ===== スナップショットの保持 ===== |
− | + | 上記のスクリプトの {{ic|restic forget --prune --keep-hourly 24 --keep-daily 30 --keep-monthly 6 --keep-weekly 4 --keep-yearly 3}} の値を必要に応じて調整してください。 |
|
− | ===== |
+ | ===== niceness の設定 ===== |
+ | バックアッププロセスの niceness を調整することもできます。バックアップを頻繁に実行する場合、インタラクティブな使用に影響を与えないようにリソースの使用量を減らすことが望ましいです。ただし、バックアップにかかる時間を確認し、重複していないことを確認してください(つまり、前のバックアップが終了していない状態で新しいバックアップが開始されていないこと)。 |
||
− | You may also wish to tweak niceness of the backup process. If you are running backups often you will likely want to reduce the resource usage to prevent it from affecting interactive use. However, you should check how long the backups are taking and make sure they are not overlapping (i.e. a new backup being started when the previous one has not finished). |
||
+ | それは {{man|1|nice}} で行うことができます。リソースを集中的に使用するコマンドの冒頭に nice を追加して、バックアップスクリプトを調整することが必要かもしれません。例: |
||
− | You can do that with {{man|1|nice}}. You may want to adjust the backup scrip by adding nice to the beginning of the resource intensive commands e.g.: |
||
# nice -n 19 restic backup ... |
# nice -n 19 restic backup ... |
||
# nice -n 19 restic check ... |
# nice -n 19 restic check ... |
||
+ | また、{{AUR|ananicy-cpp}} を使用している場合は、{{ic|/etc/ananicy.d/}} にあるその設定ファイルで niceness が設定されていることを確認する必要があります。 |
||
− | Alternatively if you are using {{AUR|ananicy-cpp}} you may want to ensure that the niceness is configured in its configuration file(s) under {{ic|/etc/ananicy.d/}}. |
||
{{hc|/etc/ananicy.d/00-types.types| |
{{hc|/etc/ananicy.d/00-types.types| |
||
167行目: | 154行目: | ||
}} |
}} |
||
− | + | 詳細は [https://restic.readthedocs.io/en/latest/faq.html?highlight=nice#how-to-prioritize-restic-s-io-and-cpu-time restic FAQ] を参照してください。 |
|
− | ==== |
+ | ==== 除外リスト ==== |
+ | {{ic|/etc/restic}} の下に excludes ファイルを追加します。例: |
||
− | Add the excludes file under {{ic|/etc/restic}} e.g.: |
||
{{hc|/etc/restic/excludes.txt| |
{{hc|/etc/restic/excludes.txt| |
||
200行目: | 187行目: | ||
}} |
}} |
||
− | ==== |
+ | ==== 有効化 ==== |
− | + | {{ic|restic-backup.timer}} を[[有効化]]するのを忘れないでください。 |
2023年10月29日 (日) 03:11時点における最新版
このページでは、Arch Linux の文脈でのクイックスタートガイドを提供し、最良の方法を提案するための restic [1] バックアップツールについて説明します。
主な機能と利点は以下の通りです。
- 暗号化されたバックアップ
- リモートバックアップ
- 圧縮のための組み込みサポート
- 効率的なストレージ (チャンクベースのインクリメント、データは複製されません)
- cron や systemd などのカスタムスケジューリングソリューションを使用する柔軟性
- go で書かれているおり、スタンドアロンのバイナリ
目次
インストール
restic をインストールし、その後、空のディレクトリでリポジトリを初期化します (ローカルバックアップ用) :
$ restic init --repo /path/to/backup/directory/
公式チュートリアル [2] を参照してください。
セキュリティ
Restic はリポジトリの対称暗号化を使用します。これは、自動化されたプロセスがバックアップを作成できるように、一般的にキーをプレーンテキストで保存する必要があるため、バックアップにいくつかの問題をもたらします [3] [4]
Restic は、key vault などからパスワードを取得するスクリプトのアイデアをサポートしています。ただし、key vault やシークレットストアのロックを解除するためにも、おそらくどこかで資格情報をハードコードする必要があるでしょう。理想的には、公開鍵を使用してスナップショットを作成し (restic によって自動化されたスクリプトで使用される)、プライベートキーでのみスナップショットを復号化できる非対称暗号化があると良いですが、これはサポートされていません。
この問題を回避するために、リポジトリのパスワードを LUKS 暗号化ボリューム上のファイルに保存できます。ボリュームは、ユーザーが提供する YubiKey などのパスフレーズや FIDO キー (Universal 2nd Factor 参照) を使用して、起動時に復号化されます。crypttab ( dm-crypt 参照) および fstab で設定できます。
スケジューリング
Systemd タイマー
timeshift [5] などの他のツールとは異なり、restic にはスケジューリング機能が含まれていません。cron または systemd/タイマー を使用することが期待されています。
restic-automatic-backup-scheduler などの準備されたプロジェクトを使用するか、この例に従って、ローカル (完全) システムバックアップを作成し、Root ユーザ として実行する必要があります。
この例では、既存の restic リポジトリが初期化された既存のディレクトリがあると想定されています ( #インストール参照)。
別のボリュームを作成する
この手順はオプションですが、自動バックアッププロセスが OS に利用可能なスペースをすべて消費する可能性があるため、そこに別のボリュームをマウントすることが良いです。
最初の restic バックアップは、OS 全体をクローンする必要があるため、必要な最小のスペースは、OS によって占められるスペース (以下で説明するパスの除外に対して) 、またはバックアップを決定した他のディレクトリに等しいです。
もちろん、将来の追加のインクリメンタルな変更に対してスペースが必要ですので、バックアップされるデータのサイズの 2 倍、または 3 倍のボリュームを作成することが良いです。例えば、 /
が 55G
を占めている場合、 /mnt/restic
を 110G
で作成できます。
Systemd サービス
サービスユニットが必要なので、作成します。
/etc/systemd/system/restic-backup.service
[Unit] Description=Backup system [Service] ExecStart=/usr/local/bin/restic-backup
リソース制約の設定
systemd を使用すると、バックアッププロセスにリソース制約を設定するオプションがあります。例えば、メモリと / または CPU の量を制限できます。これは systemd サービスユニットで設定するものです。systemd.resource-control(5) を参照してください。
restic が使用するリソースを制約する別の方法は、公式ドキュメント で説明されているように、 GOMAXPROCS
環境変数を使用することです。
Systemd タイマー
タイマーユニットも必要です(この例では、15 分ごとに実行されます)。
/etc/systemd/system/restic-backup.timer
[Unit] Description=Timer for full system backups [Timer] OnBootSec=5min OnUnitActiveSec=15min Unit=restic-backup.service [Install] WantedBy=timers.target
バックアップスクリプト
また、必要なオプションをすべて渡すための小さなシェルスクリプトを作成することも必要でしょう。例えば:
/usr/local/bin/restic-backup
#!/bin/bash if [[ -n $(pgrep 'restic' | grep 'restic backup') ]]; then echo 'restic is already running...' 1>&2 exit 0 fi set -e set -v export RESTIC_REPOSITORY='/mnt/restic' export RESTIC_PASSWORD_COMMAND='/usr/local/bin/get-restic-password' export RESTIC_COMPRESSION='off' export RESTIC_CACHE_DIR=~/.cache/restic mkdir -p "${RESTIC_CACHE_DIR}" restic unlock restic backup / --exclude-file=/etc/restic/excludes.txt --tag scheduled restic check --with-cache --read-data-subset=5G restic forget --prune --keep-hourly 24 --keep-daily 30 --keep-monthly 6 --keep-weekly 4 --keep-yearly 3
/usr/local/bin/get-restic-password
#!/bin/bash echo VerySecurePassword123
# chmod 744 /usr/local/bin/restic-backup # chmod 700 /usr/local/bin/get-restic-password
圧縮
Btrfs ファイルシステムを圧縮 (例:compress=zstd
) で使用している場合、圧縮済みのデータを再圧縮してもあまり利益がないため、再度データを暗号化することは意味がありません(それによりバックアップが遅くなるだけです)。一方、ext4 を使用している場合、スペースを節約するために restic で圧縮を有効にする ことが必要かもしれません。
スナップショットの保持
上記のスクリプトの restic forget --prune --keep-hourly 24 --keep-daily 30 --keep-monthly 6 --keep-weekly 4 --keep-yearly 3
の値を必要に応じて調整してください。
niceness の設定
バックアッププロセスの niceness を調整することもできます。バックアップを頻繁に実行する場合、インタラクティブな使用に影響を与えないようにリソースの使用量を減らすことが望ましいです。ただし、バックアップにかかる時間を確認し、重複していないことを確認してください(つまり、前のバックアップが終了していない状態で新しいバックアップが開始されていないこと)。
それは nice(1) で行うことができます。リソースを集中的に使用するコマンドの冒頭に nice を追加して、バックアップスクリプトを調整することが必要かもしれません。例:
# nice -n 19 restic backup ... # nice -n 19 restic check ...
また、ananicy-cppAUR を使用している場合は、/etc/ananicy.d/
にあるその設定ファイルで niceness が設定されていることを確認する必要があります。
/etc/ananicy.d/00-types.types
{"type":"file-sync","nice":19,"ionice":7}
/etc/ananicy.d/99-custom/file-sync/restic.rules
{"name": "restic", "type": "file-sync"}
詳細は restic FAQ を参照してください。
除外リスト
/etc/restic
の下に excludes ファイルを追加します。例:
/etc/restic/excludes.txt
/data/** /dev/** /home/*/**/*.pyc /home/*/**/__pycache__/** /home/*/**/node_modules/** /home/*/.cache/** /home/*/.local/lib/python*/site-packages/** /home/*/.mozilla/firefox/*/Cache/** /lost+found/** /media/** /mnt/** /proc/** /root/** /run/** /swapfile /sys/** /tmp/** /var/cache/** /var/cache/pacman/pkg/** /var/lib/docker/** /var/lib/libvirt/** /var/lock/** /var/log/** /var/run/**
有効化
restic-backup.timer
を有効化するのを忘れないでください。