Hey, health check is actually a lot more complex than how it sounds on the surface.
Some key points: it’s checking the latest restore point, not the latest file, so if the health check is done on the day a VBK is made, yes it’s just checking the VBK, but if it’s an incremental for example, it will have to read some blocks from the VBK and other incremental files to read all relevant blocks for the restore point.
If there is no corruption detected, it will be a read only operation. However in the event corruption IS detected, Veeam has to trigger some logic, if the VBK has corrupted blocks, it will strike the whole backup chain as corrupt, if an incremental file in the chain (i.e. not the latest incremental) is corrupted, all subsequent points in the chain AND the corrupted incremental file are marked as corrupted. If it’s just the latest file, then just that file is marked as corrupted. There’s also validation against the metadata, not just the blocks themselves.
It also behaves slightly different if you use reverse incremental due to the way the files are structured.
Once Veeam has detected the corruption, upon job completion it fails in an error state and then the job will retry as a separate session in an attempt to fetch the missing data and rebuild the latest restore point, this is key as well, as we’re only checking the validation of the latest restore point, that’s Veeam’s goal, to protect your RPO of your latest backup, we can’t go back in time and fix older points anywhere near as easily, but we have a good chance to fix the latest one.
And as for your other question if the health check stops because VBR goes offline, it has to start again.
For more information read: https://helpcenter.veeam.com/docs/backup/vsphere/backup_health_check.html?ver=110