From 75b2c7395cba1f9505f823480f9ff0065e7b44a1 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 28 Jan 2026 18:11:27 +0900 Subject: [PATCH] =?UTF-8?q?backup.sh:=20bli=20kvitt=20litt=20`declare`=20s?= =?UTF-8?q?t=C3=B8y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup.sh | 76 +++++++++++++++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/backup.sh b/backup.sh index def04d2..e391872 100755 --- a/backup.sh +++ b/backup.sh @@ -24,7 +24,7 @@ date # === Sjekk at nødvendige verktøy er installert. === -declare -ra required_tools=( +required_tools=( rsync ssh zfs @@ -44,8 +44,8 @@ if [ "$(id -u)" -ne 0 ]; then fi # 5.1 er minimum pga. wait '-p' flagget. -declare -r minimum_bash_major_version="5" -declare -r minimum_bash_minor_version="1" +minimum_bash_major_version="5" +minimum_bash_minor_version="1" if [ \ "${BASH_VERSINFO[0]}" -lt "$minimum_bash_major_version" ] || \ { [ "${BASH_VERSINFO[0]}" -eq "$minimum_bash_major_version" ] && \ @@ -58,15 +58,15 @@ fi # === 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)" +snapshot_date="$(date +%Y%m%d)" if [ "$1" = "full" ]; then # Fullbackupen starter før midnatt, legg på en dag - declare -r snapshot_date=$(date -v +1d +%Y%m%d) + snapshot_date=$(date -v +1d +%Y%m%d) fi # Sjekk om en annen backup kjører eller om forrige backup ble avbrutt. -declare -r lockfile="/backupz/backup.sh.lock" +lockfile="/backupz/backup.sh.lock" if [ -e $lockfile ]; then - declare -r existing_pid="$(cat $lockfile)" + existing_pid="$(cat $lockfile)" # TODO: Bruk bedre metode for å finne prosess. if ps -p "$existing_pid"; then @@ -102,13 +102,13 @@ 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 +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"; echo - declare -ri min_backups=5 + min_backups=5 if [ "$(zfs list -t snapshot | grep -c "backupz@")" -lt "$min_backups" ]; then echo; echo "Mindre enn $min_backups backups lagret, feiger ut fra sletting"; @@ -116,10 +116,10 @@ while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_sp break; fi - declare -r oldest=$(zfs list -t snapshot | grep backupz@ | head -n1 | tr @ ' ' | awk '{print $2}') - echo "Kjører zfs destroy på alle disker @$oldest" + oldest_snapshot=$(zfs list -t snapshot | grep backupz@ | head -n1 | tr @ ' ' | awk '{print $2}') + echo "Kjører zfs destroy på alle disker @$oldest_snapshot" for d in $(zfs list | grep ^principal/backupz | awk '{print $1}'); do - zfs destroy "$d@$oldest" + zfs destroy "$d@$oldest_snapshot" done zfs get available principal/backupz @@ -143,11 +143,11 @@ declare -A hosts_output_dir=() # ameno hosts+=("ameno") -declare -ra ameno_includes=( +ameno_includes=( "/" "/boot/firmware" ) -declare -ra ameno_excludes=( +ameno_excludes=( "/var/cache/" "/var/lib/snapd/" "/var/log/journal/" @@ -155,13 +155,13 @@ declare -ra ameno_excludes=( # microbel (hjemmeområder) hosts+=("homepvv") -declare -ra homepvv_includes=( +homepvv_includes=( "/" "/boot" "/export/home/pvv" "/var" ) -declare -ra homepvv_excludes=( +homepvv_excludes=( # Se ./homepvv.exclude - den skal bli plukket opp automatisk ) @@ -169,11 +169,11 @@ declare -ra homepvv_excludes=( # Minecraft-verden kopieres fra /var/backups/minecraft/current/ istf. # /srv/minecraft-pvv/. hosts+=("innovation") -declare -ra innovation_includes=( +innovation_includes=( "/" "/boot/efi" ) -declare -ra innovation_excludes=( +innovation_excludes=( "/srv/minecraft-pvv/" "/var/cache/" "/var/db/freebsd-update/files/" @@ -181,21 +181,21 @@ declare -ra innovation_excludes=( # sleipner hosts+=("sleipner") -declare -ra sleipner_includes=( +sleipner_includes=( "/" ) -declare -ra sleipner_excludes=( +sleipner_excludes=( "/scratch/" "/var/cache/" ) # tom hosts+=("tom") -declare -ra tom_includes=( +tom_includes=( "/" "/boot/efi" ) -declare -ra tom_excludes=( +tom_excludes=( "/var/cache/" ) @@ -203,8 +203,8 @@ declare -ra tom_excludes=( # === 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}" + katalog="/backupz/${hosts_output_dir[$host]:-$host}" + dataset="principal/backupz/${hosts_output_dir[$host]:-$host}" # Sjekk at ZFS-datasettet finnes if ! zfs list "$dataset" >/dev/null 2>&1; then @@ -220,8 +220,8 @@ for host in "${hosts[@]}"; do fi # Sjekk at datasettet er montert, og forsøk å mounte om nødvendig - declare mounted_val="$(zfs get -H -o value mounted "$dataset" 2>/dev/null || echo "no")" - if [ "${mounted_val:-no}" != "yes" ]; then + is_mounted="$(zfs get -H -o value mounted "$dataset" 2>/dev/null || echo "no")" + if [ "${is_mounted:-no}" != "yes" ]; then echo "Datasettet '$dataset' er ikke montert på '$katalog'. Forsøker å mounte..." if ! zfs mount "$dataset" >/dev/null 2>&1; then echo "Kunne ikke mounte '$dataset'. Avbryter." >&2 @@ -238,9 +238,9 @@ 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=( +start_time="$(date +%s)" +rsync="/usr/local/bin/rsync" +rsync_flags=( --archive --hard-links --compress @@ -253,20 +253,20 @@ declare -ra rsync_flags=( --inplace --exclude=/.zfs/ ) -declare -r logdir="/backupz/log" +logdir="/backupz/log" declare -A venteproc=() echo "Starter rsync for følgende verter: ${hosts[*]}" echo for host in "${hosts[@]}"; do - declare -a command=( + command=( "$rsync" "${rsync_flags[@]}" "--log-file=${logdir}/${host}.log.$snapshot_date" ) - declare exclude_paths_var="${host}_excludes[@]" - declare -a exclude_paths=("${!exclude_paths_var}") + exclude_paths_var="${host}_excludes[@]" + exclude_paths=("${!exclude_paths_var}") for exclude in "${exclude_paths[@]}"; do command+=("--exclude=${exclude}") done @@ -275,8 +275,8 @@ for host in "${hosts[@]}"; do command+=("--exclude-from=/backupz/${host}.exclude") fi - declare include_paths_var="${host}_includes[@]" - declare -a include_paths=("${!include_paths_var}") + include_paths_var="${host}_includes[@]" + include_paths=("${!include_paths_var}") if [ "${#include_paths[@]}" -eq 0 ]; then echo "Ingen inkluderingsstier for vert $host, hopper over." continue @@ -295,7 +295,7 @@ for host in "${hosts[@]}"; do echo "${command[0]} \\" # Ikke print de første rsync-flagga i kommandoen echo " # ...standard rsync-flagg... \\" - declare -i start_index=$((1 + ${#rsync_flags[@]})) + start_index="$((1 + ${#rsync_flags[@]}))" for ((i="$start_index"; i<${#command[@]}-1; i++)); do echo " ${command[i]} \\" done @@ -332,8 +332,8 @@ echo "Rsync er ferdig." # === Oppsummering, ta ZFS-snapshot og avslutt === -declare -ri end_time="$(date +%s)" -declare -ri elapsed_time="$((end_time - start_time))" +end_time="$(date +%s)" +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)) # Touch home slik at timestamp på snapshot blir når backup var ferdig.