yeah, i recommend hetzner. the filesystem is zfs with automated and manual snapshots.
using port = 23, enables file verification when using sftp and a simple ssh command line.
and not well documented, but as seen from terminal, there is support for rclone + restic, which i know you use
| Available as server side backend: |
| borg |
| rsync |
| scp |
| sftp |
| rclone serve restic --stdio |
then combine that with a hetzner cloud vm in the same region.
i have a cheap linux vm, which is setup as a veeam backup and replication backup repository.
which used the smb feature of the storagebox.
Animes/Gintama/Season 7/Gintama - S07E27 - Style Goes Out of Fashion the Moment It's Put Into Words + There Are Two Types of People In This World - Those Who Yell Out Their Attack Names, and Those Who Don't.mp4: Failed to copy: Update Create failed: sftp: "Bad message" (SSH_FX_BAD_MESSAGE)
I think it's because of the text length, how can I correct that ?
With Hetzner and in my country in Canada I get the 0% VAT so it's basically 2€/TO so it's incredible, fast uploads/downloads and unlimited transfers if you use their machines + sub-users so, never seen better.
Unless server side move is supported then names re-encoding can be done in place. But this is another story. I think with pretty much full remotes I would think twice before going this route.
action_policy = epall and search_policy = ff are the default so I think the rclone config redacted don't show them as it's correct on the config edit (I checked).
I can see all my files as before when running rclone ls HetznerCloud:
yeap. Still I always prefer to be explicit and future proof (if somebody changes it one day)
So now scary part. You can use Hetzner snapshots to create option to roll back everything if something goes wrong. Should not but who knows... I have never done it with union before.
I'll do it without snapshot as I think I don't have enough space to store it.
I don't quite understand the --dry-run but as I see it just say that he can move it whithout doing it :
2025/01/30 18:40:49 NOTICE: Animes/Concrete Revolutio - Superhuman Phantasmagoria - {tvdb=299491}/Season 1/Concrete Revolutio S01E13.mkv: Skipped move as --dry-run is set (size 925.894Mi)
2025/01/30 18:40:49 NOTICE: Animes/Concrete Revolutio - Superhuman Phantasmagoria - {tvdb=299491}/Season 1/Concrete Revolutio S01E13.fr.srt: Skipped move as --dry-run is set (size 23.790Ki)
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 1", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 2", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 3", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 4", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 5", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Added delayed dir = "Séries/Community/Season 6", newDst=<nil>
2025/01/30 18:40:49 DEBUG : Animes/Code Lyoko/Season 3/Code Lyoko - S03E01 - Straight to Heart.mp4: Need to transfer - File not found at Destination
I think it's all good to go now without it.
rclone config redacted
[Hetzner]
type = sftp
host = XXX
user = XXX
port = 23
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
[Hetzner1]
type = sftp
host = XXX
user = XXX
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
port = 23
[Hetzner2]
type = sftp
host = XXX
user = XXX
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
port = 23
[Hetzner3]
type = sftp
host = XXX
user = XXX
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
port = 23
[Hetzner4]
type = sftp
host = XXX
user = XXX
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
port = 23
[Hetzner5]
type = sftp
host = XXX
user = XXX
pass = XXX
shell_type = unix
md5sum_command = md5 -r
sha1sum_command = sha1 -r
port = 23
[HetznerCloud]
type = crypt
remote = HetznerUnion:
password = XXX
[HetznerCloudNew]
type = crypt
remote = HetznerUnionNew:
password = XXX
filename_encoding = base32768
[HetznerUnion]
type = union
upstreams = Hetzner5:PMS Hetzner4:PMS Hetzner3:PMS Hetzner2:PMS Hetzner1:PMS Hetzner:PMS
create_policy = mfs
[HetznerUnionNew]
type = union
upstreams = Hetzner5:PMSNew Hetzner4:PMSNew Hetzner3:PMSNew Hetzner2:PMSNew Hetzner1:PMSNew Hetzner:PMSNew
create_policy = mfs