From b235e1a6563a41be3c8f176b34af66777d8b9ccd Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 24 May 2025 09:35:26 +0200 Subject: [PATCH] refactor restore script --- restore | 166 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 87 insertions(+), 79 deletions(-) diff --git a/restore b/restore index 1ff7f12..bec455e 100755 --- a/restore +++ b/restore @@ -1,11 +1,18 @@ #!/bin/bash -# vim: tabstop=8 colorcolumn=80 -## @fn usage() -## @brief Zeigt die Hilfe an +errlog() +{ + local lastexit=$? + local msg="$1" + + echo "❌ ERROR: $msg" + echo "🛑 EXIT: $lastexit" + return $lastexit +} + useage() { - echo "restore -d -n -r -p " + echo "$0 -d -n -r -p " echo echo " -d Datum von der Sicherung" echo " -n Nummer von der Sicherung" @@ -14,32 +21,89 @@ useage() echo } -## @fn SetDefaultVariables() -## @brief setzt defaults -SetDefaultVariables() +print_line() +{ + for i in {1..80}; do + printf "#" + done + + printf "\n" +} + +restore() { - backpath="/images/backup" - backname="sicherung" + local date="$1" + local number="$2" + local machine="$3" + local path="$4" + local backup_root="/images/backup" + local backup_name="sicherung" + + local remote_user=${machine%%@*} + local remote_machine=${machine%:*} + local remote_machine=${remote_machine#*@} + local remote_port=${machine##*:} + local backup_dir="$date"_"$number"_"$backup_name" + + local restore_path="$backup_root/$backup_dir/$remote_machine$path" + local remote_path="$remote_user@$remote_machine:$path" + + echo "ℹ️ INFO: restore path $restore_path" + echo "ℹ️ INFO: remote path $remote_path" + echo + + local ask_restore="N" + read -p "❓ QUESTION: Do you want restore? [N/y] " ask_restore + local ask_restore=${ask_restore:-N} + local ask_restore=${ask_restore,,} + echo ${ask_restore,,} + + [ "$ask_restore" == "y" ] \ + || errlog "you want not do restore" \ + || return $? + + echo "ℹ️ INFO: restoring..." + + rsync --archive \ + --verbose \ + --sparse \ + --acls \ + --hard-links \ + --human-readable \ + --rsh "ssh -p $remote_port" \ + $restore_path \ + $remote_path \ + || errlog "could not restore" \ + || return $? + + echo "ℹ️ INFO: restored" } -## @fn ReadArguments() -## @brief Einlesung der Konsolenargumente -## @param Konsolenargumente -ReadArguments() +main() { + local date= + local number= + local machine= + local path= + + echo "⭐ START: restore" + + head -2 license + echo + while getopts "d:n:r:p:h" optname; do case "$optname" in "d") - datum="$OPTARG" + date="$OPTARG" ;; "n") number="$OPTARG" ;; "r") - rechner="$OPTARG" + machine="$OPTARG" ;; "p") - pfad="$OPTARG" + path="$OPTARG" ;; "h") useage @@ -48,71 +112,15 @@ ReadArguments() esac done - if [ -z "$datum" ] || [ -z "$rechner" ] || [ -z "$pfad" ] \ - || [ -z "$number" ]; then - printf "Es fehlen Parameter!\n" - exit 1 - fi -} - -## @fn printStripLine() -## @brief Gibt einen Trennungsstreifen auf der Konsole aus -printfStripLine() -{ - printf "####################" - printf "####################" - printf "####################" - printf "####################\n" -} + [ -n "$date" ] || errlog "missing date (-d)" || return $? + [ -n "$number" ] || errlog "missing number (-n)" || return $? + [ -n "$machine" ] || errlog "missing machine (-r)" || return $? + [ -n "$path" ] || errlog "missing path (-p)" || return $? -## @fn RestoreData() -## @brief Wiederherstellung der Daten -RestoreData() -{ - remoteuser=$(echo $rechner | sed 's/\(.*\)@.*/\1/') - remoterechner=$(echo $rechner | sed 's/.*@\(.*\):.*/\1/') - remoteport=$(echo $rechner | sed 's/.*@.*:\(.*\)/\1/') - remoteLogin=$remoteuser@$remoterechner - backDir="$datum"_"$number"_"$backname" - fullPathBackPath="$backpath/$backDir" - local restoreLog="$backpath/restore-$(date +%Y-%m-%d).log" - - savelog -nJ9 $backpath/restore-*.log - - printfStripLine - printf "Daten werden wiederhergestellt\n\n" \ - | tee $restoreLog - printf "vom Datum: %s\n" "$datum" \ - | tee -a $restoreLog - printf "Nummer: %s\n" "$number" \ - | tee -a $restoreLog - printf "Rechner: %s\n" "$rechner" \ - | tee -a $restoreLog - printf "Pfad: %s\n\n" "$pfad" \ - | tee -a $restoreLog - printf "rsync --archive --verbose --sparse --acls --hard-links \ ---human-readable --rsh \"ssh -p %s\" --log-file %s/%s %s/%s/%s %s:%s\n\n" \ - "$remoteport" "$backpath" "$restoreLog" "$fullPathBackPath" \ - "$remoterechner" "$pfad" "$remoteLogin" "$pfad" | tee -a $restoreLog - printfStripLine - - - rsync --archive --verbose --sparse --acls --hard-links \ - --human-readable \ - --rsh "ssh -p $remoteport" \ - --log-file $restoreLog $fullPathBackPath/$remoterechner/$pfad \ - $remoteLogin:$pfad -} + restore "$date" "$number" "$machine" "$path" \ + || return $? -## @fn main() -## @brief Ablauf des Skripts -main() -{ - head -2 license - echo - SetDefaultVariables - ReadArguments $* - RestoreData + echo "✅ SUCCESS: restore" } main $* -- 2.47.3