bak_all_vol.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/bin/bash
  2. # Variables
  3. BACKUP_DIR="./testbak" # Change this to your desired backup directory
  4. TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
  5. # List of volumes to backup
  6. #VOLUMES=("nc202501_redis" "nc202501_oo_data" "nc202501_es_root" "nc202501_es_index" "nc202501_db" "nc202501_clamav") # Replace with your volume names
  7. VOLUMES=("nc202501_redis" "nc202501_oo_data" "nc202501_es_root" "nc202501_clamav") # Replace with your volume names
  8. # Ensure backup directory exists
  9. mkdir -p "$BACKUP_DIR"
  10. # Function to check if a volume is empty
  11. is_volume_empty() {
  12. local volume_name=$1
  13. # Use a temporary container to check if the volume is empty
  14. if docker run --rm -v "$volume_name:/volume" alpine sh -c '[ -z "$(ls -A /volume)" ]'; then
  15. return 0 # Volume is empty
  16. else
  17. return 1 # Volume is not empty
  18. fi
  19. }
  20. # Function to get the next sequence number for a volume
  21. get_next_sequence_number() {
  22. local volume_name=$1
  23. local sequence=1
  24. # Find the highest sequence number for the volume
  25. while [ -f "$BACKUP_DIR/${volume_name}_backup_$(printf "%04d" $sequence)_*.tar.bz2" ]; do
  26. sequence=$((sequence + 1))
  27. done
  28. echo "$sequence"
  29. }
  30. # Loop through each volume and perform the backup
  31. for volume in "${VOLUMES[@]}"; do
  32. # Check if the volume is empty
  33. if is_volume_empty "$volume"; then
  34. echo "Skipping empty volume: $volume"
  35. continue
  36. fi
  37. # Get the next sequence number for this volume
  38. sequence=$(get_next_sequence_number "$volume")
  39. # Define the backup file name
  40. BACKUP_FILE="$BACKUP_DIR/${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}.tar.bz2"
  41. # Create a temporary container to backup the volume
  42. echo "Backing up volume: $volume to $BACKUP_FILE"
  43. # docker run --rm \
  44. # -v "$BACKUP_DIR:/backup" \
  45. # -v "$volume:/volume" \
  46. # alpine tar czf "/backup/${volume}_backup_${sequence}_${TIMESTAMP}.tar.bz2" -C / volume
  47. # echo docker run --rm -v $volume:/volume -v $BACKUP_DIR:/backup" --rm loomchild/volume-backup backup -v ${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}"
  48. docker run -v "$volume:/volume" -v "$BACKUP_DIR:/backup" --rm loomchild/volume-backup backup -v ${volume}_backup-$(printf "%04d" $sequence)_${TIMESTAMP}
  49. # Check if the backup was successful
  50. if [ $? -eq 0 ]; then
  51. echo "Backup completed successfully: $BACKUP_FILE"
  52. else
  53. echo "Backup failed for volume: $volume!"
  54. exit 1
  55. fi
  56. done
  57. echo "All backups completed successfully!"