فهرست منبع

add backup volume scripts

larry1chan@qq.com 1 سال پیش
والد
کامیت
65be729b43
5فایلهای تغییر یافته به همراه141 افزوده شده و 5 حذف شده
  1. 2 1
      .env
  2. 1 0
      .gitignore
  3. 76 0
      bak_all_vol.sh
  4. 61 0
      bak_all_vol2.sh
  5. 1 4
      docker-compose.yml

+ 2 - 1
.env

@@ -1,4 +1,5 @@
-STORAGE_ROOT=/home/orbitzs/projects/nc2
+#STORAGE_ROOT=/home/orbitzs/projects/nc2
+STORAGE_ROOT=/media/orbitzs/nextcloud_files/apex
 DATA_VOLUME_ROOT=$STORAGE_ROOT/storage
 MYSQL_ROOT_PASSWORD=2eqQ6Rqs
 MYSQL_PASSWORD=123456

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 storage 
 duplicati
+testbak

+ 76 - 0
bak_all_vol.sh

@@ -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!"
+

+ 61 - 0
bak_all_vol2.sh

@@ -0,0 +1,61 @@
+#!/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_index"  "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
+}
+
+
+
+# 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
+
+
+  # Define the backup file name
+  
+  BACKUP_FILE="$BACKUP_DIR/${volume}_backup-${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
+  docker run -v "$volume:/volume" -v "$BACKUP_DIR:/backup" --rm loomchild/volume-backup  backup -v ${volume}_backup-${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!"
+

+ 1 - 4
docker-compose.yml

@@ -22,10 +22,6 @@ volumes:
     name: ${CONTAINER_NAME}_db
     driver: local
 
-  db_r1:
-    name: ${CONTAINER_NAME}_db_r1
-    driver: local
-
   redis:
     name: ${CONTAINER_NAME}_redis
     driver: local
@@ -169,6 +165,7 @@ services:
       DUPLICATI__WEBSERVICE_PASSWORD: "123456" #optional
     volumes:
       - ./duplicati/appdata/config:/config
+      - ./duplicati/data:/data
       - duplicati_backups:/backups
       - db:/source/db
       - redis:/source/redis