restic とは
restic は 速く、無駄がなく、安全なバックアッププログラムです。ファイルを内容で決まる境界のチャンクに分け、同じチャンクは一度しか保存しません。ほとんど変わっていないディレクトリの二度目のバックアップは、ほぼ何も転送しません。すべては手元のマシンで AES-256 と Poly1305-AES により暗号化・認証され、1 バイトも素のままでは出ていきません。つまり、完全には信用していない場所にリポジトリを置けます。スナップショットは追記のみで、一覧、差分、ファイルシステムとしてのマウント、ファイル単位のリストアが、それぞれコマンド 1 つでできます。設定ファイルを書く必要はありません。
prune と check の修正、大きなリポジトリでのメモリ削減、新しいバックエンド対応が入ってきます。Debian 安定版のバージョンは何年も前のものです。新しい restic が書いたリポジトリは古い restic では読めないことがあるので、リストアする側のマシンは、バックアップした側と同じか新しくなければなりません。どこでも現行リリースを使うのが、それを保ついちばん簡単な方法です。
⚡ restic の主な機能
🧩 本当に効く重複排除
内容に基づくチャンク分割により、変わっていないファイル、移動しただけのファイル、10 台に同じものがあるファイルは、いずれも一度だけ保存されます。同じツリーの毎日のスナップショットは、差分ぶんのコストで済みます。
🔐 出ていく前に暗号化
内容は AES-256、認証は Poly1305-AES、どちらもクライアント側で行います。リポジトリには平文も未認証データもありません。敵対的なストレージはバックアップを失わせることはできても、読むことも偽造することもできません。
☁️ どこにでも置けるバックエンド
ローカルディレクトリ、SFTP、REST サーバー、Amazon S3 と S3 互換のすべて、OpenStack Swift、Backblaze B2、Azure Blob Storage、Google Cloud Storage、そして rclone 経由でそれ以外のすべて。
📸 見て回れるスナップショット
restic snapshots で一覧、restic diff で 2 つの差分、restic mount ですべてのスナップショットをディレクトリの下に。1 ファイルだけなら cp で取り戻せます。
🧹 保持ポリシーと掃除
forget --keep-daily/--keep-weekly/--keep-monthly は保持ポリシーをそのまま書けますし、--prune がそのあとリポジトリ内の領域を回収します。
🔎 検証できるリポジトリ
restic check がリポジトリの構造を検証し、--read-data はすべての pack ファイルを読み直して検証します。「バックアップがある」と「バックアップが壊れていない」を、どちらも実際に確かめられます。
apt upgrade を実行するだけで、常に最新版を使い続けられます。
📦 deb.griffo.io からインストールする
ステップ 1: リポジトリを追加する
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 ずっと無料のミラーがあります。 deb-free.griffo.io は、アカウントもサブスクリプションもなしでパッケージをずっと無料で配布しています。上流より最大2か月遅れ、セキュリティ修正は即座に公開されます。現在収録しているのは cliamp、Ghostty、lazydocker、Oh My Posh と Zed です。restic は含まれていないため、今日入手する方法は上のリポジトリだけですが、ご要望があれば追加できます。
🧩 extrepo オプションについて。 extrepo は外部リポジトリを扱う Debian 標準のツールです。署名済みメタデータと照合して鍵を検証したうえで、sources ファイルの作成と署名鍵のインストールを代わりに行います。このリポジトリは griffo、ずっと無料のミラーは griffo-free という名前で登録されているので、Debian(bookworm、trixie、forky、sid)では上のコマンドだけで設定は完了です。
extrepo が用意するのは sources ファイルと鍵だけなので、サブスクリプションの認証情報は引き続き /etc/apt/auth.conf.d/deb.griffo.io.conf に書きます。extrepo は Debian のスイート向けメタデータしか公開していないため Ubuntu は対象外です。Ubuntu では sudo または root のコマンドを使ってください。
ステップ 2: restic をインストールする
# 最新の restic をインストール
sudo apt install restic
# インストールを確認
restic version# 最新の restic をインストール
apt install restic
# インストールを確認
restic versionステップ 3: 最初のリポジトリを作る
# リポジトリはディレクトリです。ローカルでもリモートでも構いません。
# パスワードを決めて必ず保管してください。無ければデータは戻せません(設計です)。
restic init --repo /srv/backup/restic
# 何かをバックアップする
restic -r /srv/backup/restic backup ~/Documents
# 何が入っているか見る
restic -r /srv/backup/restic snapshots
# man ページと bash・fish・zsh の補完はパッケージに入っています
man restic🎯 基本的な使い方
バックアップする:
# 毎回入力せずに済むよう、パスワードはファイルに置く
echo '長いパスフレーズ' | sudo tee /etc/restic-password > /dev/null
sudo chmod 600 /etc/restic-password
export RESTIC_REPOSITORY=/srv/backup/restic
export RESTIC_PASSWORD_FILE=/etc/restic-password
# 複数のパスを、リストア時にいらないものを外してバックアップ
restic backup ~/Documents ~/Pictures --exclude '**/node_modules' --exclude '*.iso'
# あるいはファイルで指定する(1 行 1 パターン)
restic backup ~ --exclude-file ~/.config/restic-excludes --exclude-caches
# あとで探せるようにタグを付ける
restic backup /etc --tag config --tag "$(hostname)"# 毎回入力せずに済むよう、パスワードはファイルに置く
echo '長いパスフレーズ' | tee /etc/restic-password > /dev/null
chmod 600 /etc/restic-password
export RESTIC_REPOSITORY=/srv/backup/restic
export RESTIC_PASSWORD_FILE=/etc/restic-password
# 複数のパスを、リストア時にいらないものを外してバックアップ
restic backup ~/Documents ~/Pictures --exclude '**/node_modules' --exclude '*.iso'
# あるいはファイルで指定する(1 行 1 パターン)
restic backup ~ --exclude-file ~/.config/restic-excludes --exclude-caches
# あとで探せるようにタグを付ける
restic backup /etc --tag config --tag "$(hostname)"リストアと閲覧:
# リポジトリの中身
restic snapshots
restic ls latest /etc
# 最新のスナップショットからすべて戻す
restic restore latest --target /tmp/restore
# 実際に失ったパスだけを戻す
restic restore latest --target / --include /etc/nginx
# 履歴全体をマウントして、手でファイルを取り出す(FUSE が必要)
sudo apt install fuse3
mkdir -p ~/mnt/backup
restic mount ~/mnt/backup
# 2 つのスナップショットの差分
restic diff 1a2b3c4d 5e6f7a8b# リポジトリの中身
restic snapshots
restic ls latest /etc
# 最新のスナップショットからすべて戻す
restic restore latest --target /tmp/restore
# 実際に失ったパスだけを戻す
restic restore latest --target / --include /etc/nginx
# 履歴全体をマウントして、手でファイルを取り出す(FUSE が必要)
apt install fuse3
mkdir -p ~/mnt/backup
restic mount ~/mnt/backup
# 2 つのスナップショットの差分
restic diff 1a2b3c4d 5e6f7a8bリモートのリポジトリ:
# SFTP: すでに ssh で入れるマシンならどこでも
restic -r sftp:backup@nas:/srv/restic init
# S3 と S3 互換のすべて。セルフホストの Garage や MinIO も含みます
export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...
restic -r s3:https://s3.example.com/backups init
# Backblaze B2
export B2_ACCOUNT_ID=... B2_ACCOUNT_KEY=...
restic -r b2:my-bucket:backups init
# rclone が届く先すべて、つまり残り全部
restic -r rclone:mydrive:backups init保持・掃除・検証:
# リポジトリ全体に適用する保持ポリシー
restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune
# forget はスナップショットを消すので、まずは空実行で
restic forget --keep-daily 7 --dry-run
# 構造チェック。軽いので、こまめに
restic check
# 実データの一部を読み直して検証。重いので、月に一度
restic check --read-data-subset 10%
# 容量がどこに使われているか
restic stats --mode raw-data🔧 ツール連携
restic は、すでに動かしているもので動かす前提の作りです:
- systemd: サービス 1 つとタイマー 1 つが定番の無人運用です。
RESTIC_REPOSITORYとRESTIC_PASSWORD_FILEはシェルのプロファイルではなく unit に書きます - rclone:
rclone:バックエンドを使えば、restic 自身が話さなくても rclone の対応する全プロバイダが使えます - FUSE:
fuse3(またはfuse)があればrestic mountが全スナップショットを辿れるディレクトリになり、1 ファイルの復旧はこれが最速です - rest-server: 上流自身の HTTP バックエンド。追記のみモードがあり、侵害されたクライアントが自分の作ったバックアップを消せません
- データベース:
--stdinは標準入力からダンプを受け取るので、pg_dump … | restic backup --stdin --stdin-filename db.sqlはディスクを一切使いません
🚀 deb.griffo.io を選ぶ理由
- 公式 Debian: restic は入っていますが、現行の安定版で固定されたバージョンは上流からかなり遅れており、Debian 12 はさらに遅れています
- 上流のバイナリ: 最新ではありますが、bzip2 で圧縮されたバイナリを自分で
/usr/local/binに展開する形で、apt の外に置かれ、以後はrestic self-updateで面倒を見ることになります - Snap: 制限付き実行のため、ホーム以外のパスのバックアップやスナップショットのマウントが、本来より面倒になります
- deb.griffo.io: 最新版を自動更新で
- ✅ 同じパッケージの、新しい版: Debian 自身の
resticと同じ名前・同じセクション・同じパスなので、二重インストールではなく差し替えになります - ✅ 検証済みの上流ビルド: 各バイナリは上流の
SHA256SUMSと、そのSHA256SUMSは restic のリリース鍵と照合してから、パッケージ化しています - ✅ 自動更新: 上流のリリースから数時間以内にパッケージを更新
- ✅ 全部入り: 上流公式のバイナリに加えて、man ページ一式(
restic.1とサブコマンドごとのページ)と bash・fish・zsh の補完 - ✅ 7 つのアーキテクチャ: amd64、arm64、armhf、i386、ppc64el、s390x、riscv64。NAS も Pi もメインフレームも、同じ restic になります
- ✅ マルチディストリビューション: Bookworm、Trixie、Forky、Sid で動作
- ✅ 手間のかからない運用: 更新は通常の apt コマンドだけ
📦 パッケージのビルドリポジトリ
Debian パッケージは、この GitHub リポジトリで自動的にビルド・管理されています:
- 💾 restic-debian - 最新リリースのビルド
🔗 関連パッケージ
deb.griffo.io では、こちらも配布しています:
- rclone - restic に残りのプロバイダすべてを与えるバックエンド
- Garage - リポジトリの置き先にできる、セルフホストの S3 ストレージ
- Zellij - 長い初回バックアップを走らせ続けるためのマルチプレクサ
- bottom - 大きなバックアップがマシンに何をしているかを見る
