背景
前回力尽きて積み残しになった検証事項をさばいておこうかと思います。
- 特殊な状態のファイルはどうなる?
- レポジトリのお掃除
- 処理負荷
ラストは追加ですね。
他の方法と比較しないと分かりにくですが。
Baculaのようなサーバ側でしっかり管理する構成の場合、(エージェントの処理はありますが)処理はサーバ側が頑張るような気がします。
一方、Resticの場合はクライアント側で頑張らせるような感触があります。
これが実際のところどうなのか、どのくらいの負荷がかかるのか、をざっくり把握しておこうかと思います。
検証色々
1. 特殊な状態のファイルはどうなる
1.1. シンボリックリンク
実体はコピーせず、シンボリックリンクとしてコピー。
素直な動作ですね。
$ tree ./
./
├── rawfiles
│ ├── rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
│ └── rand_200mb.bin
└── rawfiles02
└── rand_100mb.bin
$ ssh bkup du -sh /bkup/bkup1_1
1.1M /bkup/bkup1_1
$ sudo -u restic -E restic -r sftp:bkup:/bkup/bkup1_1 backup ./rawfiles
repository 5a451231 opened (version 2, compression level auto)
unable to open cache: mkdir /home/user01/.cache: permission denied
no parent snapshot found, will read all files
[0:00] 0 index files loaded
Files: 1 new, 0 changed, 0 unmodified
Dirs: 1 new, 0 changed, 0 unmodified
Added to the repository: 200.009 MiB (200.020 MiB stored)
processed 1 files, 200.000 MiB in 0:02
snapshot d16574f9 saved
$ ssh bkup du -sh /bkup/bkup1_1
202M /bkup/bkup1_1
$ mkdir ./restored
$ cd ./restored
$ sudo -u restic -E restic -r sftp:bkup:/bkup/bkup1_1 restore latest --target ./
repository 5a451231 opened (version 2, compression level auto)
unable to open cache: mkdir /home/user01/.cache: permission denied
[0:00] 100.00% 1 / 1 index files loaded
restoring snapshot d16574f9 of [/tmp2/rawfiles] at 2026-01-12 18:55:45.385935616 +0900 JST by restic@deb13 to ./
Summary: Restored 3 files/dirs (200.000 MiB) in 0:00
user01@deb13:/tmp2/restored$ ls
rawfiles
$ tree ./rawfiles/
./rawfiles/
├── rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
└── rand_200mb.bin
1.2. 権限
$ useradd testuser -u 2000
$ ls -al
total 512008
drwxrwxr-x 2 user01 user01 4096 Jan 12 22:43 .
drwxrwxrwx 4 user01 user01 4096 Jan 12 22:41 ..
lrwxrwxrwx 1 user01 user01 28 Jan 12 18:55 rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
-r--r----- 1 testuser testuser 157286400 Jan 12 22:43 rand_150mb_testuser_440.bin
-rwx------ 1 testuser testuser 157286400 Jan 12 22:43 rand_150mb_testuser_700.bin
-rw-rw-r-- 1 user01 user01 209715200 Jan 12 18:40 rand_200mb.bin
$ userdel testuser
$ sudo -u restic -E restic -r sftp:192.168.122.17:/bkup/bkup1_1 backup ./rawfiles
repository 5a451231 opened (version 2, compression level auto)
unable to open cache: mkdir /home/user01/.cache: permission denied
using parent snapshot 759f4e71
[0:00] 100.00% 2 / 2 index files loaded
error: /tmp2/rawfiles/rand_150mb_testuser_440.bin: open rawfiles/rand_150mb_testuser_440.bin: permission denied
error: /tmp2/rawfiles/rand_150mb_testuser_700.bin: open rawfiles/rand_150mb_testuser_700.bin: permission denied
Files: 0 new, 0 changed, 1 unmodified
Dirs: 0 new, 0 changed, 1 unmodified
Added to the repository: 0 B (0 B stored)
processed 1 files, 200.000 MiB in 0:01
snapshot 289cd96b saved
Warning: at least one source file could not be read
ん?error?
あ、、そうか。
対象ファイルに対して、restic自体が読み込みできないんだ。。
直して再実行。
$ ls -al ./rawfiles
total 512008
drwxrwxr-x 2 user01 user01 4096 Jan 12 22:43 .
drwxrwxrwx 5 user01 user01 4096 Jan 12 22:46 ..
lrwxrwxrwx 1 user01 user01 28 Jan 12 18:55 rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
-r--r--r-- 1 2000 2000 157286400 Jan 12 22:43 rand_150mb_testuser_440.bin
-rwx---r-- 1 2000 2000 157286400 Jan 12 22:43 rand_150mb_testuser_700.bin
-rw-rw-r-- 1 user01 user01 209715200 Jan 12 18:40 rand_200mb.bin
$ sudo -u restic -E restic -r sftp:192.168.122.17:/bkup/bkup1_1 backup ./rawfiles
repository 5a451231 opened (version 2, compression level auto)
unable to open cache: mkdir /home/user01/.cache: permission denied
using parent snapshot 289cd96b
[0:00] 100.00% 2 / 2 index files loaded
Files: 2 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 300.022 MiB (300.034 MiB stored)
processed 3 files, 500.000 MiB in 0:03
snapshot d40281ed saved
$ mkdir ./restored
$ cd ./restored
$ sudo -u restic -E restic -r sftp:bkup:/bkup/bkup1_1 restore latest --target ./
repository 5a451231 opened (version 2, compression level auto)
unable to open cache: mkdir /home/user01/.cache: permission denied
[0:00] 100.00% 3 / 3 index files loaded
restoring snapshot d40281ed of [/tmp2/rawfiles] at 2026-01-12 22:51:54.267367542 +0900 JST by restic@deb13 to ./
ignoring error for /rawfiles/rand_100mb.bin: RemoveNode: remove /tmp2/rawfiles/rand_100mb.bin: permission denied
Summary: Restored 1 / 2 files/dirs (0 B / 0 B) in 0:01, skipped 3 files/dirs 500.000 MiB
Fatal: There were 1 errors
$ ls -al ./rawfiles/
total 512012
drwxrwxr-x 2 restic restic 4096 Jan 12 22:43 .
drwxrwxr-x 3 restic restic 4096 Jan 12 22:53 ..
lrwxrwxrwx 1 restic restic 28 Jan 12 18:55 rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
-r--r--r-- 1 restic restic 157286400 Jan 12 22:43 rand_150mb_testuser_440.bin
-rwx---r-- 1 restic restic 157286400 Jan 12 22:43 rand_150mb_testuser_700.bin
-rw-rw-r-- 1 restic restic 209715200 Jan 12 18:40 rand_200mb.bin
ありゃ。
権限は保持されているようですが、持ち主がresticにすり替わっちゃいましたね。
chatgpt曰く、「ローカルでroot権限持たせて実行させないと、ファイル持ってきた後に、元ユーザの権限付与ができないじゃん」とのこと。
あー、まぁそりゃそうか。。
クライアント側ではrootで動かす。
サーバアクセスはresticユーザで、、というのが修正案です。
。。が、実装で微妙にハマりました。。
そもそもサーバアクセスで使うアカウントはどこで制御するかというと、、レポジトリ指定で一緒に、っぽいです。
環境変数型で行くなら、RESTIC_REPOSITORY
コマンドラインで叩くなら、-rの部分。
ここを、こんなふうに、<サーバアクセスに使うユーザ@>"を差し込みます。
export RESTIC_REPOSITORY="sftp:restic@bkup:/bkup/bkup1_1"
で、sshの鍵なんですが、、
最初なんかトラブって、パスワードログインにフォールバックしてしまう、、という事象を引いていました。
鍵の位置変えたりあれこれ、、しているうちに、最初の設定(/home/restic/.ssh)の指定でOKな状態になったのですが、、何だったんだろう、、
キャッシュも消してみましたが、再発せず。
権限設定?とも思いましたが、ssh -iで手で叩いても異常はないし。
まぁ、、記憶だけしておきます。
あらためて、root権限取ってのrestore。
$ ls -al ./rawfiles/
total 512008
drwxrwxr-x 2 user01 user01 4096 Jan 12 22:43 .
drwxrwxr-x 3 restic restic 4096 Jan 12 23:48 ..
lrwxrwxrwx 1 user01 user01 28 Jan 12 18:55 rand_100mb.bin -> ../rawfiles02/rand_100mb.bin
-r--r--r-- 1 2000 2000 157286400 Jan 12 22:43 rand_150mb_testuser_440.bin
-rwx---r-- 1 2000 2000 157286400 Jan 12 22:43 rand_150mb_testuser_700.bin
-rw-rw-r-- 1 user01 user01 209715200 Jan 12 18:40 rand_200mb.bin```
はい。
権限保持できるようになりましたね。
バックアップ時点でroot権限使う必要はないようです。
バックアップ対象と、転送用権限(restic)の強弱は別途丁寧に考えるものとします。
2. レポジトリのお掃除
2.1. forgetとprune
サーバ側のサイズが想定通り縮むか、見てみましょう。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 init
created restic repository ef769efb09 at sftp:restic@bkup:/bkup/bkup2_1
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
$ dd if=/dev/random of=./rawfiles/rand_100mb.bin bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.219494 s, 478 MB/s
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 backup ./rawfiles
repository ef769efb opened (version 2, compression level auto)
created new cache in /home/user01/.cache/restic
no parent snapshot found, will read all files
[0:00] 0 index files loaded
Files: 1 new, 0 changed, 0 unmodified
Dirs: 1 new, 0 changed, 0 unmodified
Added to the repository: 100.005 MiB (100.011 MiB stored)
processed 1 files, 100.000 MiB in 0:01
snapshot 60825f8d saved
$ dd if=/dev/random of=./rawfiles/rand_200mb.bin bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.433376 s, 484 MB/s
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 backup ./rawfiles
repository ef769efb opened (version 2, compression level auto)
using parent snapshot 60825f8d
[0:00] 100.00% 1 / 1 index files loaded
Files: 1 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 200.014 MiB (200.024 MiB stored)
processed 2 files, 300.000 MiB in 0:02
snapshot 4442ba0a saved
$ rm ./rawfiles/rand_200mb.bin
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 backup ./rawfiles
repository ef769efb opened (version 2, compression level auto)
using parent snapshot 4442ba0a
[0:00] 100.00% 2 / 2 index files loaded
Files: 0 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 382 B (299 B stored)
processed 1 files, 100.000 MiB in 0:01
snapshot d42d3f5d saved
$ dd if=/dev/random of=./rawfiles/rand_400mb.bin bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB, 400 MiB) copied, 0.877482 s, 478 MB/s
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 backup ./rawfiles
repository ef769efb opened (version 2, compression level auto)
using parent snapshot d42d3f5d
[0:00] 100.00% 3 / 3 index files loaded
Files: 1 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 400.023 MiB (400.044 MiB stored)
processed 2 files, 500.000 MiB in 0:04
snapshot 0adac4a9 saved
$ ssh bkup du -sh /bkup/bkup2_1
702M /bkup/bkup2_1
200MBは、2つ目のスナップショットで作成、3つめで削除です。
2つ目のスナップショットをforgetして、pruneすれば、200MBが開くはずです。
まずforeget。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 snapshots
repository ef769efb opened (version 2, compression level auto)
ID Time Host Tags Paths Size
----------------------------------------------------------------------------------
60825f8d 2026-01-13 00:08:51 deb13 /tmp2/rawfiles 100.000 MiB
4442ba0a 2026-01-13 00:09:14 deb13 /tmp2/rawfiles 300.000 MiB
d42d3f5d 2026-01-13 00:09:28 deb13 /tmp2/rawfiles 100.000 MiB
0adac4a9 2026-01-13 00:09:41 deb13 /tmp2/rawfiles 500.000 MiB
----------------------------------------------------------------------------------
4 snapshots
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 forget 4442ba0a
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 files deleted
$ ssh bkup du -sh /bkup/bkup2_1
702M /bkup/bkup2_1
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 snapshots
repository ef769efb opened (version 2, compression level auto)
ID Time Host Tags Paths Size
----------------------------------------------------------------------------------
60825f8d 2026-01-13 00:08:51 deb13 /tmp2/rawfiles 100.000 MiB
d42d3f5d 2026-01-13 00:09:28 deb13 /tmp2/rawfiles 100.000 MiB
0adac4a9 2026-01-13 00:09:41 deb13 /tmp2/rawfiles 500.000 MiB
----------------------------------------------------------------------------------
3 snapshots
で、prune。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 prune
repository ef769efb opened (version 2, compression level auto)
loading indexes...
[0:00] 100.00% 4 / 4 index files loaded
loading all snapshots...
finding data that is still in use for 3 snapshots
[0:00] 100.00% 3 / 3 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00% 46 / 46 packs processed
to repack: 0 blobs / 0 B
this removes: 0 blobs / 0 B
to delete: 142 blobs / 200.018 MiB
total prune: 142 blobs / 200.018 MiB
remaining: 349 blobs / 500.041 MiB
unused size after prune: 0 B (0.00% of remaining size)
rebuilding index
[0:00] 100.00% 4 / 4 indexes processed
[0:00] 100.00% 4 / 4 old indexes deleted
removing 13 old packs
[0:00] 100.00% 13 / 13 files deleted
done
$ ssh bkup du -sh /bkup/bkup2_1
502M /bkup/bkup2_1
はい、縮みましたね。
現状は特にいやらしいパターンは思いつかないので、今回はここまで。
2.2. 過去のバージョン群から特定のファイルを消す
前回の記事にコメントで頂いた方法があったので、試してみます。
そもそもresticにはrewriteという機能があり、スナップショット群からファイルを消すことができるとのこと。
ただし、forgetと同じく、最後にpruneが必要。
2.2.1. 失敗パターン
結論を言うと、--forgetオプションをつけ忘れたので、想定通り動きませんでした。。
せっかくなので手順をのこすと。
まず、rewrite。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 rewrite --exclude ./rawfiles/rand_100mb.bin
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 index files loaded
snapshot d42d3f5d of [/tmp2/rawfiles] at 2026-01-13 00:09:28.339964366 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot 2ec9fa6c
snapshot 0adac4a9 of [/tmp2/rawfiles] at 2026-01-13 00:09:41.552244672 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot 9d145dfd
snapshot 60825f8d of [/tmp2/rawfiles] at 2026-01-13 00:08:51.949574683 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot cf4021ec
modified 3 snapshots
$ ssh bkup du -sh /bkup/bkup2_1
502M /bkup/bkup2_1
で、prune,,,ができない。。?
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 prune
repository ef769efb opened (version 2, compression level auto)
repo already locked, waiting up to 0s for the lock
unable to create lock in backend: repository is already locked by PID 3983 on deb13 by root (UID 0, GID 0)
lock was created at 2026-01-13 00:40:37 (3m21.99592998s ago)
storage ID a922c45b
the `unlock` command can be used to remove stale locks
なんでも、重い処理だから、時間かかることがあるとか。
..でも、ここで指定されているpid3983は、クライアントにもサーバにもいないなぁ。。
chatgpt曰く「5分くらいまて」とのことですが、10分待っても反応なし。
手で外します。
で、prune。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 unlock
repository ef769efb opened (version 2, compression level auto)
successfully removed 1 locks
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 prune
repository ef769efb opened (version 2, compression level auto)
loading indexes...
[0:00] 100.00% 4 / 4 index files loaded
loading all snapshots...
finding data that is still in use for 6 snapshots
[0:00] 100.00% 6 / 6 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00% 36 / 36 packs processed
to repack: 0 blobs / 0 B
this removes: 0 blobs / 0 B
to delete: 0 blobs / 0 B
total prune: 0 blobs / 0 B
remaining: 354 blobs / 500.051 MiB
unused size after prune: 0 B (0.00% of remaining size)
done
user01@deb13:/tmp2$ ssh bkup du -sh /bkup/bkup2_1
502M /bkup/bkup2_1
ん?縮まないな。。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 snapshots
repository ef769efb opened (version 2, compression level auto)
ID Time Host Tags Paths Size
----------------------------------------------------------------------------------
cf4021ec 2026-01-13 00:08:51 deb13 rewrite /tmp2/rawfiles 0 B
60825f8d 2026-01-13 00:08:51 deb13 /tmp2/rawfiles 100.000 MiB
2ec9fa6c 2026-01-13 00:09:28 deb13 rewrite /tmp2/rawfiles 0 B
d42d3f5d 2026-01-13 00:09:28 deb13 /tmp2/rawfiles 100.000 MiB
0adac4a9 2026-01-13 00:09:41 deb13 /tmp2/rawfiles 500.000 MiB
9d145dfd 2026-01-13 00:09:41 deb13 rewrite /tmp2/rawfiles 400.000 MiB
----------------------------------------------------------------------------------
6 snapshots
rewrite前のスナップショットも残しちゃっているみたいですね。
(ここで気が付きましたが、Tagってのもあるんだ。便利だな。。)
ということで、やり直し。。。
rewrite付きのsnapshowを消してやり直します。
早速、Tag使ってみようとしましたが、forgetでは使えないみたい。
ちょっとひねって使います。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 snapshots --tag rewrite --json | jq -r '.[].short_id' | while read sid; do sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 forget $sid; done
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 files deleted
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 files deleted
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 files deleted
さて、やり直し。
2.2.2. 成功パターン
forgetオプション付きで、正しい方法で実行します。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 rewrite --exclude ./rawfiles/rand_100mb.bin --forget
create exclusive lock for repository
repository ef769efb opened (version 2, compression level auto)
[0:00] 100.00% 4 / 4 index files loaded
snapshot d42d3f5d of [/tmp2/rawfiles] at 2026-01-13 00:09:28.339964366 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot 3ccad2b5
removed old snapshot d42d3f5d
snapshot 0adac4a9 of [/tmp2/rawfiles] at 2026-01-13 00:09:41.552244672 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot 047f940e
removed old snapshot 0adac4a9
snapshot 60825f8d of [/tmp2/rawfiles] at 2026-01-13 00:08:51.949574683 +0900 JST by root@deb13
excluding /rawfiles/rand_100mb.bin
saved new snapshot d5cd0c25
removed old snapshot 60825f8d
modified 3 snapshots
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 snapshots
repository ef769efb opened (version 2, compression level auto)
ID Time Host Tags Paths Size
----------------------------------------------------------------------------------
d5cd0c25 2026-01-13 00:08:51 deb13 /tmp2/rawfiles 0 B
3ccad2b5 2026-01-13 00:09:28 deb13 /tmp2/rawfiles 0 B
047f940e 2026-01-13 00:09:41 deb13 /tmp2/rawfiles 400.000 MiB
----------------------------------------------------------------------------------
さて、prune。
$ ssh bkup du -sh /bkup/bkup2_1
502M /bkup/bkup2_1
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_1 prune
repository ef769efb opened (version 2, compression level auto)
loading indexes...
[0:00] 100.00% 4 / 4 index files loaded
loading all snapshots...
finding data that is still in use for 3 snapshots
[0:00] 100.00% 3 / 3 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00% 36 / 36 packs processed
to repack: 0 blobs / 0 B
this removes: 0 blobs / 0 B
to delete: 74 blobs / 100.020 MiB
total prune: 74 blobs / 100.020 MiB
remaining: 280 blobs / 400.031 MiB
unused size after prune: 0 B (0.00% of remaining size)
rebuilding index
[0:00] 100.00% 4 / 4 indexes processed
[0:00] 100.00% 4 / 4 old indexes deleted
removing 9 old packs
[0:00] 100.00% 9 / 9 files deleted
done
$ ssh bkup du -sh /bkup/bkup2_1
402M /bkup/bkup2_1
はい。
想定通り消せましたね。
ということで、重たいファイルを消し去る場合はrewrite + pruneで良い感じで行けそうですね。
3. 処理負荷
3.1. 負荷を見るツールの導入
いくつかあるようなのですが、、これで行けそうです。
cpu, memory, disk ioを見るもの。
$ sudo apt install pcp
$ dstat -t -c -m -n -d 1
----system---- ----total-usage---- ------memory-usage----- -net/total- -dsk/total-
time |usr sys idl wai stl| used free buf cach| recv send| read writ
13-01 08:03:19| | 129M 1404M 29M 386M| |
13-01 08:03:20| 0 0 99 0 0| 129M 1404M 29M 386M|5063B 5875B| 0 0
13-01 08:03:21| 1 0 99 0 0| 129M 1404M 29M 386M|2731B 2896B| 0 0
13-01 08:03:22| 0 1 99 0 0| 129M 1404M 29M 386M| 66B 350B| 0 0
あとは、一時ファイルの手元書き込みで膨れたりしないか見る、という意味で。
$ while true; do date; df -h | grep -v tmpfs; echo; sleep 1; done
この2つを、クライアントとサーバの両方で走らせておきましょうか。
3.2. 5GBファイルのバックアップ試験
こんな条件でやってみましょう。
$ dd if=/dev/random of=./rawfiles/rand_5gb.bin bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 14.1339 s, 371 MB/s
$ ls -alh ./rawfiles/
total 4.9G
drwxrwxr-x 2 user01 user01 4.0K Jan 13 08:30 .
drwxrwxrwx 4 user01 user01 4.0K Jan 13 08:26 ..
-rw-rw-r-- 1 user01 user01 4.9G Jan 13 08:30 rand_5gb.bin
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 init
created restic repository a86a8b1d03 at sftp:restic@bkup:/bkup/bkup2_2
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
$ ssh bkup du -sh /bkup/bkup2_2
1.1M /bkup/bkup2_2
08:33:30に開始。
終了は08:34:17。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 backup ./rawfiles
repository a86a8b1d opened (version 2, compression level auto)
created new cache in /home/user01/.cache/restic
no parent snapshot found, will read all files
[0:00] 0 index files loaded
Files: 1 new, 0 changed, 0 unmodified
Dirs: 1 new, 0 changed, 0 unmodified
Added to the repository: 4.883 GiB (4.883 GiB stored)
processed 1 files, 4.883 GiB in 0:46
snapshot 46fe3bdc saved
同一マシン上の仮想マシン感だから、あっという間ですね。
で、ざっくりと結果を見ると。
左がクライアント、右がサーバです。
クライアント側は、diskはread, ネットワークはsendがメイン。
cpuも結構使う。
diskで数百kの書き込みがたまにあるのは、、何だろ。
細切れにしたデータを一次保存とかしてるんですかね。
networkでresvがあるのは、普通に確認応答でしょうね。
サーバ側はIOは逆。
diskのリードがない、cpu利用率がクライアントよりはだいぶ軽い、という感じ。
おおよそ想像通り、クライアントに頑張らせる仕組みのようですね。
通信量は、ざっくり5G。
あー、これは細切れにしたファイルが重複する場合で見てみたほうがいいですね。
おそらくクライアント側で重複チェックして飛ばさない、という処理をするんだと思いますが、、もう一回やってみましょう。
で、disk総量はこんなです。
素直に、サーバ側に5Gが溜まっていく感じですね。
細切れデータがつどつどクライアントに書き込まれているのかもですが、総量でみて気がつく程度ではなし、と。
3.3. 5GBファイル + 2GBのバックアップ試験
細切れデータが重複するように、いじって見ます。
条件とバックアップ状態は3.2.をそのまま継続。
$ dd if=/dev/random of=./rawfiles/rand_2gb.bin bs=1M count=2000
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 4.58989 s, 457 MB/s
$ cat ./rawfiles/rand_2gb.bin ./rawfiles/rand_5gb.bin > ./rawfiles/rand_7gb.bin
$ rm ./rawfiles/rand_2gb.bin
$ ls -alh ./rawfiles/
total 12G
drwxrwxr-x 2 user01 user01 4.0K Jan 13 08:47 .
drwxrwxrwx 4 user01 user01 4.0K Jan 13 08:26 ..
-rw-rw-r-- 1 user01 user01 4.9G Jan 13 08:30 rand_5gb.bin
-rw-rw-r-- 1 user01 user01 6.9G Jan 13 08:47 rand_7gb.bin
では行ってみましょう。
08:49:50に開始。
08:50:28に終了。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 backup ./rawfiles
[sudo] password for user01:
repository a86a8b1d opened (version 2, compression level auto)
using parent snapshot 46fe3bdc
[0:00] 100.00% 1 / 1 index files loaded
Files: 1 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 1.956 GiB (1.956 GiB stored)
processed 2 files, 11.719 GiB in 0:35
snapshot f46cb0d3 saved
所要時間が、5Gの初回転送が47秒。
今回が38秒。
転送自体の量は削るでしょうけど、、細切れ処理とかは一回全部やるから時間かかるのでは、、と思ったんだけど、、
見た感じ、処理が08:50:10の前と後で2段回あるように見えますね。
前半は、diskIOが、、2G。後半が、5G弱。
。。rand_5Gの方はチェックすらせず、7Gの方を頭から読んでいった、って感じですね。
キャッシュが、"rand_5Gは内容変わってないから見なくていいよ”という処理をしているのかな。。
ネットワークはわかりやすく、新規の2G分は転送。5G文は転送なし(キープアライブの最低限のやり取りだけやったのかな、、って感じ)。
3.4. 5GBファイル + 2GBのバックアップ試験 キャッシュなし
rand_5gのチェックがスルーされているっぽい部分を、もうちょっとふかぼりしてみましょう。
まず、3.3.の処理をなかったことにします。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 forget latest
repository a86a8b1d opened (version 2, compression level auto)
[0:00] 100.00% 1 / 1 files deleted
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 prune
repository a86a8b1d opened (version 2, compression level auto)
loading indexes...
[0:00] 100.00% 2 / 2 index files loaded
loading all snapshots...
finding data that is still in use for 1 snapshots
[0:00] 100.00% 1 / 1 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00% 416 / 416 packs processed
to repack: 0 blobs / 0 B
this removes: 0 blobs / 0 B
to delete: 1364 blobs / 1.956 GiB
total prune: 1364 blobs / 1.956 GiB
remaining: 3370 blobs / 4.883 GiB
unused size after prune: 0 B (0.00% of remaining size)
rebuilding index
[0:00] 100.00% 2 / 2 indexes processed
[0:00] 100.00% 2 / 2 old indexes deleted
removing 120 old packs
[0:00] 100.00% 120 / 120 files deleted
done
$ sudo rm -rf /home/user01/.cache/restic/
キャッシュの場所ですが、sudoで-Eはしてますが、-Hはしてなかったので、コマンド実行したuser01の下にキャッシュをおいちゃってたみたいです。
では、もう一回。
09:01:30スタート
09:02:06終了。
動きは変わらずです。
$ sudo -E restic -r sftp:restic@bkup:/bkup/bkup2_2 backup ./rawfiles
repository a86a8b1d opened (version 2, compression level auto)
created new cache in /home/user01/.cache/restic
using parent snapshot 46fe3bdc
[0:00] 100.00% 1 / 1 index files loaded
Files: 1 new, 0 changed, 1 unmodified
Dirs: 0 new, 1 changed, 0 unmodified
Added to the repository: 1.956 GiB (1.956 GiB stored)
processed 2 files, 11.719 GiB in 0:35
snapshot 1b7cc9c8 saved
ファイルの同一性は、ローカルキャッシュ使って判別しているわけではなさそうですね。
サーバ側にタイムスタンプとか持ってるのかな。。
もうちょっと色々いじれば特定できるかもですが、現状その必要性は感じないので、今日はこんなところでやめときましょうか。
その他 レポジトリをまるごと削除するには
検証の際は、サーバ側で、レポジトリ用に作られたディレクトリをまるごと消しちゃってました。
一方、正しい方法あるんかなと、、
ないそうです。
https://github.com/restic/restic/issues/1118?utm_source=chatgpt.com
まとめ
特殊ファイルの扱いやデータ転送時の負荷は、概ね、素直に思う通りの感じでした。
sudo権限ちゃんとしないと行けない、、などの学びはあったので、それはそれで注意します。
負荷がクライアントのほうが重いというのが、resticの特徴なのか、Baculaあたりもエージェント頑張らせる仕組みだったりするのか?
当面試す機会はなさそうですが、頭の片隅にはおいておこうと思います。
今日はこんなところで。




