gobbling871,

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

giddy,
@giddy@aussie.zone avatar

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.

spez_,

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:

<pre style="background-color:#ffffff;">
<span style="color:#323232;">/.config/restic/
</span><span style="color:#323232;">├── logs
</span><span style="color:#323232;">│   ├── statuses
</span><span style="color:#323232;">│   │   ├── restic-status-20230202T020202.json
</span><span style="color:#323232;">│   │   └── restic-status-20230101T010101.json
</span><span style="color:#323232;">│   ├── restic-check-20230202T020202.log
</span><span style="color:#323232;">│   └── restic-backup-20230101T010101.log
</span><span style="color:#323232;">├── config
</span><span style="color:#323232;">│   ├── profiles.yaml
</span><span style="color:#323232;">│   ├── excludes.txt
</span><span style="color:#323232;">│   ├── rclone.conf
</span><span style="color:#323232;">│   └── password.txt
</span><span style="color:#323232;">├── bin
</span><span style="color:#323232;">│   ├── restic_0.15.2_linux_arm64
</span><span style="color:#323232;">│   ├── rclone_1.63.1_linux_arm64
</span><span style="color:#323232;">│   └── resticprofile_0.22.0_linux_arm64
</span>
<pre style="background-color:#ffffff;">
<span style="color:#63a35c;">version</span><span style="color:#323232;">: </span><span style="color:#183691;">"1"
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Schedules (https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events)
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$SCHEDULE_RESTIC_BACKUP := "*-*-* 22:00:00" </span><span style="color:#323232;">}}       </span><span style="font-style:italic;color:#969896;"># Daily at 10PM
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$SCHEDULE_RESTIC_CHECK := "Sat *-*-* 04:00:00" </span><span style="color:#323232;">}}    </span><span style="font-style:italic;color:#969896;"># Weekly at 4AM on Saturday
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$SCHEDULE_SYNC_BACKUP := "Sun *-*-* 21:30:00" </span><span style="color:#323232;">}}     </span><span style="font-style:italic;color:#969896;"># Weekly at 11.30PM on Sunday
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$SCHEDULE_POSTGRES_BACKUP := "Fri *-*-* 20:00:00" </span><span style="color:#323232;">}} </span><span style="font-style:italic;color:#969896;"># Weekly at 8PM on Friday
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Directories
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTIC_BINARY := "/home/deck/Desktop/.config/restic/bin/restic_0.15.2_linux_arm64" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTIC_REPO := "/home/deck/Desktop/restic-repo" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTIC_LOG := "/home/deck/Desktop/.config/restic/logs" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTIC_STATUS := "/home/deck/Desktop/.config/restic/logs/statuses" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTIC_BLOCKED_FILE := "/home/deck/Desktop/.config/restic/BLOCKED" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RCLONE_BINARY := "/home/deck/Desktop/.config/restic/bin/rclone_1.63.1_linux_arm64" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RCLONE_REPO := "bucket:restic-backup-12345" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RCLONE_CONFIG := "/home/deck/Desktop/.config/restic/config/rclone.conf" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_RESTICPROFILE_LOCK := "/tmp/resticprofile-default.lock" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_POSTGRES_DUMP := "/home/deck/Desktop/dumps" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$LOCATION_PRIMARY_BACKUP_SOURCE := "/home/deck/Desktop/" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Configs
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$CONFIG_CURRENT_TIME := .Now.Format "20060102T150405" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$CONFIG_RESTIC_PASSWORD := "/home/deck/Desktop/.config/restic/config/password.txt" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">{{ </span><span style="color:#183691;">$CONFIG_RESTIC_EXCLUDE := "/home/deck/Desktop/.config/restic/excludes.txt" </span><span style="color:#323232;">}}
</span><span style="color:#323232;">
</span><span style="color:#63a35c;">global</span><span style="color:#323232;">:
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">default-command</span><span style="color:#323232;">: </span><span style="color:#183691;">snapshots                      </span><span style="font-style:italic;color:#969896;"># Run 'snapshots' when no command is specified
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">initialize</span><span style="color:#323232;">: </span><span style="color:#0086b3;">false                               </span><span style="font-style:italic;color:#969896;"># Do not initialize a repository if none exists
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">priority</span><span style="color:#323232;">: </span><span style="color:#183691;">low                                   </span><span style="font-style:italic;color:#969896;"># Use priority class on Windows and "nice" on Unixes
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">min-memory</span><span style="color:#323232;">: </span><span style="color:#0086b3;">100                                 </span><span style="font-style:italic;color:#969896;"># Minimum required RAM for Resticprofile to start
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">restic-lock-retry-after</span><span style="color:#323232;">: </span><span style="color:#183691;">5m                     </span><span style="font-style:italic;color:#969896;"># Retry failed restic command acquisition every 5 minutes
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">restic-stale-lock-age</span><span style="color:#323232;">: </span><span style="color:#183691;">10h                      </span><span style="font-style:italic;color:#969896;"># Unlock stale lock if age exceeds 10 hours
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">restic-binary</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_BINARY }}'  </span><span style="font-style:italic;color:#969896;"># Location of the Restic binary
</span><span style="color:#323232;">
</span><span style="color:#63a35c;">default</span><span style="color:#323232;">:
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">lock</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTICPROFILE_LOCK }}'      </span><span style="font-style:italic;color:#969896;"># Local lockfile to prevent concurrent profile runs
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">force-inactive-lock</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                       </span><span style="font-style:italic;color:#969896;"># Detect and remove stale locks
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">initialize</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                </span><span style="font-style:italic;color:#969896;"># Initialize repository if it doesn't exist
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">repository</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_REPO }}'       </span><span style="font-style:italic;color:#969896;"># Path to Restic repository
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">password-file</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $CONFIG_RESTIC_PASSWORD }}'  </span><span style="font-style:italic;color:#969896;"># File containing repository password
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">status-file</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_STATUS }}/{{ $CONFIG_CURRENT_TIME }}-restic-status.json'  </span><span style="font-style:italic;color:#969896;"># Output status file
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">compression</span><span style="color:#323232;">: </span><span style="color:#183691;">'max'                              </span><span style="font-style:italic;color:#969896;"># Maximum compression level
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">run-after-fail</span><span style="color:#323232;">:                                 </span><span style="font-style:italic;color:#969896;"># Block syncing if there was a failure. TODO: Add an email
</span><span style="color:#323232;">    - </span><span style="color:#183691;">'echo "The command ${PROFILE_COMMAND} has failed in ${PROFILE_NAME}. Please check the logs." > {{ $LOCATION_RESTIC_BLOCKED_FILE }}'
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">backup</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">run-before</span><span style="color:#323232;">:                                   </span><span style="font-style:italic;color:#969896;"># Bring down Docker before backup
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'systemctl stop docker.socket'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'systemctl stop docker'
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">run-finally</span><span style="color:#323232;">:
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'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'  </span><span style="font-style:italic;color:#969896;"># Copy log file, stripping out any unchanced files
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'systemctl start docker'                  </span><span style="font-style:italic;color:#969896;"># Bring Docker back online after backup
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">one-file-system</span><span style="color:#323232;">: </span><span style="color:#0086b3;">false                        </span><span style="font-style:italic;color:#969896;"># Exclude other file systems
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">no-error-on-warning</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                     </span><span style="font-style:italic;color:#969896;"># Don't consider warnings as backup failures
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">source</span><span style="color:#323232;">:                                       </span><span style="font-style:italic;color:#969896;"># Directories to back up
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'{{ $LOCATION_PRIMARY_BACKUP_SOURCE }}'
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">exclude-file</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $CONFIG_RESTIC_EXCLUDE }}'  </span><span style="font-style:italic;color:#969896;"># File containing exclude patterns
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">exclude-caches</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                          </span><span style="font-style:italic;color:#969896;"># Exclude cache files
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $SCHEDULE_RESTIC_BACKUP }}'     </span><span style="font-style:italic;color:#969896;"># Backup schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-permission</span><span style="color:#323232;">: </span><span style="color:#183691;">system                   </span><span style="font-style:italic;color:#969896;"># Schedule permission
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-lock-wait</span><span style="color:#323232;">: </span><span style="color:#183691;">10m                       </span><span style="font-style:italic;color:#969896;"># Wait time for the lock during schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-log</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ tempFile "backup.log" }}'   </span><span style="font-style:italic;color:#969896;"># Log file to /tmp. This contains all information, including unchanged files which we do not care about
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">verbose</span><span style="color:#323232;">: </span><span style="color:#0086b3;">2                                    </span><span style="font-style:italic;color:#969896;"># Log details about processed files
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">check</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $SCHEDULE_RESTIC_CHECK }}'      </span><span style="font-style:italic;color:#969896;"># Verification schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-permission</span><span style="color:#323232;">: </span><span style="color:#183691;">system                   </span><span style="font-style:italic;color:#969896;"># Schedule permission
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-lock-wait</span><span style="color:#323232;">: </span><span style="color:#183691;">10m                       </span><span style="font-style:italic;color:#969896;"># Wait time for the lock during schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-log</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-restic-check.log'  </span><span style="font-style:italic;color:#969896;"># Log file
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">read-data</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                               </span><span style="font-style:italic;color:#969896;"># Verify data during check
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">prune</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">dry-run</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                 </span><span style="font-style:italic;color:#969896;"># Only prune if safe to do so, change manually
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">repack-uncompressed</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                     </span><span style="font-style:italic;color:#969896;"># Repack all uncompressed data
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">forget</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">dry-run</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                 </span><span style="font-style:italic;color:#969896;"># Only forget if safe to do so, change manually
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">rewrite</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">dry-run</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                 </span><span style="font-style:italic;color:#969896;"># Only rewrite if safe to do so, change manually
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">forget</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                  </span><span style="font-style:italic;color:#969896;"># Remove original snapshots after creating new ones
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">exclude-file</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $CONFIG_RESTIC_EXCLUDE }}'  </span><span style="font-style:italic;color:#969896;"># File containing exclude patterns
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">mount</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">allow-other</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                             </span><span style="font-style:italic;color:#969896;"># Allow other users to access the mount point
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">rebuild-index</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">read-all-packs</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                          </span><span style="font-style:italic;color:#969896;"># Read all pack files to generate new index from scratch
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># The following shell profiles are simply to run other shell scripts at a scheduled time
</span><span style="font-style:italic;color:#969896;"># We do not actually run the primary Restic commands listed, as we exit the process early
</span><span style="color:#323232;">
</span><span style="color:#63a35c;">shell-postgres</span><span style="color:#323232;">:                                   </span><span style="font-style:italic;color:#969896;"># Profile to run shell scripts only. We exit the current process before Restic can run.
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">backup</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $SCHEDULE_POSTGRES_BACKUP }}'   </span><span style="font-style:italic;color:#969896;"># Postgres backup schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-permission</span><span style="color:#323232;">: </span><span style="color:#183691;">system                   </span><span style="font-style:italic;color:#969896;"># Schedule permission
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-lock-mode</span><span style="color:#323232;">: </span><span style="color:#183691;">ignore                    </span><span style="font-style:italic;color:#969896;"># Ignore locks, if any
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-log</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-postgres-backup.log'  </span><span style="font-style:italic;color:#969896;"># Log file
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">dry-run</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                 </span><span style="font-style:italic;color:#969896;"># Don't write data
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">run-before</span><span style="color:#323232;">:                                   </span><span style="font-style:italic;color:#969896;"># Dump postgres databases
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'chmod 777 /var/run/docker.sock'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'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"'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'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"'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'kill $$'
</span><span style="color:#323232;">
</span><span style="color:#63a35c;">shell-sync</span><span style="color:#323232;">:
</span><span style="color:#323232;">  </span><span style="color:#63a35c;">backup</span><span style="color:#323232;">:
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $SCHEDULE_SYNC_BACKUP }}'       </span><span style="font-style:italic;color:#969896;"># Sync backup schedule
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-permission</span><span style="color:#323232;">: </span><span style="color:#183691;">system                   </span><span style="font-style:italic;color:#969896;"># Schedule permission
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-lock-mode</span><span style="color:#323232;">: </span><span style="color:#183691;">ignore                    </span><span style="font-style:italic;color:#969896;"># Ignore locks, if any
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">schedule-log</span><span style="color:#323232;">: </span><span style="color:#183691;">'{{ $LOCATION_RESTIC_LOG }}/{{ $CONFIG_CURRENT_TIME }}-rsync-backup.log'  </span><span style="font-style:italic;color:#969896;"># Log file
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">dry-run</span><span style="color:#323232;">: </span><span style="color:#0086b3;">true                                 </span><span style="font-style:italic;color:#969896;"># Don't write data
</span><span style="color:#323232;">    </span><span style="color:#63a35c;">run-before</span><span style="color:#323232;">:                                   </span><span style="font-style:italic;color:#969896;"># Sync the Restic repo, after checking if the repository is in good health
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'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'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'{{ $LOCATION_RCLONE_BINARY }} -v sync {{ $LOCATION_RESTIC_REPO }} {{ $LOCATION_RCLONE_REPO }} --config={{ $LOCATION_RCLONE_CONFIG }} --b2-hard-delete'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'{{ $LOCATION_RCLONE_BINARY }} cleanup {{ $LOCATION_RESTIC_REPO }} --config={{ $LOCATION_RCLONE_CONFIG }}'
</span><span style="color:#323232;">      - </span><span style="color:#183691;">'kill $$'
</span>

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.

pacjo,

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?

spez_,

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

kalleboo,

Backblaze B2 for automatic syncing of all the little files

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

bmck,
@bmck@lemmy.bmck.au avatar

AWS Glacier. I use the Synology plugin that does it automatically on a schedule.

aws.amazon.com/es/s3/storage-classes/glacier/

TheHolm,
@TheHolm@aussie.zone avatar

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

hjpoijnerflkjn,

But if not (for disaster recovery only) it is pretty cheap. Like 1$/TB/month.

bmck,
@bmck@lemmy.bmck.au avatar

I hope to never have to restore from there. It’s not something you’re to do frequently.

vd1n,

Tears… Natural, salty, wet tears…

GustavoM,
@GustavoM@lemmy.world avatar

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™ 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.

raiun,

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.

Chadus_Maximus, (edited )

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.

randombullet,

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.

Arrayrepairman,

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.

GustavoM,
@GustavoM@lemmy.world avatar

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.

davad,

Restic using resticprofile to configure and schedule backup runs.

ErwinLottemann,

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 😬

vynlwombat,

What’s the 2-2-1 rule?

ErwinLottemann,

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

cctl01,

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

hollyberries,

I use Duplicati connected to Storj with data volumes that incrementally get backed up once per month. My files don’t change very often, so monthly is a good balance. Not counting my Jellyfin library, those backups are around 1 TB. With the Jellyfin library, almost 15 TB.

Earlier this year, I recovered from a 100% data loss scenario, as I didn’t (and still don’t) have space for physical backups. I have a 25 TB allowance, so my actual cost was €0. If I had to pay, it would have been under €1.

gamer,

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.

hollyberries,

That’s fair. I’m 100% onboard the decentralisation train, and do my hardest to practice what I preach. In the event that the service does go bust, I can make a backup on a different S3 compatible service immediately as long as my working copy is intact. The likelihood of the backup service AND the working copy dying at the exact same time would be my cue to take up knitting.

alligatorSoup,
@alligatorSoup@feddit.uk avatar

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

hollyberries, (edited )

Definitely 25 TB. I’ve used the service for a long time, since before they accepted credit cards. I attached my credit card one day and got a bump to 25 TB. Since that happened, I pay basically nothing and my account is still 100% storj token funded.

Edit: I dug up screenshots I sent someone recently

https://i.imgur.com/iRnzeJX.jpg

https://i.imgur.com/Xptw29b.jpg

DengueDucky,

I want 25 TB ☹️

alligatorSoup,
@alligatorSoup@feddit.uk avatar

That’s amazing. Hopefully I can get the same

Deebster, (edited )

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?

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

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.

wibo,

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

vegetaaaaaaa,
@vegetaaaaaaa@lemmy.world avatar
  • All
  • Subscribed
  • Moderated
  • Favorites
  • selfhosted@lemmy.world
  • ethstaker
  • thenastyranch
  • GTA5RPClips
  • everett
  • Durango
  • rosin
  • InstantRegret
  • DreamBathrooms
  • magazineikmin
  • Youngstown
  • mdbf
  • slotface
  • cisconetworking
  • kavyap
  • JUstTest
  • normalnudes
  • modclub
  • cubers
  • ngwrru68w68
  • khanakhh
  • tacticalgear
  • tester
  • provamag3
  • Leos
  • osvaldo12
  • anitta
  • megavids
  • lostlight
  • All magazines