Proposal: Use sync/rsync commands to restore backups
## Proposal During backup, the corresponding sync/rsync method is used depending on the storage provider (`s3cmd sync`, `aws s3 sync` or `gsutil rsync`), this enables the usage of features provided on each provider/CLI to speed up/guarantee the process. ### s3cmd ``` Synchronize a directory tree to S3 (checks files freshness using size and md5 checksum, unless overridden by options, see below) s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] or s3://BUCKET[/PREFIX] LOCAL_DIR or s3://BUCKET[/PREFIX] s3://BUCKET[/PREFIX] ``` ### aws ``` sync <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri> ``` ### gsutil ``` The gsutil rsync command makes the contents under dst_url the same as the contents under src_url, by copying any missing files/objects (or those whose data has changed), and (if the -d option is specified) deleting any extra files/objects. src_url must specify a directory, bucket, or bucket subdirectory. For example, to make gs://mybucket/data match the contents of the local directory "data" you could do: gsutil rsync -d data gs://mybucket/data To recurse into directories use the -r option: gsutil rsync -d -r data gs://mybucket/data To copy only new/changed files without deleting extra files from gs://mybucket/data leave off the -d option: gsutil rsync -r data gs://mybucket/data If you have a large number of objects to synchronize you might want to use the gsutil -m option, to perform parallel (multi-threaded/multi-processing) synchronization: gsutil -m rsync -d -r data gs://mybucket/data ``` This same process can be used to restore a backup, once the bucket is backup in `tmp-backups`, instead of invoking [cleanup](https://gitlab.com/gitlab-org/build/CNG/-/blob/15-0-stable/gitlab-toolbox/scripts/lib/object_storage_backup.rb#L77), we can directly call [restore_from_backup](https://gitlab.com/gitlab-org/build/CNG/-/blob/15-0-stable/gitlab-toolbox/scripts/lib/object_storage_backup.rb#L146-161), but instead of looping for every single file, rely on `sync/rsync` and upload the missing/changed files, or remove the non-existing ones. This might work in both scenarios where we are restoring to a freshly installed instance, or recovering a previous backup on an existing instance.
issue