Cloud Backup Solutions for Europeans

I have been making an effort to organize my file system, and as a result I want to finally add the last “1” in the 3-2-1 backup scheme.

I was looking at Blackblaze but $12 for 2TB is too expensive for me. This is for B2, which I guess is what makes it so costly). Their ‘computer backup’ product seems a bit contrived and doesn’t give the user much control.

Hetzner seems to offer 5TB for ~13€ per month with their Storage Box BX21. Does anyone have opinions about this? I will want to use borg or restic as backing up files in clear is a no-go for me. I will need to shave off some data, but I think I can make it work with 5TB, and around 150€ per year is acceptable.

Extra: Does anyone have any suggestions for backing up and sharing dotfiles between computers? My idea is to have a sort of solution that syncs between computers, even if manually. The goal is that now that I have my Home storage centralized in my server, served through NFS, I could quickly setup my environment and get to work no matter the machine I’m on

If you really want cheap, then make your offsite backup an encrypted hard drive stored at the house of a friend/family member. It’s what I do

3 Likes

I’ve been backing up my stuff to a Hetzner Storage Box via borg and restic for the last five years. It works beautifully.

The first three years I used borg, which worked fine until it didn’t. At some point it got confused and couldn’t add new snapshots any more. It could still read old ones, though, and seemed not to have lost actual data.

Nevertheless, I switched to restic. So far, this has been working without issue.

Never had any trouble with the StorageBox itself.

1 Like

anything that can speak the S3 api and is hosted in europe is probably a good start. or you have a backup local and just rclone it to the remote site. Then you have a ton more options. :slight_smile:

also look into resticprofile. It is the best restic frontend I have found so far. e.g. it can handle “create timers to regularly run my backup” cross platform. Ask @paperdigits about the fun :wink:

[default]
  repository = "/restic-repo1"
  password-file = "/etc/resticprofile/local.key"


  [default.backup]
    exclude-caches = true
    one-file-system = true
    schedule-permission = "system"
    schedule-lock-wait = "2h"

  [default.retention]
    keep-last = 3
    keep-hourly = 5
    keep-daily = 1
    keep-weekly = 10
    keep-monthly = 30
    keep-yearly = 1
    keep-within = "3h"
    keep-tag = [ "forever" ]
    compact = true
    prune = true
    # path can be a boolean ('true' meaning to copy source paths from 'backup') 
    # or a path or list of paths to use instead. Default is `true` if not specified.
    #path = []
    # tag can be a boolean ('true' meaning to copy tag set from 'backup') 
    # or a custom set of tags. Default is 'false', meaning that tags are NOT used.
    tag = true
    # host can be a boolean ('true' meaning current hostname) or a string to specify a different hostname
    host = true

  [default.forget]
    keep-last = 3
    keep-hourly = 5
    keep-daily = 1
    keep-weekly = 10
    keep-monthly = 30
    keep-yearly = 1
    keep-within = "3h"
    keep-tag = [ "forever" ]
    compact = true
    prune = true
    # path can be a boolean ('true' meaning to copy source paths from 'backup') 
    # or a path or list of paths to use instead. Default is `true` if not specified.
    #path = []
    # tag can be a boolean ('true' meaning to copy tag set from 'backup') 
    # or a custom set of tags. Default is 'false', meaning that tags are NOT used.
    tag = true
    # host can be a boolean ('true' meaning current hostname) or a string to specify a different hostname
    host = true

[root]
  inherit = "default"
  [root.backup]
    run-before = [
      '/etc/resticprofile/dump-rpm-packagelist',
    ]
    exclude = [
      '/restic-repo1',
      '/var/cache',
      '/root/.cache/restic/',
      '/var/tmp/zypp*',
      '/var/',
    ]
    source = [ "/root", "/etc", "/srv", "/boot/grub2/grub.cfg" , "/boot/grub2/grubenv" ]

[full]
  inherit = "default"
  repository = "s3:https://minio.magic.pixls.us:19000/restic-tron/"
  [full.env]
    MINIO_SHARED_CREDENTIALS_FILE = "/etc/resticprofile/minio-client.json"
    MINIO_ALIAS = "minio.magic.pixls.us"

  [full.backup]
    schedule = "*:00,10,20,30,40,50"
    run-before = [
      '/etc/resticprofile/dump-rpm-packagelist',
    ]
    exclude = [
      '/restic-repo1',
      '/var/cache',
      '/root/.cache/restic/',
      '/var/tmp/zypp*',
      '/var/',
    ]
    source = [ "/", "/boot", "/boot/efi" ]

[zypp]
  inherit = "root"

and then you do

resticprofile full.schedule

and yes I am aware that my cleanup settings do not match my backup cycle but this was for the hardware work hetzner had to do on our server.

This is a profiles.toml file btw. other formats are supported. see documentation.

2 Likes

Thanks @bastibe and @darix I think I will try Hetzner Storage Box + restic.

resticprofile looks great, thanks for the example config. It looks simple enough and very powerful, just what I needed :smiley: No messing around with cron and permissions I imagine.

I will give it a try after I finish setting up my local environment :slight_smile:

Yes, resticprofile is good. Also note that restic is working on glacier suport, so the monthly fees can be quite low.

2 Likes

You could take a look at pcloud. It has lifetime one-time payment solutions.

1 Like

I tried one of those pcloud lifetime things and it was incredibly slow, to the point it would have taken weeks to upload everything. On the other hand they do offer a free trial and will refund if you’re not happy

1 Like

and just in time :smiley: Release restic 0.18.1 · restic/restic · GitHub

2 Likes
1 Like

I will get this ready soon… Now I am in the processing of running badblocks on 3 new disks. Maybe in 4 days they will be ready to create the pool :smiley: