backup.sh: bli kvitt litt declare støy
This commit is contained in:
76
backup.sh
76
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.
|
||||
|
||||
Reference in New Issue
Block a user