Ultima attività 1 month ago

за Windows 11 с WSL2, малкия сървър

urocibg ha revisionato questo gist 1 month ago. Vai alla revisione

1 file changed, 6 insertions, 5 deletions

backup_sync_pve2.sh

@@ -97,15 +97,16 @@ for lxc_id in "${LXC_ARRAY[@]}"; do
97 97 log "Започвам сваляне..."
98 98
99 99 # Изпълнение на rsync
100 - if rsync -avz --partial --progress \
101 - -e "ssh $SSH_OPTIONS" \
100 + rsync -avz --partial --progress \
101 + -e "ssh ${SSH_OPTIONS}" \
102 102 "${PROXMOX_USER}@${PROXMOX_HOST}:${REMOTE_BACKUP_PATH}/${backup_file}" \
103 - "${LOCAL_BACKUP_PATH}/"; then
104 -
103 + "${LOCAL_BACKUP_PATH}/" 2>&1 | tee -a "$LOG_FILE"
104 +
105 + if [ ${PIPESTATUS[0]} -eq 0 ]; then
105 106 log "Успешно свален: $backup_file"
106 107 mark_as_downloaded "$backup_file"
107 108 else
108 - log "ERROR: Грешка при сваляне на $backup_file"
109 + log "ERROR: Грешка при сваляне на $backup_file (rsync exit code: ${PIPESTATUS[0]})"
109 110 fi
110 111 else
111 112 log "Бекъп $backup_file вече е свален, прескачам..."

urocibg ha revisionato questo gist 1 month ago. Vai alla revisione

1 file changed, 2 insertions, 1 deletion

backup_sync_pve2.sh

@@ -97,7 +97,8 @@ for lxc_id in "${LXC_ARRAY[@]}"; do
97 97 log "Започвам сваляне..."
98 98
99 99 # Изпълнение на rsync
100 - if rsync -avz --partial --progress -e "ssh $SSH_OPTIONS" \
100 + if rsync -avz --partial --progress \
101 + -e "ssh $SSH_OPTIONS" \
101 102 "${PROXMOX_USER}@${PROXMOX_HOST}:${REMOTE_BACKUP_PATH}/${backup_file}" \
102 103 "${LOCAL_BACKUP_PATH}/"; then
103 104

urocibg ha revisionato questo gist 1 month ago. Vai alla revisione

1 file changed, 118 insertions

backup_sync_pve2.sh(file creato)

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