vault backup: 2026-05-17 11:46:36

This commit is contained in:
2026-05-17 11:46:36 +01:00
parent fac5687e22
commit 1962242ead
3 changed files with 270 additions and 11 deletions
@@ -0,0 +1,238 @@
---
category:
- "[[Journal]]"
type:
- "[[Log]]"
title: migrating to truenas, sanoid+syncoid backup
created: 2026-05-17T11:29:26
date: 2026-05-17
tags:
---
So I'm going to try running [[TrueNAS|truenas]] on my backup machine rather than [[Proxmox|proxmox]] with [[Sanoid and Syncoid|sandoid+synoid]].
here are my current config and scripts on the
`/etc/sanoid/sanoid.conf`
```
########################
# stanleypool datasets #
########################
[stanleypool/archive]
    use_template = stanleypool-nightly
    recursive = zfs
    process_children_only = no
[stanleypool/bobbie]
    use_template = stanleypool-nightly
    recursive = zfs
    process_children_only = no
[stanleypool/music]
    use_template = stanleypool-nightly
    recursive = zfs
    process_children_only = no
[stanleypool/photos]
    use_template = stanleypool-nightly
    recursive = zfs
    process_children_only = no
[stanleypool/video]
    use_template = stanleypool-nightly
    recursive = zfs
    process_children_only = no
#############
# templates #
#############
[template_stanleypool-nightly]
    frequently = 0
    hourly = 0
    daily = 90
    weekly = 26
    monthly = 24
    yearly = 0
    autosnap = no
    autoprune = yes
    prune_defer = 80
```
`/usr/local/bin/zfs-nightly-backup.sh`
```
#!/bin/bash
GLOBAL_TIMEOUT="6h"
# --- CRASH SAFETY NET ---
# If the script exits prematurely for ANY reason, run the shutdown function
failure_cleanup() {
    echo "$(date '+[%Y-%m-%d %H:%M:%S]') CRITICAL: Script terminated unexpectedly! Triggering safety shutdown."
    ssh root@pve-shug9 "/sbin/shutdown +10 'Nightly backup crashed, shutting down in 10 minutes'"
    /sbin/shutdown +10 "Nightly backup crashed, shutting down in 10 minutes"
}
# Trap standard exit signals (1 = General errors, 2 = Ctrl+C, 15 = Terminate)
trap 'if [ "$EXIT_STATUS" != "0" ] && [ "$EXIT_STATUS" != "124" ]; then failure_cleanup; fi' EXIT
run_backups() {
    # pull existing snapshots from source (thinkstation)
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=pull --preserve-recordsize --preserve-properties root@pve-thinkstation:noggapool/bobbie stanleypool/bobbie
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=pull --preserve-recordsize --preserve-properties root@pve-thinkstation:noggapool/photos stanleypool/photos
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=pull --preserve-recordsize --preserve-properties root@pve-thinkstation:noggapool/archive stanleypool/archive
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=pull --preserve-recordsize --preserve-properties root@pve-thinkstation:noggapool/music stanleypool/music
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=pull --preserve-recordsize --preserve-properties root@pve-thinkstation:noggapool/video stanleypool/video
    sleep 10
    # push to remote (shug9)
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=push --preserve-recordsize --preserve-properties root@pve-shug9:bathpool/bobbie stanleypool/bobbie
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=push --preserve-recordsize --preserve-properties stanleypool/photos root@pve-shug9:bathpool/photos
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=push --preserve-recordsize --preserve-properties stanleypool/archive root@pve-shug9:bathpool/archive
    sleep 10
    /usr/sbin/syncoid --quiet -r --no-sync-snap --create-bookmark --use-hold --identifier=push --preserve-recordsize --preserve-properties stanleypool/music root@pve-shug9:bathpool/music
    sleep 10
    # only run the prune after successful transfers
    ssh root@pve-shug9 "/usr/sbin/sanoid --quiet --prune-snapshots"
    sleep 5
    /usr/sbin/sanoid --quiet --prune-snapshots
    sleep 5
    echo "Backup script completed successfully."
}
# Export the function so the timeout subshell can see it
export -f run_backups
# Run the function wrapped in the timeout utility
timeout "$GLOBAL_TIMEOUT" bash -c run_backups
EXIT_STATUS=$?
# --- EVALUATE EXIT STATE FOR LOGGING ---
if [ $EXIT_STATUS -eq 124 ]; then
    echo "$(date '+[%Y-%m-%d %H:%M:%S]') ERROR: Script exceeded global timeout of $GLOBAL_TIMEOUT. Aborting."
elif [ $EXIT_STATUS -ne 0 ]; then
    echo "$(date '+[%Y-%m-%d %H:%M:%S]') ERROR: Backup function failed with exit code $EXIT_STATUS."
else
    echo "$(date '+[%Y-%m-%d %H:%M:%S]') Success: All replication steps completed."
fi
# --- UNCONDITIONAL 10-MINUTE DELAYED SHUTDOWN ---
# This runs normally for Success or Timeout states.
# (General script crashes bypass this and hit the 'trap' function at the top).
ssh root@pve-shug9 "/sbin/shutdown +10 'Nightly backup/replication sequence finished, shutting down in 10 minutes'"
/sbin/shutdown +10 "Nightly backup/replication sequence finished, shutting down in 10 minutes"
exit $EXIT_STATUS
```
+7
View File
@@ -0,0 +1,7 @@
---
created: 2026-05-17T11:40:36
category:
- "[[Software]]"
os: "[[Hypervisor]]"
url:
---