こんにちは、
restic 0.9に更新したところ、resticが既存のリポジトリのエラーを報告するようになりました(0.8.3で問題なく、アップグレード後に変更されませんでした)。
error for tree e5457a72:
tree e5457a72: file "mail.err": metadata size (1085858) and sum of blob sizes (1085966) do not match
tree e5457a72: file "mail.info": metadata size (8770356) and sum of blob sizes (8770808) do not match
tree e5457a72: file "mail.log": metadata size (8770356) and sum of blob sizes (8770808) do not match
tree e5457a72: file "mail.warn": metadata size (1091226) and sum of blob sizes (1091334) do not match
バックアップの実行中にファイルが変更された可能性があります。
restic version
出力restic 0.9.0 compiled with go1.10.2 on linux/amd64
restic check
ローカルディレクトリとRESTサーバー
Resticは、バックアップの整合性を確保するために何もできないことを理解しています(たとえば、いくつかの依存ファイルのコンテンツが一致しているなど)。
しかし、そのような場合、resticはそれ自身のリポジトリが一貫していることを確認する必要があると確信しています(リポジトリのメタデータはリポジトリのデータと一致する必要があります)。 stat
が呼び出された後、ファイル全体が読み取られる前にファイルに何かが追加された場合、おそらくresticは予想されるファイルサイズまでのみ読み取るか、実際に読み取られたバイト数でメタデータを更新する必要があります。
PS。 おそらく、この問題は0.9で修正されており、新しいスナップショットでは発生しません。
しかし、残念ながらrestic rebuild-index
はそれを修正しません。
私はあなたとまったく同じ問題を@dionorguaで開こうとしてい
私のリポジトリにも同じエラーがあり(以下を参照)、これらはエラーであってはならず、resticはそれを適切に処理する必要があるという感覚を共有してください。 バックアッププロセス中に発生したことを警告する以外に、バックアップソフトウェアがその下で変更されたファイルに対して実行できることは何もありません。 しかし、後でcheck
が実行されたときに、これらはエラーではないはずです。
v0.9.0チェックの結果は、v0.8.3がエラーを報告しないリポジトリで実行されます。
check snapshots, trees and blobs
error for tree c1c7286d:
tree c1c7286d: file "panacea.dat": metadata size (5975885) and sum of blob sizes (5975910) do not match
error for tree 5908dec5:
tree 5908dec5: file "panacea.dat": metadata size (5425341) and sum of blob sizes (5425366) do not match
Fatal: repository contains errors
私は同意します、これは警告であるか、まったく表示されないはずです。 ユーザーができること(またはする必要があること)は何もありません。
これは古いアーカイバコードのバグであり、resticがファイルを読み取っているときにファイルが追加されたときに、リポジトリに間違ったサイズが書き込まれていました。 新しいアーカイバはそれを行わず、他のすべての関数は問題なく機能します(正しいサイズ、つまりファイルチャンクの合計を使用するだけです)。
この問題にどのように対処しますか? これにより、バックアップリポジトリのいくつかで毎週の自動チェックが失敗します。
これが私の「resticcheck」の出力です-私はresticdockerイメージを介してそれを行っています。
...
Digest: sha256:9c851e0ba8a9c20ef853ee507af14c4d87c33661c25136262e97506a1cdc7a57
Status: Image is up to date for restic/restic:latest
ID Date Host Tags Directory
----------------------------------------------------------------------
8eb0175e 2018-02-28 21:01:38 internal-cluster /fisheye
a7848682 2018-03-31 09:28:09 internal-cluster /fisheye
8ad27273 2018-04-30 09:28:09 internal-cluster /fisheye
97d2e914 2018-05-31 09:28:12 internal-cluster /fisheye
96ba1cc7 2018-06-30 09:28:13 internal-cluster /fisheye
23ef9a4b 2018-07-08 09:28:11 internal-cluster /fisheye
76f8e70a 2018-07-09 09:28:12 internal-cluster /fisheye
74d46da4 2018-07-10 09:28:14 internal-cluster /fisheye
a893de2c 2018-07-11 09:28:12 internal-cluster /fisheye
7dbeb6c0 2018-07-12 09:28:13 internal-cluster /fisheye
8df2f318 2018-07-13 09:28:11 internal-cluster /fisheye
e7321bf1 2018-07-14 09:28:13 internal-cluster /fisheye
----------------------------------------------------------------------
12 snapshots
+ restic check
+ sudo -E docker run --rm -e AWS_ACCESS_KEY_ID=**** -e AWS_SECRET_ACCESS_KEY=**** -e RESTIC_PASSWORD=**** -v /mnt/efs/fisheye:/fisheye:ro -h internal-cluster --user root restic/restic -r s3:s3.amazonaws.com/redacted/restic/fisheye check
using temporary cache in /tmp/restic-check-cache-069761908
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
error for tree d93db471:
tree d93db471: file "atlassian-fisheye-2018-07-13.log": metadata size (52139444) and sum of blob sizes (52165018) do not match
error for tree 8d1b1f5f:
tree 8d1b1f5f: file "atlassian-fisheye-2018-04-30.log": metadata size (53418588) and sum of blob sizes (53426968) do not match
Fatal: repository contains errors
それは良い質問です! 1つを除くすべてのリポジトリにエラーが発生しています...チェックステージをすべて無効にすることを検討していますが、これもまた、将来起こりうるリグレッションを検出するための良い方法です。 今後の最善の方法は何かわかりません...
@ fd0 、これは非常に深刻なバグですが、リポジトリを再びサイレントにするための回避策はありますか?
申し訳ありませんが、#1887のチェックを無効にしました。 必要に応じて、コミットを選択できます。
最も参考になるコメント
私は同意します、これは警告であるか、まったく表示されないはずです。 ユーザーができること(またはする必要があること)は何もありません。
これは古いアーカイバコードのバグであり、resticがファイルを読み取っているときにファイルが追加されたときに、リポジトリに間違ったサイズが書き込まれていました。 新しいアーカイバはそれを行わず、他のすべての関数は問題なく機能します(正しいサイズ、つまりファイルチャンクの合計を使用するだけです)。