resticでよく使うコマンドまとめ

前回、前々回と、resticでさくらのクラウドのオブジェクトストレージにバックアップを取るところまでやりました。
resticを利用してさくらのクラウドのオブジェクトストレージにバックアップしてみた
resticでさくらのクラウド オブジェクトストレージにバックアップ ─ Debian 12編

今回は、運用中によく打つコマンドをまとめました。バックアップの設定は前回までに書いたので、ここではバックアップを取ったあとに使うコマンドが中心です。

検証環境はDebian 12、restic 0.19.1、保存先は石狩第1のオブジェクトストレージです。環境変数は前回と同じく /etc/restic/sakura.env にまとめてある前提で進めます。

set -a; . /etc/restic/sakura.env; set +a

確認する

スナップショットを確認する

まずはどのスナップショットがあるかの確認です。

restic snapshots
repository a7b3b572 opened (version 2, compression level auto)
ID Time Host Tags Paths Size
-----------------------------------------------------------------------
83e7e68b 2026-09-26 03:38:12 xxxxxxxxxx daily / 2.221 GiB
545fa1e6 2026-09-27 03:32:04 xxxxxxxxxx daily / 2.202 GiB
~~
b34c4a0a 2026-10-02 03:32:33 xxxxxxxxxx daily / 2.216 GiB
-----------------------------------------------------------------------
Timestamps shown in local time
7 snapshots

世代が増えると一覧が長くなるので、絞り込みを覚えておくと楽です。

# パスで絞る
restic snapshots --path /etc

# 直近3件だけ
restic snapshots --latest 3
# restic snapshots --latest 3
repository a7b3b572 opened (version 2, compression level auto)
ID Time Host Tags Paths Size
-----------------------------------------------------------------------
334ea342 2026-09-30 03:55:04 xxxxxxxxxx daily / 2.213 GiB
85ecdcca 2026-10-01 03:56:42 xxxxxxxxxx daily / 2.214 GiB
b34c4a0a 2026-10-02 03:32:33 xxxxxxxxxx daily / 2.216 GiB
-----------------------------------------------------------------------
Timestamps shown in local time
3 snapshots

--path は、バックアップ時に指定したパスと完全一致したものしか出ません。今回は / をまるごとバックアップしているので、--path /etc では何も出ませんでした。
--latest はホストとパスの組み合わせごとに件数を数えます。

以降のコマンドで出てくる latest は最新のスナップショット、83e7e68b のような文字列は個別のスナップショットIDです。一覧のID欄に出ているものをそのまま使えます。

過去のファイル一覧を見る

スナップショットの中に何が入っているかは restic ls で見られます。ディレクトリを指定するとその中だけに絞れます。

restic ls latest /etc/nginx
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
snapshot b34c4a0a of [/] at 2026-10-02 03:32:33.622347471 +0900 JST by root@xxxxx filtered by [/etc/nginx]:
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/mime.types
/etc/nginx/modules-enabled
/etc/nginx/nginx.conf
~~
/etc/nginx/sites-enabled

出てくるのは指定したディレクトリの直下だけで、conf.d の中身までは出ません。サブディレクトリの中まで見たいときは --recursive を付けます。

restic ls --recursive latest /etc/nginx
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
snapshot b34c4a0a of [/] at 2026-10-02 03:32:33.622347471 +0900 JST by root@xxxxx filtered by [/etc/nginx]:
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/xxxxx.conf
/etc/nginx/conf.d/brotli.conf
~~
/etc/nginx/nginx.conf
/etc/nginx/proxy_params
~~
/etc/nginx/sites-enabled
/etc/nginx/sites-enabled/xxxxx
~~
/etc/nginx/sites-enabled/default
/etc/nginx/sites-enabled/yyyyy

-l を付けると、パーミッションやサイズ、更新日時も出ます。

restic ls -l latest /etc/nginx
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
snapshot b34c4a0a of [/] at 2026-10-02 03:32:33.622347471 +0900 JST by root@xxxxx filtered by [/etc/nginx]:
drwxr-xr-x 0 0 0 2026-08-20 22:02:54 /etc/nginx
drwxr-xr-x 0 0 0 2026-08-20 22:02:54 /etc/nginx/conf.d
-rwxr-xr-x 0 0 4005 2026-08-20 22:02:54 /etc/nginx/mime.types
drwxr-xr-x 0 0 0 2026-08-20 22:02:54 /etc/nginx/modules-enabled
-rwxr-xr-x 0 0 2092 2026-08-20 22:02:54 /etc/nginx/nginx.conf
~~
drwxr-xr-x 1002 0 0 2026-09-07 14:28:46 /etc/nginx/sites-enabled

古いスナップショットを見るときは latest の代わりにIDを指定します。

restic ls 83e7e68b /etc/nginx
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
snapshot 83e7e68b of [/] at 2026-09-26 03:38:12.571382815 +0900 JST by root@xxxxx filtered by [/etc/nginx]:
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/mime.types
~~
/etc/nginx/sites-enabled

ファイルを探す

どのスナップショットに入っているか分からないときは restic find です。全スナップショットを横断して探します。

restic find nginx.conf
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
Found matching entries in snapshot b34c4a0a from 2026-10-02 03:32:33
/etc/nginx/nginx.conf

Found matching entries in snapshot 85ecdcca from 2026-10-01 03:56:42
/etc/nginx/nginx.conf

~~

Found matching entries in snapshot 83e7e68b from 2026-09-26 03:38:12
/etc/nginx/nginx.conf

ワイルドカードも使えます。シェルに展開されないよう、シングルクォートで囲んでおきます。

restic find '*.conf'
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
Found matching entries in snapshot b34c4a0a from 2026-10-02 03:32:33
/etc/adduser.conf
~~
/var/lib/ucf/cache/:etc:apt:listchanges.conf

Found matching entries in snapshot 85ecdcca from 2026-10-01 03:56:42
/etc/adduser.conf
~~

特定のスナップショットだけ探したいときは -s でIDを指定します。

restic find -s 83e7e68b nginx.conf
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
Found matching entries in snapshot 83e7e68b from 2026-09-26 03:38:12
/etc/nginx/nginx.conf

過去ファイルの中身を見る

中身を見るだけなら restic dump です。ファイルの内容が標準出力にそのまま出ます。

restic dump latest /etc/nginx/nginx.conf
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 1048576;
timer_resolution 100ms;
pid /run/nginx.pid;
~~

パスはバックアップ時の絶対パスで指定します。標準出力なので、lessやgrepにそのまま渡せます。

restic dump latest /etc/nginx/nginx.conf | grep server_name
        server_names_hash_bucket_size 256;
server_name_in_redirect off;

今のファイルと比べる

diffに渡せば、今のファイルとの差分もそのまま出ます。設定をいじってから動きがおかしい、というときに便利です。

restic dump latest /etc/nginx/nginx.conf | diff - /etc/nginx/nginx.conf

差分がなければ何も表示されません。今回は変更していないので、出力なしで終わりました。

スナップショット同士の差分を見る

2つのスナップショットで何が変わったかは restic diff で見られます。

restic diff 83e7e68b b34c4a0a
repository a7b3b572 opened (version 2, compression level auto)
comparing snapshot 83e7e68b to b34c4a0a:

[0:00] 100.00% 6 / 6 index files loaded
~~
M /etc/ssl/certs/xxxxx.crt
M /root/.bash_history
~~
M /var/lib/logrotate/status
+ /var/lib/nginx/cache/0/63/f179d1785494c1d0487abce890728630
+ /var/lib/nginx/cache/0/c2/a85c6f3d19b2133dfe30e88d122d8c20
~~
M /var/log/syslog
M /var/log/wtmp

Files: 58 new, 5 removed, 21 changed
Dirs: 7 new, 1 removed
Others: 0 new, 0 removed
Data Blobs: 90 new, 46 removed
Tree Blobs: 126 new, 73 removed
Added: 29.430 MiB
Removed: 34.101 MiB

行頭の記号の意味は以下のとおりです。

記号 意味
+ 追加
- 削除
M 中身が変わった
T 種類が変わった(ファイル→シンボリックリンクなど)
U メタデータが変わった(--metadata 付きのときだけ出る)

パーミッションや所有者の変更も知りたいときは --metadata を付けます。

restic diff --metadata 83e7e68b b34c4a0a
repository a7b3b572 opened (version 2, compression level auto)
comparing snapshot 83e7e68b to b34c4a0a:

[0:00] 100.00% 6 / 6 index files loaded
~~
U /etc/
U /etc/ssl/
U /etc/ssl/certs/
M /etc/ssl/certs/xxxxx.crt
~~
U /var/log/nginx/
U /var/log/nginx/error.log
~~

Files: 58 new, 5 removed, 21 changed
~~

ディレクトリの更新日時が変わっただけでも U で出るので、出力はかなり長くなります。

diffで分かるのは「どのファイルが変わったか」までです。中身がどう変わったかは、先ほどのdumpとdiffを組み合わせて確認します。

容量を確認する

restic stats
restic stats --mode raw-data
# restic stats
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
scanning...
[0:06] 100.00% 7 / 7 snapshots, 55696 files, 2.221 GiB
Stats in restore-size mode:
Snapshots processed: 7
Total File Count: 390151
Total Size: 15.456 GiB

# restic stats --mode raw-data
repository a7b3b572 opened (version 2, compression level auto)
[0:00] 100.00% 6 / 6 index files loaded
scanning...
[0:00] 100.00% 7 / 7 snapshots, 48795 blobs, 805.798 MiB
Stats in raw-data mode:
Snapshots processed: 7
Total Blob Count: 48795
Total Uncompressed Size: 2.277 GiB
Total Size: 805.798 MiB
Compression Progress: 100.00%
Compression Ratio: 2.89x
Compression Space Saving: 65.44%

何も付けないと「全スナップショットを復元したときの合計サイズ」、--mode raw-data だと「実際にリポジトリに保存されているサイズ」です。オブジェクトストレージの利用量に近いのは後者です。

戻す

1ファイルだけ戻す

確認した結果、やはり戻したいというときは --include で対象を絞ってrestoreします。先に --dry-run で対象を確認しておきます。

restic restore latest --target /tmp/restore --include /etc/nginx/nginx.conf --dry-run -vv
restic restore latest --target /tmp/restore --include /etc/nginx/nginx.conf

復元先には /tmp/restore/etc/nginx/nginx.conf のようにフルパスで作られます。/ に直接戻すより、一度 /tmp に出して中身を確かめてからcpするほうが安全です。

ディレクトリごと取り出す

dumpでディレクトリを指定すると、tarで出力されます。zipが良ければ --archive zip です。

restic dump latest /etc/nginx > nginx.tar
restic dump --archive zip latest /etc/nginx > nginx.zip

まとめ

どれも、バックアップを取ったあとの確認や作業でよく使うコマンドです。押さえておくのは以下くらいです。

・中身を見るだけならdump。標準出力なので、diffやgrepにそのまま渡せる
・どこにあるか分からないファイルはfind、何が変わったかの一覧はdiff
・戻すときは --include で1ファイルに絞り、--dry-run で確認してから