0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

続・Resticを使ってみての色々

0
Last updated at Posted at 2026-01-13

背景

前回力尽きて積み残しになった検証事項をさばいておこうかと思います。

  1. 特殊な状態のファイルはどうなる?
  2. レポジトリのお掃除
  3. 処理負荷

ラストは追加ですね。
他の方法と比較しないと分かりにくですが。
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

同一マシン上の仮想マシン感だから、あっという間ですね。

で、ざっくりと結果を見ると。
左がクライアント、右がサーバです。

20260113_08h35m36s_grim.png

クライアント側は、diskはread, ネットワークはsendがメイン。
cpuも結構使う。
diskで数百kの書き込みがたまにあるのは、、何だろ。
細切れにしたデータを一次保存とかしてるんですかね。
networkでresvがあるのは、普通に確認応答でしょうね。

サーバ側はIOは逆。
diskのリードがない、cpu利用率がクライアントよりはだいぶ軽い、という感じ。

おおよそ想像通り、クライアントに頑張らせる仕組みのようですね。
通信量は、ざっくり5G。
あー、これは細切れにしたファイルが重複する場合で見てみたほうがいいですね。
おそらくクライアント側で重複チェックして飛ばさない、という処理をするんだと思いますが、、もう一回やってみましょう。

で、disk総量はこんなです。

20260113_08h42m00s_grim.png

20260113_08h42m30s_grim.png

20260113_08h43m18s_grim.png

素直に、サーバ側に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秒。
転送自体の量は削るでしょうけど、、細切れ処理とかは一回全部やるから時間かかるのでは、、と思ったんだけど、、

20260113_08h52m44s_grim.png

見た感じ、処理が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あたりもエージェント頑張らせる仕組みだったりするのか?
当面試す機会はなさそうですが、頭の片隅にはおいておこうと思います。

今日はこんなところで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?