If you have ZFS already. Use that. It will use almost no overhead, and is very solid. Use RSYNC to always have the newest data backed up.
ZFS is great for more reasons than for snapshotting. It is also the filesystem with best integrity monitoring.
All storages and databases gets corrupt sectors from time to time. This is why you in a high availability environment with files needing very high integrity, uses raid. Using ZFS with only one disk also has the advantage, that compared to almost any other file system, it discovers corrupt files - even in snapshots - and try to recover it from its mirror (RAID). If you do not have that, it will clearly tell you that you can recover the specific file(s) from a backup. Litterally just transfering the files from the backup, to the destination it shows you with any command, like for example SCP or RSYNC. Then you runs SCRUB again (sometimes twice), verifies there is no more known file permanent errors, and clears the status. Use ZFS for highest possible accurate file integrity indicator, also in snapshots.
Use daily:
sudo zpool status -v
ZFS runs routinely SCRUBs, but you can initiate them if needed by:
sudo zpool scrub
If you need to recover files, it will show you the excact files in a list under permanent damaged files.
Use that list to recover the files from your backup.
When you are certian you have recovered all files and run SCRUB, and there is no more permanent known files.
pool: mypool
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
scan: scrub in progress since Mon Apr 17 13:10:23 2023
228G scanned at 350M/s, 51.6G issued at 79.3M/s, 296G total
0B repaired, 17.44% done, 00:52:36 to go
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mydev ONLINE 0 0 4
errors: Permanent errors have been detected in the following files:
mypool/containers/containername:/rootfs/var/www/nextcloud/data/userid/files/somepicture.jpg
mypool/containers/containername:/rootfs/etc/apache2/somefile.conf
Errors like these are references to files no longer either existing, or has been recovered and not recorded yet. These can be ignored:
pool: mypool
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
scan: scrub repaired 0B in 01:20:53 with 0 errors on Thu Apr 13 14:03:31 2023
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mydev ONLINE 0 0 0
errors: Permanent errors have been detected in the following files:
<0x19b83>:<0x437a>
<0x19b99>:<0x44a6>
<0x19ac0>:<0x10bfc>
<0x199f4>:<0x782>
<0x199fa>:<0x3576>
You can clear your pool status with
sudo zpool clear poolname