|
@@ -0,0 +1,76 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+
|
|
|
|
|
+# Variables
|
|
|
|
|
+BACKUP_DIR="./testbak" # Change this to your desired backup directory
|
|
|
|
|
+TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
|
+
|
|
|
|
|
+# List of volumes to backup
|
|
|
|
|
+#VOLUMES=("nc202501_redis" "nc202501_oo_data" "nc202501_es_root" "nc202501_es_index" "nc202501_db" "nc202501_clamav") # Replace with your volume names
|
|
|
|
|
+VOLUMES=("nc202501_redis" "nc202501_oo_data" "nc202501_es_root" "nc202501_clamav") # Replace with your volume names
|
|
|
|
|
+
|
|
|
|
|
+# Ensure backup directory exists
|
|
|
|
|
+mkdir -p "$BACKUP_DIR"
|
|
|
|
|
+
|
|
|
|
|
+# Function to check if a volume is empty
|
|
|
|
|
+is_volume_empty() {
|
|
|
|
|
+ local volume_name=$1
|
|
|
|
|
+
|
|
|
|
|
+ # Use a temporary container to check if the volume is empty
|
|
|
|
|
+ if docker run --rm -v "$volume_name:/volume" alpine sh -c '[ -z "$(ls -A /volume)" ]'; then
|
|
|
|
|
+ return 0 # Volume is empty
|
|
|
|
|
+ else
|
|
|
|
|
+ return 1 # Volume is not empty
|
|
|
|
|
+ fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+# Function to get the next sequence number for a volume
|
|
|
|
|
+get_next_sequence_number() {
|
|
|
|
|
+ local volume_name=$1
|
|
|
|
|
+ local sequence=1
|
|
|
|
|
+
|
|
|
|
|
+ # Find the highest sequence number for the volume
|
|
|
|
|
+ while [ -f "$BACKUP_DIR/${volume_name}_backup_$(printf "%04d" $sequence)_*.tar.bz2" ]; do
|
|
|
|
|
+ sequence=$((sequence + 1))
|
|
|
|
|
+ done
|
|
|
|
|
+
|
|
|
|
|
+ echo "$sequence"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# Loop through each volume and perform the backup
|
|
|
|
|
+for volume in "${VOLUMES[@]}"; do
|
|
|
|
|
+
|
|
|
|
|
+ # Check if the volume is empty
|
|
|
|
|
+ if is_volume_empty "$volume"; then
|
|
|
|
|
+ echo "Skipping empty volume: $volume"
|
|
|
|
|
+ continue
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ # Get the next sequence number for this volume
|
|
|
|
|
+ sequence=$(get_next_sequence_number "$volume")
|
|
|
|
|
+
|
|
|
|
|
+ # Define the backup file name
|
|
|
|
|
+
|
|
|
|
|
+ BACKUP_FILE="$BACKUP_DIR/${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}.tar.bz2"
|
|
|
|
|
+ # Create a temporary container to backup the volume
|
|
|
|
|
+ echo "Backing up volume: $volume to $BACKUP_FILE"
|
|
|
|
|
+ # docker run --rm \
|
|
|
|
|
+ # -v "$BACKUP_DIR:/backup" \
|
|
|
|
|
+ # -v "$volume:/volume" \
|
|
|
|
|
+ # alpine tar czf "/backup/${volume}_backup_${sequence}_${TIMESTAMP}.tar.bz2" -C / volume
|
|
|
|
|
+# echo docker run --rm -v $volume:/volume -v $BACKUP_DIR:/backup" --rm loomchild/volume-backup backup -v ${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}"
|
|
|
|
|
+ docker run -v "$volume:/volume" -v "$BACKUP_DIR:/backup" --rm loomchild/volume-backup backup -v ${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ # Check if the backup was successful
|
|
|
|
|
+ if [ $? -eq 0 ]; then
|
|
|
|
|
+ echo "Backup completed successfully: $BACKUP_FILE"
|
|
|
|
|
+ else
|
|
|
|
|
+ echo "Backup failed for volume: $volume!"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+done
|
|
|
|
|
+
|
|
|
|
|
+echo "All backups completed successfully!"
|
|
|
|
|
+
|