From 129f9762ce5ee96e9138db4d41c6a8f22cc1d7d7 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 28 Jan 2026 17:33:36 +0900 Subject: [PATCH] backup.sh: del opp skriptet i seksjoner --- backup.sh | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/backup.sh b/backup.sh index 14f6b4d..d195784 100755 --- a/backup.sh +++ b/backup.sh @@ -18,7 +18,12 @@ # I førstnevnte tilfelle må du også registrere boksen i './ssh_config_backup_targets'. +echo "PVV; hjemmelaget backupscript (\$ git commit sha: $(cd /backupz && git rev-parse HEAD) \$)" +echo +date + # === Sjekk at nødvendige verktøy er installert. === + declare -ra required_tools=( rsync ssh @@ -49,11 +54,8 @@ if [ \ exit 1 fi -# === Start === -echo "PVV; hjemmelaget backupscript (\$ git commit sha: $(cd /backupz && git rev-parse HEAD) \$)" -echo -date +# === Sjekk for pågående backup eller avbrutt backup, sett låsfil og signalhåndtering. === # Blir brukt som navn på ZFS-snapshot og logger. declare -r snapshot_date="$(date +%Y%m%d)" @@ -93,12 +95,14 @@ trap on_sigint SIGINT echo "$$" > "$lockfile" + +# === Rydd opp gamle backups hvis det trengs plass. === + echo "Sjekker at det er nok ledig plass på disken..." zfs get available principal/backupz # Dette tilsvarer 50 GB, juster etter behov. declare -r min_free_space=50000000000 - while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_space" ] ; do echo; echo "Disken er nesten full, rydder"; @@ -122,11 +126,8 @@ while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_sp echo done -echo "Starter backup..." -echo "Snapshot ID: $snapshot_date" -echo -### Liste over vertsmaskiner og hva som skal tas backup av. ### +# === Liste over vertsmaskiner og hva som skal tas backup av. === # TODO: kanskje noe av dette enklere kunne blitt uttrykt # med en egen json-fil og litt jq-magi? @@ -263,9 +264,10 @@ declare -ra tom_includes=( declare -ra tom_excludes=( "/var/cache/" ) -### Slutt på liste over vertsmaskiner og hva som skal tas backup av. ### -# Sjekk at alle backup-kataloger har tilhørende datasett, og at datasettene er montert + +# === Sjekk at alle backup-kataloger har tilhørende datasett, og at datasettene er montert. === + for host in "${hosts[@]}"; do declare katalog="/backupz/${hosts_output_dir[$host]:-$host}" declare dataset="principal/backupz/${hosts_output_dir[$host]:-$host}" @@ -295,8 +297,14 @@ for host in "${hosts[@]}"; do fi done -declare -ri start_time="$(date +%s)" +# === Start rsync-jobber === + +echo "Starter backup..." +echo "Snapshot ID: $snapshot_date" +echo + +declare -ri start_time="$(date +%s)" declare -r rsync="/usr/local/bin/rsync" declare -ra rsync_flags=( --archive @@ -313,7 +321,6 @@ declare -ra rsync_flags=( --stats ) declare -r logdir="/backupz/log" - declare -A venteproc=() echo "Starter rsync for følgende verter: ${hosts[*]}" @@ -364,9 +371,11 @@ for host in "${hosts[@]}"; do done echo "Rsync er i gang." + +# === Vent på at alle rsync-jobbene skal bli ferdige === + echo "Venter til rsync er ferdig: ${!venteproc[*]}" echo - while true; do wait -n -p pid; code=$? [[ -z "${pid}" ]] && break @@ -385,9 +394,11 @@ while true; do echo "${#venteproc[@]} jobber gjenstår..." echo done - echo "Rsync er ferdig." + +# === Oppsummering, ta ZFS-snapshot og avslutt === + declare -ri end_time="$(date +%s)" declare -ri elapsed_time="$((end_time - start_time))" printf 'Tid brukt på rsync: %03d:%02d:%02d\n' $((elapsed_time/3600)) $(((elapsed_time/60)%60)) $((elapsed_time%60))