This adds a test with a failed upload.
The failed upload is done in parallel, so (at least) one of the uploads succeeeds and one upload fails.
The backup then errors, but a subsequent backup continues without errors and creates a synthetic filelist.
Also refactored the DeterministicErrorBackend to not use magic strings.
And made it actually deterministic.
This fixes that the recreate will move unused blocks into the `DeletedBlock` table after the database has been recreated.
Due to this, the disruption test can now be verified.