backup.sh: del opp skriptet i seksjoner

This commit is contained in:
2026-01-28 17:33:36 +09:00
parent a90755bdd7
commit dd003f6b8d

View File

@@ -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?
@@ -265,9 +266,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}"
@@ -297,8 +299,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
@@ -314,7 +322,6 @@ declare -ra rsync_flags=(
--exclude=/.zfs/
)
declare -r logdir="/backupz/log"
declare -A venteproc=()
echo "Starter rsync for følgende verter: ${hosts[*]}"
@@ -365,9 +372,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
@@ -386,9 +395,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))