Naposledy aktivní 10 months ago

за Windows 11 с WSL2

urocibg revidoval tento gist 10 months ago. Přejít na revizi

Žádné změny

urocibg revidoval tento gist 10 months ago. Přejít na revizi

Žádné změny

urocibg revidoval tento gist 10 months ago. Přejít na revizi

1 file changed, 117 insertions

backup_sync_pve1.sh(vytvořil soubor)

@@ -0,0 +1,117 @@
1 + #!/bin/bash
2 +
3 + # Конфигурационен файл за първи Proxmox
4 + CONFIG_FILE="$(dirname "$0")/backup_config_pve1.conf"
5 + LOG_FILE="$(dirname "$0")/backup_sync_pve1.log"
6 + DOWNLOADED_FILE="$(dirname "$0")/.downloaded_backups_pve1"
7 +
8 + # Функция за логване
9 + log() {
10 + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
11 + }
12 +
13 + # Проверка дали конфигурационният файл съществува
14 + if [[ ! -f "$CONFIG_FILE" ]]; then
15 + log "ERROR: Конфигурационният файл $CONFIG_FILE не съществува!"
16 + cat > "$CONFIG_FILE" << 'EOF'
17 + # Конфигурация за Proxmox backup sync - PVE1
18 + PROXMOX_HOST=10.110.110.68
19 + PROXMOX_USER=root
20 + REMOTE_BACKUP_PATH=/backup512/dump
21 + LOCAL_BACKUP_PATH=/mnt/d/backup_proxmox_pve1
22 +
23 + # LXC контейнери за синхронизиране (разделени със запетая)
24 + LXC_IDS=111,114
25 +
26 + # SSH опции
27 + SSH_OPTIONS="-o ConnectTimeout=30 -o ServerAliveInterval=60"
28 +
29 + # Максимален брой дни за задържане на локални бекъпи (0 = безкрайно)
30 + KEEP_DAYS=30
31 + EOF
32 + log "Създаден е примерен конфигурационен файл: $CONFIG_FILE"
33 + log "Моля, редактирайте го според вашите нужди и стартирайте отново скрипта."
34 + exit 1
35 + fi
36 +
37 + # Зареждане на конфигурацията
38 + source "$CONFIG_FILE"
39 +
40 + # Създаване на локална директория ако не съществува
41 + mkdir -p "$LOCAL_BACKUP_PATH"
42 +
43 + # Създаване на файл за проследяване на свалените бекъпи
44 + touch "$DOWNLOADED_FILE"
45 +
46 + log "Започвам проверка за нови бекъпи от $PROXMOX_HOST..."
47 + log "Наблюдавани LXC контейнери: $LXC_IDS"
48 +
49 + # Функция за получаване на списък с отдалечени бекъпи
50 + get_remote_backups() {
51 + local lxc_id=$1
52 + ssh $SSH_OPTIONS "${PROXMOX_USER}@${PROXMOX_HOST}" \
53 + "find ${REMOTE_BACKUP_PATH} -name 'vzdump-lxc-${lxc_id}-*.tar.zst' -type f -printf '%f\n'" 2>/dev/null
54 + }
55 +
56 + # Функция за проверка дали бекъп е вече свален
57 + is_downloaded() {
58 + local backup_name=$1
59 + grep -Fxq "$backup_name" "$DOWNLOADED_FILE"
60 + }
61 +
62 + # Функция за маркиране на бекъп като свален
63 + mark_as_downloaded() {
64 + local backup_name=$1
65 + echo "$backup_name" >> "$DOWNLOADED_FILE"
66 + }
67 +
68 + # Функция за изтриване на стари локални бекъпи
69 + cleanup_old_backups() {
70 + if [[ "$KEEP_DAYS" -gt 0 ]]; then
71 + log "Изтривам локални бекъпи по-стари от $KEEP_DAYS дни..."
72 + find "$LOCAL_BACKUP_PATH" -name "vzdump-lxc-*.tar.zst" -type f -mtime +$KEEP_DAYS -delete
73 + fi
74 + }
75 +
76 + # Главен цикъл за всеки LXC контейнер
77 + IFS=',' read -ra LXC_ARRAY <<< "$LXC_IDS"
78 + for lxc_id in "${LXC_ARRAY[@]}"; do
79 + lxc_id=$(echo "$lxc_id" | xargs) # Премахване на интервали
80 + log "Проверявам за нови бекъпи на LXC $lxc_id..."
81 +
82 + # Получаване на списък с отдалечени бекъпи
83 + remote_backups=$(get_remote_backups "$lxc_id")
84 +
85 + if [[ -z "$remote_backups" ]]; then
86 + log "Няма намерени бекъпи за LXC $lxc_id"
87 + continue
88 + fi
89 +
90 + # Проверка за всеки бекъп
91 + while IFS= read -r backup_file; do
92 + [[ -z "$backup_file" ]] && continue
93 +
94 + if ! is_downloaded "$backup_file"; then
95 + log "Намерен нов бекъп: $backup_file"
96 + log "Започвам сваляне..."
97 +
98 + # Изпълнение на rsync
99 + if rsync -avz --partial --progress -e "ssh $SSH_OPTIONS" \
100 + "${PROXMOX_USER}@${PROXMOX_HOST}:${REMOTE_BACKUP_PATH}/${backup_file}" \
101 + "${LOCAL_BACKUP_PATH}/"; then
102 +
103 + log "Успешно свален: $backup_file"
104 + mark_as_downloaded "$backup_file"
105 + else
106 + log "ERROR: Грешка при сваляне на $backup_file"
107 + fi
108 + else
109 + log "Бекъп $backup_file вече е свален, прескачам..."
110 + fi
111 + done <<< "$remote_backups"
112 + done
113 +
114 + # Почистване на стари бекъпи
115 + cleanup_old_backups
116 +
117 + log "Завършена проверка за нови бекъпи от $PROXMOX_HOST."
Novější Starší