#!/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!"