feat: container backup script
This commit is contained in:
		
							parent
							
								
									d92b574528
								
							
						
					
					
						commit
						db06336e67
					
				
							
								
								
									
										77
									
								
								admin/scripts/joj-container-backup
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										77
									
								
								admin/scripts/joj-container-backup
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| DATE=$(date +"%y%m%d") | ||||
| 
 | ||||
| bck_list() { | ||||
| 
 | ||||
| 	zfs list -t snapshot | ||||
| } | ||||
| 
 | ||||
| bck_update() { | ||||
| 
 | ||||
| 	LIST=($(zfs list -j -t snapshot | jq -rc '[ .datasets | .[] | {dataset: .dataset, version: .snapshot_name} ] | group_by(.dataset) | map({(.[0].dataset): .[-1].version}) | .[]' | tr "\n" " " | sed 's/[{}:"]/ /g')) | ||||
| 	for((i=0; i < ${#LIST[@]}; i+=2)); do  | ||||
| 		zfs snapshot ${LIST[i]}@$DATE | ||||
| 		zfs send -v -i ${LIST[i]}@${LIST[$((i+1))]} ${LIST[i]}@$DATE | ssh grothendieck.nabla.li zfs recv -F backup/${LIST[i]/joj\/} | ||||
| 	done | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| bck_prune() { | ||||
| 	 | ||||
| 	LIST=($(zfs list -j -t snapshot | jq -rc '[ .datasets | .[] | {dataset: .dataset, version: .snapshot_name} ] | group_by(.dataset) | map({(.[0].dataset): .[-3].version}) | .[]' | tr "\n" " " | sed 's/[{}:"]/ /g')) | ||||
| 
 | ||||
| 	for((i=0; i < ${#LIST[@]}; i+=2)); do  | ||||
| 		[ "${LIST[$((i+1))]}" != "null" ] && zfs destroy ${LIST[i]}@%${LIST[$((i+1))]} | ||||
| 	done | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| bck_init() { | ||||
| 
 | ||||
| 	zfs snapshot joj/$FS | ||||
| 	zfs send -v joj/$FS | ssh grothendieck.nabla.li zfs recv -F backup/$FS | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| test_net() { | ||||
| 	 | ||||
| 	if ! ping -c 1 grothendieck.nabla.li; then | ||||
| 		echo "Error: backup server cannot be reached." | ||||
| 		exit 20 | ||||
| 	fi | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| case $1 in | ||||
| 
 | ||||
| 	list)  | ||||
| 		bck_list  | ||||
| 		;; | ||||
| 
 | ||||
| 	update)  | ||||
| 		test_net | ||||
| 		bck_update  | ||||
| 		;; | ||||
| 
 | ||||
| 	prune)  | ||||
| 		bck_prune | ||||
| 		;; | ||||
| 
 | ||||
| 	init)  | ||||
| 		test_net | ||||
| 		shift | ||||
| 		if [ -z "$1" ]; then | ||||
| 			echo "Error: specificy the course code" | ||||
| 			exit 10 | ||||
| 		else | ||||
| 			FS=$1@$DATE | ||||
| 			bck_init  | ||||
| 		fi | ||||
| 		;; | ||||
| 
 | ||||
| 	*)  | ||||
| 		echo "Usage: $0 [list|init FSname|update|prune]" | ||||
| 		;; | ||||
| 
 | ||||
| esac | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user