backup.sh: del opp skriptet i seksjoner
This commit is contained in:
@@ -18,7 +18,12 @@
|
|||||||
# I førstnevnte tilfelle må du også registrere boksen i './ssh_config_backup_targets'.
|
# 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. ===
|
# === Sjekk at nødvendige verktøy er installert. ===
|
||||||
|
|
||||||
declare -ra required_tools=(
|
declare -ra required_tools=(
|
||||||
rsync
|
rsync
|
||||||
ssh
|
ssh
|
||||||
@@ -49,11 +54,8 @@ if [ \
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === Start ===
|
|
||||||
|
|
||||||
echo "PVV; hjemmelaget backupscript (\$ git commit sha: $(cd /backupz && git rev-parse HEAD) \$)"
|
# === Sjekk for pågående backup eller avbrutt backup, sett låsfil og signalhåndtering. ===
|
||||||
echo
|
|
||||||
date
|
|
||||||
|
|
||||||
# Blir brukt som navn på ZFS-snapshot og logger.
|
# Blir brukt som navn på ZFS-snapshot og logger.
|
||||||
declare -r snapshot_date="$(date +%Y%m%d)"
|
declare -r snapshot_date="$(date +%Y%m%d)"
|
||||||
@@ -93,12 +95,14 @@ trap on_sigint SIGINT
|
|||||||
|
|
||||||
echo "$$" > "$lockfile"
|
echo "$$" > "$lockfile"
|
||||||
|
|
||||||
|
|
||||||
|
# === Rydd opp gamle backups hvis det trengs plass. ===
|
||||||
|
|
||||||
echo "Sjekker at det er nok ledig plass på disken..."
|
echo "Sjekker at det er nok ledig plass på disken..."
|
||||||
zfs get available principal/backupz
|
zfs get available principal/backupz
|
||||||
|
|
||||||
# Dette tilsvarer 50 GB, juster etter behov.
|
# Dette tilsvarer 50 GB, juster etter behov.
|
||||||
declare -r min_free_space=50000000000
|
declare -r min_free_space=50000000000
|
||||||
|
|
||||||
while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_space" ] ; do
|
while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_space" ] ; do
|
||||||
echo;
|
echo;
|
||||||
echo "Disken er nesten full, rydder";
|
echo "Disken er nesten full, rydder";
|
||||||
@@ -122,11 +126,8 @@ while [ "$(zfs get -Hp available principal/backupz | cut -f3)" -lt "$min_free_sp
|
|||||||
echo
|
echo
|
||||||
done
|
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
|
# TODO: kanskje noe av dette enklere kunne blitt uttrykt
|
||||||
# med en egen json-fil og litt jq-magi?
|
# med en egen json-fil og litt jq-magi?
|
||||||
@@ -265,9 +266,10 @@ declare -ra tom_includes=(
|
|||||||
declare -ra tom_excludes=(
|
declare -ra tom_excludes=(
|
||||||
"/var/cache/"
|
"/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
|
for host in "${hosts[@]}"; do
|
||||||
declare katalog="/backupz/${hosts_output_dir[$host]:-$host}"
|
declare katalog="/backupz/${hosts_output_dir[$host]:-$host}"
|
||||||
declare dataset="principal/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
|
fi
|
||||||
done
|
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 -r rsync="/usr/local/bin/rsync"
|
||||||
declare -ra rsync_flags=(
|
declare -ra rsync_flags=(
|
||||||
--archive
|
--archive
|
||||||
@@ -314,7 +322,6 @@ declare -ra rsync_flags=(
|
|||||||
--exclude=/.zfs/
|
--exclude=/.zfs/
|
||||||
)
|
)
|
||||||
declare -r logdir="/backupz/log"
|
declare -r logdir="/backupz/log"
|
||||||
|
|
||||||
declare -A venteproc=()
|
declare -A venteproc=()
|
||||||
|
|
||||||
echo "Starter rsync for følgende verter: ${hosts[*]}"
|
echo "Starter rsync for følgende verter: ${hosts[*]}"
|
||||||
@@ -365,9 +372,11 @@ for host in "${hosts[@]}"; do
|
|||||||
done
|
done
|
||||||
echo "Rsync er i gang."
|
echo "Rsync er i gang."
|
||||||
|
|
||||||
|
|
||||||
|
# === Vent på at alle rsync-jobbene skal bli ferdige ===
|
||||||
|
|
||||||
echo "Venter til rsync er ferdig: ${!venteproc[*]}"
|
echo "Venter til rsync er ferdig: ${!venteproc[*]}"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
wait -n -p pid; code=$?
|
wait -n -p pid; code=$?
|
||||||
[[ -z "${pid}" ]] && break
|
[[ -z "${pid}" ]] && break
|
||||||
@@ -386,9 +395,11 @@ while true; do
|
|||||||
echo "${#venteproc[@]} jobber gjenstår..."
|
echo "${#venteproc[@]} jobber gjenstår..."
|
||||||
echo
|
echo
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Rsync er ferdig."
|
echo "Rsync er ferdig."
|
||||||
|
|
||||||
|
|
||||||
|
# === Oppsummering, ta ZFS-snapshot og avslutt ===
|
||||||
|
|
||||||
declare -ri end_time="$(date +%s)"
|
declare -ri end_time="$(date +%s)"
|
||||||
declare -ri elapsed_time="$((end_time - start_time))"
|
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))
|
printf 'Tid brukt på rsync: %03d:%02d:%02d\n' $((elapsed_time/3600)) $(((elapsed_time/60)%60)) $((elapsed_time%60))
|
||||||
|
|||||||
Reference in New Issue
Block a user