Duplicati version: 2.0.6.3_beta_2021-06-17
OS: Windows 10 21H1, Ubuntu 20.04, Zorin 15.3
I’ve been looking to add some additional verification steps to my regular Duplicati backup schedule to warn of impending problems and allow time to correct them before a restore is needed. I don’t have enough space to do a full restore of all clients, even if they were done one at a time, so I’ve been searching for something that will do some more involved integrity checks using backend data a few times a year.
I recently learned about DuplicatiVerify.py
and the --upload-verification-file
option from this post, which seem to accomplish what I’m looking for. If I’m understanding things correctly, the verification file, duplicati-verification.json,
is a list of all Duplicati files that the client is expecting to be present on the backend. Running DuplicatiVerify.py
against a storage location on the backend verifies that these files exist and checks if they are intact based on their hashes.
I added the --upload-verification-file
option to all of my existing client backup configurations, ran a full backup on each client, then ran DuplicatiVerify.py
on each client’s storage location on the backend server. The results identified several missing files, including many dblock
files, for all clients but one. None of the clients have been reporting errors through their Duplicati email reports, so I was intrigued but not yet alarmed. I investigated further and saw that some reported missing files were dlist
files that were outside of my usual one month retention time, which, by my understanding, should be missing since they’ve expired. This made me suspicion that most of these missing files were deleted intentionally based on their client’s retention policy.
I remembered that the one client with no missing files (Windows 10) recently had its storage location moved, and it should not have had any backups expire yet. I then performed the following test using this client to get some additional information.
- Ran a full backup on the client.
- Confirmed no errors were reported by
DuplicatiVerify.py
on the client’s storage location on the backend server. - As five backups for the client were present on the backend, changed
--keep-time=1M
to--keep-versions=5
in the client’s backup config to force the oldest backup to expire. - Ran another full backup and saw that the oldest
dlist
file was deleted as expected. - Ran
DuplicatiVerify.py
on the backend, which reported that the expireddlist
file was missing. - Confirmed that the expired
dlist
file was present induplicati-verification.json
.
Based on my understanding, these files should not be reported as missing since they were deleted intentionally due to retention policy. The duplicati-verification.json
file uploaded by clients seems to be including files that have expired.
Please let me know if I’ve misunderstood something or can provide additional information.
Is this expected behavior, and if not, can it be corrected?