mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 10:19:09 +00:00 
			
		
		
		
	Renamed backup roles
This commit is contained in:
		
							
								
								
									
										85
									
								
								roles/svc-bkp-rmt-2-loc/files/sys-bkp-remote-to-local.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								roles/svc-bkp-rmt-2-loc/files/sys-bkp-remote-to-local.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| #!/bin/bash | ||||
| # @param $1 hostname from which backup should be pulled | ||||
|  | ||||
| echo "pulling backups from: $1" && | ||||
|  | ||||
| # error counter | ||||
| errors=0 && | ||||
|  | ||||
| echo "loading meta data..." && | ||||
|  | ||||
| remote_host="backup@$1" && | ||||
| echo "host address:         $remote_host" && | ||||
|  | ||||
| remote_machine_id="$( (ssh "$remote_host" sha256sum /etc/machine-id) | head -c 64 )" && | ||||
| echo "remote machine id:    $remote_machine_id" && | ||||
|  | ||||
| general_backup_machine_dir="/Backups/$remote_machine_id/" && | ||||
| echo "backup dir:           $general_backup_machine_dir" && | ||||
|  | ||||
| remote_backup_types="$(ssh "$remote_host" "find $general_backup_machine_dir -maxdepth 1 -type d -execdir basename {} ;")" && | ||||
| echo "backup types:          $remote_backup_types" || exit 1 | ||||
|  | ||||
| for backup_type in $remote_backup_types; do | ||||
|   if [ "$backup_type" != "$remote_machine_id" ]; then | ||||
|     echo "backup type:              $backup_type" && | ||||
|      | ||||
|     general_backup_type_dir="$general_backup_machine_dir""$backup_type/" && | ||||
|     general_versions_dir="$general_backup_type_dir" && | ||||
|     local_previous_version_dir="$(ls -d $general_versions_dir* | tail -1)" && | ||||
|     echo "last local backup:      $local_previous_version_dir" && | ||||
|  | ||||
|     remote_backup_versions="$(ssh "$remote_host" ls -d "$general_backup_type_dir"\*)" && | ||||
|     echo "remote backup versions:   $remote_backup_versions" && | ||||
|  | ||||
|  | ||||
|     remote_last_backup_dir=$(echo "$remote_backup_versions" | tail -1) && | ||||
|     echo "last remote backup:       $remote_last_backup_dir" && | ||||
|  | ||||
|     remote_source_path="$remote_host:$remote_last_backup_dir/" && | ||||
|     echo "source path:              $remote_source_path" && | ||||
|  | ||||
|     local_backup_destination_path=$remote_last_backup_dir && | ||||
|     echo "backup destination:       $local_backup_destination_path" && | ||||
|  | ||||
|     echo "creating local backup destination folder..." && | ||||
|     mkdir -vp "$local_backup_destination_path" && | ||||
|  | ||||
|     echo "starting backup..." | ||||
|     rsync_command='rsync -abP --delete --delete-excluded --rsync-path="sudo rsync" --link-dest="'$local_previous_version_dir'" "'$remote_source_path'" "'$local_backup_destination_path'"' | ||||
|  | ||||
|     echo "executing:                $rsync_command" | ||||
|  | ||||
|     retry_count=0 | ||||
|     max_retries=12 | ||||
|     retry_delay=300  # Retry delay in seconds (5 minutes) | ||||
|     last_retry_start=0 | ||||
|     max_retry_duration=43200  # Maximum duration for a single retry attempt (12 hours) | ||||
|  | ||||
|     while [[ $retry_count -lt $max_retries ]]; do | ||||
|       echo "Retry attempt: $((retry_count + 1))" | ||||
|       if [[ $retry_count -gt 0 ]]; then | ||||
|         current_time=$(date +%s) | ||||
|         last_retry_duration=$((current_time - last_retry_start)) | ||||
|         if [[ $last_retry_duration -ge $max_retry_duration ]]; then | ||||
|           echo "Last retry took more than 12 hours, increasing max retries to 12." | ||||
|           max_retries=12 | ||||
|         fi | ||||
|       fi | ||||
|       last_retry_start=$(date +%s) | ||||
|       eval "$rsync_command" | ||||
|       rsync_exit_code=$? | ||||
|       if [[ $rsync_exit_code -eq 0 ]]; then | ||||
|         break | ||||
|       fi | ||||
|       retry_count=$((retry_count + 1)) | ||||
|       sleep $retry_delay | ||||
|     done | ||||
|  | ||||
|     if [[ $rsync_exit_code -ne 0 ]]; then | ||||
|       echo "Error: rsync failed after $max_retries attempts" | ||||
|       ((errors += 1)) | ||||
|     fi | ||||
|   fi | ||||
| done | ||||
| exit $errors; | ||||
		Reference in New Issue
	
	Block a user