Spyke
selfhosted·SelfhostedbyLandrin201

What backup service do you use?

I just got my home server up and running and was wondering what you guys recommend for backups. I figure it will probably be worth having backups on cloud servers tjay are external, are there any good services yall use for that?

View original on lemmy.ml

Borgbase with Borgmatic (Borg) as the Software. As far as I know the whole Borgbase Service is from a Homelab guy (with our needs in mind).

Also 3-2-1 rule!

21

Not so much about testing, but one time I really needed to get to my backups I lost password to the repository (I'm using restic). Luckily a copy of it was stored in bitwarden, but until I remembered it, were perhaps one of the worst moments.

Needless to say, please test backups and store secrets in more then one place.

3
feddit.nl

I have an unraid server which hosts an docker image of Duplicacy. It is paid though for the web interface. And it backs up to Backblaze B2. I have roughly 175GB backed up, for which I pay $0.87 a month.

12

This is almost my exact backup workflow, with another location in between. Duplicacy is great, highly recommend.

4

Paid for the web interface as well. I really like that it's super simple and just does it's job. That would be the one I'd also recommend.

1
lal309reply
lemmy.world

Do you have other clients backing up to your unraid? I’m looking for a complete solution to backing up end user workstations (windows, Mac and Linux) to my unraid server then backing up my unraid server to something like wasabi, Amazon, backblaze, etc. Preferably a single solution.

1

Yes, I have another server automatically rsyncing important config files to a nfs share. And my pc has a samba share where I manually backup files to.

2
eviltoast.org

rsync.net is great if you need something simple and cheap. Backblaze B2 is also decent, but does have the typical download and API usage cost.

9
Crazeeeyezreply
lemmy.world

I had never heard of rsync.net until now. I like the idea but it seems more expensive than B2. $15/TB vs $5/TB. Am I doing the math wrong or reading it wrong?

6
johntashreply
eviltoast.org

I don't see it on their website right now, but they offer a discount if you're using something like restic/borg and only need scp/sftp access. Their support is also super friendly. I've had an account forever and got moved to the 100+ TB pricing even though I have < 50TB stored. YMMV but it doesn't hurt to ask if they have any additional discounts.

Also keep in mind that B2 charges for bandwidth too. It's $5/TB for storage, but $10/TB to download that same data.

3

Sure but backup is mostly data in (free on B2). Data out is rare, if ever.

If i wasn’t backing up 12TB+ I would actually go with rsync for the features though.

Borgbase looks interesting, too.

2
Outcidereply
lemmy.world

How are you using rsync with B2? Are you mounting the bucket locally?

1
lemmy.world

I use Restic + Resticprofile to back up everything and store it on my local HDD.

Then, I use Rclone to sync the local repository to Backblaze B2.

Here's my general setup:

/.config/restic/
├── logs
│   ├── statuses
│   │   ├── restic-status-20230202T020202.json
│   │   └── restic-status-20230101T010101.json
│   ├── restic-check-20230202T020202.log
│   └── restic-backup-20230101T010101.log
├── config
│   ├── profiles.yaml
│   ├── excludes.txt
│   ├── rclone.conf
│   └── password.txt
├── bin
│   ├── restic_0.15.2_linux_arm64
│   ├── rclone_1.63.1_linux_arm64
│   └── resticprofile_0.22.0_linux_arm64
version: "1"

# Schedules (https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events)
{{ $SCHEDULE_RESTIC_BACKUP := "*-*-* 22:00:00" }}       # Daily at 10PM
{{ $SCHEDULE_RESTIC_CHECK := "Sat *-*-* 04:00:00" }}    # Weekly at 4AM on Saturday
{{ $SCHEDULE_SYNC_BACKUP := "Sun *-*-* 21:30:00" }}     # Weekly at 11.30PM on Sunday
{{ $SCHEDULE_POSTGRES_BACKUP := "Fri *-*-* 20:00:00" }} # Weekly at 8PM on Friday

# Directories
{{ $LOCATION_RESTIC_BINARY := "/home/deck/Desktop/.config/restic/bin/restic_0.15.2_linux_arm64" }}
{{ $LOCATION_RESTIC_REPO := "/home/deck/Desktop/restic-repo" }}
{{ $LOCATION_RESTIC_LOG := "/home/deck/Desktop/.config/restic/logs" }}
{{ $LOCATION_RESTIC_STATUS := "/home/deck/Desktop/.config/restic/logs/statuses" }}
{{ $LOCATION_RESTIC_BLOCKED_FILE := "/home/deck/Desktop/.config/restic/BLOCKED" }}
{{ $LOCATION_RCLONE_BINARY := "/home/deck/Desktop/.config/restic/bin/rclone_1.63.1_linux_arm64" }}
{{ $LOCATION_RCLONE_REPO := "bucket:restic-backup-12345" }}
{{ $LOCATION_RCLONE_CONFIG := "/home/deck/Desktop/.config/restic/config/rclone.conf" }}
{{ $LOCATION_RESTICPROFILE_LOCK := "/tmp/resticprofile-default.lock" }}
{{ $LOCATION_POSTGRES_DUMP := "/home/deck/Desktop/dumps" }}
{{ $LOCATION_PRIMARY_BACKUP_SOURCE := "/home/deck/Desktop/" }}

# Configs
{{ $CONFIG_CURRENT_TIME := .Now.Format "20060102T150405" }}
{{ $CONFIG_RESTIC_PASSWORD := "/home/deck/Desktop/.config/restic/config/password.txt" }}
{{ $CONFIG_RESTIC_EXCLUDE := "/home/deck/Desktop/.config/restic/excludes.txt" }}

global:
  default-command: snapshots                      # Run 'snapshots' when no command is specified
  initialize: false                               # Do not initialize a repository if none exists
  priority: low                                   # Use priority class on Windows and "nice" on Unixes
  min-memory: 100                                 # Minimum required RAM for Resticprofile to start
  restic-lock-retry-after: 5m                     # Retry failed restic command acquisition every 5 minutes
  restic-stale-lock-age: 10h                      # Unlock stale lock if age exceeds 10 hours
  restic-binary: '{{ $LOCATION_RESTIC_BINARY }}'  # Location of the Restic binary

default:
  lock: '{{ $LOCATION_RESTICPROFILE_LOCK }}'      # Local lockfile to prevent concurrent profile runs
  force-inactive-lock: true                       # Detect and remove stale locks
  initialize: true                                # Initialize repository if it doesn't exist
  repository: '{{ $LOCATION_RESTIC_REPO }}'       # Path to Restic repository
  password-file: '{{ $CONFIG_RESTIC_PASSWORD }}'  # File containing repository password
  status-file: '{{ $LOCATION_RESTIC_STATUS }}/{{ $CONFIG_CURRENT_TIME }}-restic-status.json'  # Output status file
  compression: 'max'                              # Maximum compression level
  run-after-fail:                                 # Block syncing if there was a failure. TODO: Add an email
    - 'echo "The command ${PROFILE_COMMAND} has failed in ${PROFILE_NAME}. Please check the logs." > {{ $LOCATION_RESTIC_BLOCKED_FILE }}'

  backup:
    run-before:                                   # Bring down Docker before backup
      - 'systemctl stop docker.socket'
      - 'systemctl stop docker'
    run-finally:
      - 'grep --invert-match -E "^unchanged|\(0 B added, 0 B stored\)|\(0 B added\)" {{ tempFile "backup.log" }} > {{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-restic-backup.log'  # Copy log file, stripping out any unchanced files
      - 'systemctl start docker'                  # Bring Docker back online after backup
    one-file-system: false                        # Exclude other file systems
    no-error-on-warning: true                     # Don't consider warnings as backup failures
    source:                                       # Directories to back up
      - '{{ $LOCATION_PRIMARY_BACKUP_SOURCE }}'
    exclude-file: '{{ $CONFIG_RESTIC_EXCLUDE }}'  # File containing exclude patterns
    exclude-caches: true                          # Exclude cache files
    schedule: '{{ $SCHEDULE_RESTIC_BACKUP }}'     # Backup schedule
    schedule-permission: system                   # Schedule permission
    schedule-lock-wait: 10m                       # Wait time for the lock during schedule
    schedule-log: '{{ tempFile "backup.log" }}'   # Log file to /tmp. This contains all information, including unchanged files which we do not care about
    verbose: 2                                    # Log details about processed files

  check:
    schedule: '{{ $SCHEDULE_RESTIC_CHECK }}'      # Verification schedule
    schedule-permission: system                   # Schedule permission
    schedule-lock-wait: 10m                       # Wait time for the lock during schedule
    schedule-log: '{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-restic-check.log'  # Log file
    read-data: true                               # Verify data during check

  prune:
    dry-run: true                                 # Only prune if safe to do so, change manually
    repack-uncompressed: true                     # Repack all uncompressed data

  forget:
    dry-run: true                                 # Only forget if safe to do so, change manually

  rewrite:
    dry-run: true                                 # Only rewrite if safe to do so, change manually
    forget: true                                  # Remove original snapshots after creating new ones
    exclude-file: '{{ $CONFIG_RESTIC_EXCLUDE }}'  # File containing exclude patterns

  mount:
    allow-other: true                             # Allow other users to access the mount point

  rebuild-index:
    read-all-packs: true                          # Read all pack files to generate new index from scratch

# The following shell profiles are simply to run other shell scripts at a scheduled time
# We do not actually run the primary Restic commands listed, as we exit the process early

shell-postgres:                                   # Profile to run shell scripts only. We exit the current process before Restic can run.
  backup:
    schedule: '{{ $SCHEDULE_POSTGRES_BACKUP }}'   # Postgres backup schedule
    schedule-permission: system                   # Schedule permission
    schedule-lock-mode: ignore                    # Ignore locks, if any
    schedule-log: '{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-postgres-backup.log'  # Log file
    dry-run: true                                 # Don't write data
    run-before:                                   # Dump postgres databases
      - 'chmod 777 /var/run/docker.sock'
      - 'docker exec -t immich-postgres pg_dumpall -c -U postgres | gzip > "{{ $LOCATION_POSTGRES_DUMP }}/immich-dump-{{ $CONFIG_CURRENT_TIME }}.sql.gz" && echo "Dumped Immich database: {{ $LOCATION_POSTGRES_DUMP }}/immich-dump-{{ $CONFIG_CURRENT_TIME }}.sql.gz"'
      - 'docker exec -t joplin-postgres pg_dumpall -c -U joplin | gzip > "{{ $LOCATION_POSTGRES_DUMP }}/joplin-dump-{{ $CONFIG_CURRENT_TIME }}.sql.gz" && echo "Dumped Joplin database: {{ $LOCATION_POSTGRES_DUMP }}/joplin-dump-{{ $CONFIG_CURRENT_TIME }}.sql.gz"'
      - 'kill $$'

shell-sync:
  backup:
    schedule: '{{ $SCHEDULE_SYNC_BACKUP }}'       # Sync backup schedule
    schedule-permission: system                   # Schedule permission
    schedule-lock-mode: ignore                    # Ignore locks, if any
    schedule-log: '{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-rsync-backup.log'  # Log file
    dry-run: true                                 # Don't write data
    run-before:                                   # Sync the Restic repo, after checking if the repository is in good health
      - 'if [ -f "{{ $LOCATION_RESTIC_BLOCKED_FILE }}" ]; then echo "There has been a problem with the Restic repository, please check the logs. If everything is okay, delete the BLOCKED file." && kill $$; fi'
      - '{{ $LOCATION_RCLONE_BINARY }} -v sync {{ $LOCATION_RESTIC_REPO }} {{ $LOCATION_RCLONE_REPO }} --config={{ $LOCATION_RCLONE_CONFIG }} --b2-hard-delete'
      - '{{ $LOCATION_RCLONE_BINARY }} cleanup {{ $LOCATION_RESTIC_REPO }} --config={{ $LOCATION_RCLONE_CONFIG }}'
      - 'kill $$'

Resticprofile doesn't let me run other shell commands on a schedule, and because I wanted everything in a single configuration, I just created two new profiles which call the backup command. I then made the shell commands run before Restic, and then finally killed the instance before it got to actually run, which effectively does what I needed.

9
pacjoreply
lemmy.world

It's the first time I hear about resticprofile and it looks nice. So far I've been using crestic for configuration files. Do you know how they compare?

2

It seems like they have the same objectives - allow for easier configuration of Restic. I've never heard of Crestic until now. I'd say stick with what you're comfortable with

1

Backblaze b2, borgbase.com. There are also programs like dejadup that will let you backup to popular cloud drives. The alternatives are limitless.

8

I use restic to backup my raspberry Pi's to my Synology NAS and backup my NAS to backblaze.

7

I second restic. Have been using it for a year now and have been generally very happy. Actually had to use it in a couple occasions to restore directory content and even recover a complete workstation drive. I have had relatively easy success in both scenarios.

3
tiwentyreply
lemmy.world

I've always found them pretty similar. How'd you chose one or another?

2
Jajcusreply
kbin.social

I know Restic before Kopia and made a set of systemd units to run Restic backups on my home server and office workstation (both online 24/7).

Kopia seems much nicer for a regular user, so I use it on my and family laptops. I used to use Duplicati there, but that project seems dead.

3

+1 for backblaze. I use docker for everything and mounted volumes directly in the folder alongside a docker compose file. So I just tar my services directory with everything in it, and pipe it to rclone which connects to backblaze and has a "cat" feature so you can pipe data directly to the destination.

1
montyreply
lemmy.one

Restic and then rclone to backblaze? Or is there a way to restic directly to backblaze?

1

I do prefer having a local copy of my backups (and therefore i use rclone), but afaik restic does support b2 directly...

1

rsync.net and learn to use Borg; they're stupid cheap if you're technically proficient enough to handle the Borg setup yourself. Like, charge by the gigabyte, but it's 1.5¢/GB at the most expensive, and cheaper in bulk

5
feddit.de

borg with an external hard drive and borgbase as a remote. I use the 2-2-1 rule (🙈), as I struggle to find a good way to do another backup and RAID does not count 😬

5

32 different copies of the data in 2 different locations is 1 actual backup (it's actually 3-2-1...)

1
lemmy.world

As dumb/simple/boring as this may be...? An external hard drive.

....

....what? It doesn't require you to be online 24/7, works at any(tm) PC, and the speed is really great -- even on a potato.

Unless you work at NASA or at IBM or similars -- then feel free to call me dum.

5
lemmy.world

That is great for hardware failures, but what about disasters? I would hate to lose my house to a fire and all the data (including things not replaceable, like family photos) I have on my server at the same time because my primary and backup were both destroyed.

3

Eh....you've got a point there. Then again, there is always pendrives and other extremely small devices where you can copy your (mostly important/crucial) files in and carry it along with your house/car keys or something like that.

1
raiunreply
lemmy.world

While I agree with you, hard drives do have a shelf life. How many years seems to be up for debate but it does exist. If you don’t have multiple drives that are of different ages you may be in a world of hurt one day.

2

Why? If you check the drive once a month, and it fails once per 10 years on average, the time when both the back up drive and the main drive fail simultaneously is on average 2340 years. Of couse they are much more likely to fail if they're old but the odds are very small.

2

I have a hot storage NAS that backups to a warm storage NAS.

I backup every week and scrub every month.

I have 2 x ZFS1 pools that contains 3 x 20TB disks each.

With ECC ram, scrubbing, and independent pools, it'll take a house fire to kill my local storage.

I also have a constant backing to Backblaze and yearly encrypted backup that I ship to a friend across the world.

1

Duplicati to Backblaze B2 for the important stuff. For as far as the media library goes, no backup just local raid setup...

4

Backblaze B2 for automatic syncing of all the little files

Glacier for long term archiving of old big files that never change

4
lemmy.world

External HDD in my wifi network. It runs Samba. I can just drag and drop folders and it transfers over wifi.

4

Veeam backup and replication at home and at work. At home a copy goes to a NAS, another copy goes to backblaze b2 currently.

4
feddit.de

Backups and archived files go to my home server which then backups to backblaze b2.

4

My setup exactly, with the addition of using M-Discs to backup my core important stuff.

2
  • restic > backblaze b2, nightly & automatic
  • restic > normally unplugged drive, every couple weeks (manual, recurring reminder)
4

I use SyncThing to backup our cell phones to my on-prem server, and then use BackBlaze Personal Backup for a cloud copy.

4
lemmy.world

I used to have everything backed up to a 2TB USB drive. Which I accidentally dropped down the stairs. I lost thousands of family photos and documents. That changed my backup perspective.

I now have a Synology NAS, with 12TB in a RAID5 array (for a bit of disk redundancy). All my home devices, Proxmox servers etc back up here. The NAS also holds a few TB of media. Attached to it I have a USB hard drive (also 12TB). The NAS gets fully backed up to the USB drive nightly.

I also have a remote Raspberry Pi with a smaller USB drive (4TB) attached to it at my brother's house (in another country), where I backup most of the contents of my home NAS. I don't back up the media, just the important stuff. I might have to upgrade to a larger drive...

3
amiganreply
lemmy.dynatron.me

I used to have everything backed up to a 2TB USB drive. Which I accidentally dropped down the stairs. I lost thousands of family photos and documents. That changed my backup perspective.

If it's the only copy, it's not a backup. It's the master.

17
feddit.uk

Do you mean 25TB as the storj site says 25gb? Did some promotion give you that much free?

5

my account is still 100% storj token funded

That seems to be the key bit, since everyone can use up to 25TB (if they can pay for it). Are you also hosting a node to earn credits tokens?

1
gamerreply
lemm.ee

That looks like a cool setup, but I would never trust important data to some crypto shit (Storj) no matter what kind of track record they have.

2

To back up my Synology: My first level is an old Synology, the second is Amazon Glacier.

2
lemm.ee

Git Annex.

Took me a while to wrap my head around it, but nothing comes close to it once you set it up.

Edit: should have read the post more carefully, I use Git Annex both locally and on a VPS I rent from openbsd.amsterdam for off-site backups.

2
Raknreply
discuss.tchncs.de

Somehow "took me a while to wrap my head around it" doesn't make me feel comfortable. Apart from git-annex themselves saying that they aren't a backup system and just a building block to maybe create one, a backup system should imho be dead simple sind easy to understand.

2
dsemyreply
lemm.ee

Once you actually start using it it is dead simple and integrates extremely well with stuff you (might) already do.

I have a Git repo which contains my dotfiles + every “large” (annexed) file I want to back up under my home directory.

Git annex automatically tracks where all annexed files are, how many copies there are on various repos, etc.

I add and modify files using mostly standard git commands.

It supports pretty much anything as a “remote”.

It’s extremely simple to restore backups locally or remotely.

Basically Git annex is the Git of backup solutions IME, allowing you extreme flexibility to do exactly what you want, provided you take the time to learn how to do what you want.

1
Raknreply
discuss.tchncs.de

Features that are important to me are things like an easy overview of all backup jobs (ideal via a web UI), snapshots going back every day for a week and after that every month. Backup to providers like Backblaze or AWS and the ability to browse these backups and individual snapshots.

I'd assume that you can build all of this with git annex in some way. But I really want something that works out of the box. E.g. install the backup software give it some things to backup and an B2 bucket and then go.

What I'm curious about is that the git-annex site explicitly days that they aren't a backup system, but you describe it as such.

1
dsemyreply
lemm.ee

I don’t care about stuff working OOTB - half the fun is messing around with things IMO.

I also don’t care about web UIs and similar features (I always got the impression from selfhosting communities that this is considered important but I never really understood why - I don’t spend all day staring at statistics, and when I need some info I can get it through the terminal usually).

Also, first sentence on Git Annex’s website:

git-annex allows managing large files with git, without storing the file contents in git. It can sync, backup, and archive your data, offline and online. Checksums and encryption keep your data safe and secure.

Not sure why you’re saying it’s not a backup solution.

Efit: I guess the “what git-annex is not” page says this.

To quote a comment by the creator on the same page:

It's definitely possible to use git-annex in backup-like ways, but what I want to discourage is users thinking that just putting files into git-annex means that they have a backup. Proper backups need to be designed, and tested. It helps to use software that is explicitly designed as a backup solution. git-annex is more about file distribution, and some archiving, than backups.

So basically he says this just so people won’t yell at him when they fail to use it as a backup solution correctly.

1
Raknreply
discuss.tchncs.de

I don’t care about stuff working OOTB - half the fun is messing around with things IMO.

I generally agree. Backups for me are just something I don't want to tinker with. It's important to me that they work OOTB, are easy to grasp and I have a good overview.

The web interface is important to me because it gives me that overview from any device I'm currently using without needing to type anything into a terminal. The OOTB is important to me since I want to be able to easily set this all up again even without access to my Ansible setup or previous configuration.

To each their own. I'm not saying your way of doing this is wrong. It's just not for me. This is just my reasoning / preferences. It's also the reason something like borg wasn't my chosen solution, even though it's generally considered great.

2
dsemyreply

I understand your position, though I always have access to a terminal pretty much so I still don’t see the point of a web UI.

Though I realize I’m in the minority here.

1

I do once a day rsync my data to another drive. I can restore a file, if I accidentaly deleted it. Important stuff goes encrypted via rclone additionaly to a hetzner storagebox.

2
lemmy.world

I hate to ask the scary question, but have you tried to restore your backups before? I used Duplicati and discovered that none of my backups were usable and ended up switching to Duplicacy.

10

+1 for Duplicacy. It just works, truly does. Duplicati on the other hand seems to work, but has a tendency to fail on restore, just as you described.

3

It works just fine for me, but I've heared scary storries so now Im using:

  1. Kopia to backblaze b2 (all data)
  2. Kopia to local disk (all data)
  3. Duplicati to google drive (only 1 folder)
2

An important question though.

I have, when I first set it up, and again once when I needed to.

2
Humaniusreply
lemmy.world

How would one realistically go about testing their backup? Do you need a bunch of empty drives?

1

I use OneDrive. Buy the Costco subscription and get like 15 months for around 110 CAD. GIVES 6 TB. I create some fake accountsink the sharing to my main account. I have an encrypted rxlone share for some things and others I GPG encryot the tar before sending it up. Been working fine for a couple years and I have multiple TB backed up.

2
atzanteolreply
sh.itjust.works

(you should test your backups)

You may have, but this is a friendly reminder just in case.

2

Restic using resticprofile to configure and schedule backup runs.

1
TheHolmreply
aussie.zone

Their prices are ridicules if you add cost of outbound traffic.

0

I have been with idrive since 2009. At the time they were the only ones that allowed backups of network attached storage on their cheaper personal plans. Everyone else saw that as an "enterprise" feature which required a business plan. Which was bullsh*t, because lots of home NAS devices were being sold.

Anyway, I haven't done a recent comparison of services, but I remain happy with idrive.

Thesedays I no longer backup on a computer with a mapped drive, but directly from my NAS which runs the idrive software.

I had a catastrophic dual drive failure a few years ago, one failed and another failed during the raid rebuild! I was able to restore about 1tb of data and didn't lose anything important.

They also offer backup and restore by shipping a drive to you if you want to avoid the huge initial backup or a total restore, but I haven't used that feature.

They do also have a mobile app, but last time I tried it, it wasn't great.

1

I use nightly borg backup to a separate box and then that box uses rclone to back up the borg repo offsite. Before running the borg backup I export all databases and docker volumes so they get picked up.

1