Restic

提供: ArchWiki
2023年10月29日 (日) 03:11時点におけるKgx (トーク | 投稿記録)による版 (→‎セキュリティ: 空白を削除)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

このページでは、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 で設定できます。

ノート: Restic リポジトリ (バックアップ) は、LUKS で暗号化する必要はありません。Restic はデフォルトでデータを暗号化します。

スケジューリング

Systemd タイマー

timeshift [5] などの他のツールとは異なり、restic にはスケジューリング機能が含まれていません。cron または systemd/タイマー を使用することが期待されています。

restic-automatic-backup-scheduler などの準備されたプロジェクトを使用するか、この例に従って、ローカル (完全) システムバックアップを作成し、Root ユーザ として実行する必要があります。

この例では、既存の restic リポジトリが初期化された既存のディレクトリがあると想定されています ( #インストール参照)。

別のボリュームを作成する

この手順はオプションですが、自動バックアッププロセスが OS に利用可能なスペースをすべて消費する可能性があるため、そこに別のボリュームをマウントすることが良いです。

最初の restic バックアップは、OS 全体をクローンする必要があるため、必要な最小のスペースは、OS によって占められるスペース (以下で説明するパスの除外に対して) 、またはバックアップを決定した他のディレクトリに等しいです。

もちろん、将来の追加のインクリメンタルな変更に対してスペースが必要ですので、バックアップされるデータのサイズの 2 倍、または 3 倍のボリュームを作成することが良いです。例えば、 /55G を占めている場合、 /mnt/restic110G で作成できます。

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有効化するのを忘れないでください。