התקנת גיבוי BorgBackup & Borgmatic לשרתים
אתה מנהל 20–50 שרתים ומבלה שעות כל יום בבדיקת גיבויים ידנית. יום אחד ארכיון מתגלה כפגום, והשחזור לוקח יום במקום שעה. נשמע מוכר? BorgBackup עם Borgmatic פותר את הבעיה בצורה הצהרתית: דדופליקציה, הצפנה ובדיקה אוטומטית. אנו מיישמים את הערימה הזו במפתח מלא כדי שתוכל לישון בשקט.
למה Borg חוסך עד 60% מקום
rsync מעתיק קבצים שלמים כאשר תכונות או תוכן משתנים. Borg משתמש בחלוקה מבוססת תוכן: הוא מפצל קבצים לנתחים באמצעות אלגוריתם CDC ומאחסן נתחים ייחודיים רק פעם אחת. תוספת יומית טיפוסית היא 1–3% מהנפח המלא. עבור ספריות עם לוגים או מסדי נתונים, זה חיסכון רדיקלי במקום. הלקוחות שלנו חוסכים עד 60% בעלויות אחסון בהשוואה לפתרונות קלאסיים.
איך להגדיר Borgmatic ביום אחד
התקנה ואתחול מאגר הם השלב הראשון. המהנדס שלנו יוצר מפתחות SSH עם הגבלות, מגדיר את borg serve, ומאתחל מאגר מוצפן.
# На бэкап-сервере (куда пишем)
apt-get install borgbackup
# На клиенте
apt-get install borgbackup borgmatic
# Создаём SSH-ключ для бэкапа
ssh-keygen -t ed25519 -C "backup@client-server" -f /root/.ssh/borg_backup -N ""
# На бэкап-сервере добавляем ключ в authorized_keys с ограничениями
echo 'command="borg serve --restrict-to-path /mnt/backups/client1",restrict ssh-ed25519 AAAA...' \
>> /home/borg/.ssh/authorized_keys
# Инициализация репозитория
borg init --encryption=repokey-blake2 \
borg@backup-server:/mnt/backups/client1
# На бэкап-сервере (куда пишем) apt-get install borgbackup # На клиенте apt-get install borgbackup borgmatic # Создаём SSH-ключ для бэкапа ssh-keygen -t ed25519 -C "backup@client-server" -f /root/.ssh/borg_backup -N "" # На бэкап-сервере добавляем ключ в authorized_keys с ограничениями echo 'command="borg serve --restrict-to-path /mnt/backups/client1",restrict ssh-ed25519 AAAA...' \ >> /home/borg/.ssh/authorized_keys # Инициализация репозитория borg init --encryption=repokey-blake2 \ borg@backup-server:/mnt/backups/client1 — מפתח ההצפנה מאוחסן במאגר (מוגן באמצעות סיסמה). חלופה repokey-blake2 — מפתח בצד הלקוח, דורש גיבוי נפרד.
תצורת Borgmatic
---
# /etc/borgmatic/config.yaml
repositories:
- path: borg@backup-server:/mnt/backups/client1
label: remote-backup
source_directories:
- /etc
- /home
- /var/www
- /var/lib
exclude_patterns:
- /var/lib/lxcfs
- /var/lib/docker/overlay2
- '*.pyc'
- '*/__pycache__'
- '*/node_modules'
storage:
encryption_passphrase: "your-strong-passphrase"
compression: zstd,3
archive_name_format: '{hostname}-{now:%Y-%m-%d-%H%M%S}'
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
keep_yearly: 1
consistency:
checks:
- name: repository
frequency: 2 weeks
- name: archives
frequency: 1 month
- name: data
frequency: 3 months
hooks:
before_backup:
- /usr/local/bin/pre-backup.sh
after_backup:
- curl -fsS -m 10 --retry 5 https://hc-ping.com/YOUR-UUID
on_error:
- echo "Backup failed on $(hostname)" | mail -s "Borg backup error" [email protected]
keyfile — אימות נתונים מלא (פענוח ובדיקת hash). פעולה יקרה, הרץ לא יותר מפעם ברבעון. # /etc/borgmatic/config.yaml repositories: - path: borg@backup-server:/mnt/backups/client1 label: remote-backup source_directories: - /etc - /home - /var/www - /var/lib exclude_patterns: - /var/lib/lxcfs - /var/lib/docker/overlay2 - '*.pyc' - '*/__pycache__' - '*/node_modules' storage: encryption_passphrase: "your-strong-passphrase" compression: zstd,3 archive_name_format: '{hostname}-{now:%Y-%m-%d-%H%M%S}' retention: keep_daily: 7 keep_weekly: 4 keep_monthly: 6 keep_yearly: 1 consistency: checks: - name: repository frequency: 2 weeks - name: archives frequency: 1 month - name: data frequency: 3 months hooks: before_backup: - /usr/local/bin/pre-backup.sh after_backup: - curl -fsS -m 10 --retry 5 https://hc-ping.com/YOUR-UUID on_error: - echo "Backup failed on $(hostname)" | mail -s "Borg backup error" [email protected] — בודק מטא-דאטה של הארכיון, זול יותר.
ה-hook של consistency.checks.data שולח ping ל-Healthchecks.io — שירות ניטור גיבוי חיצוני. אם ה-ping לא מגיע בתוך החלון הצפוי, מופעלת התראה. זה פשוט יותר מבניית ניטור מותאם אישית.
טיימר systemd
תזמון ביצוע הגיבוי. השתמש ב-archives כדי ליצור אוטומטית יחידת systemd או ידנית דרך טיימר.
# Automatic timer
borgmatic --init
systemctl enable --now borgmatic.timer
# Or manual timer
cat > /etc/systemd/system/borgmatic.timer <<EOF
[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
systemctl enable --now borgmatic.timer Pre-backup hook למסדי נתונים
אם PostgreSQL רץ על השרת, בצע dump לפני הגיבוי:
#!/bin/bash
# /usr/local/bin/pre-backup.sh
set -euo pipefail
sudo -u postgres pg_dumpall --globals-only > /var/backups/pg_globals.sql
sudo -u postgres pg_dump mydb | gzip > /var/backups/mydb.sql.gz
Borg יאסוף את הקבצים האלה כחלק מהגיבוי של after_backup. זה dump לוגי על גבי פיזי — מיותר, אבל מבטיח שחזור של טבלה בודדת ללא שחזור כל השרת.
איך לשחזר נתונים מגיבוי: שלב אחר שלב
# Список архивов
borgmatic list
# Восстановить весь последний архив
borgmatic extract --archive latest
# Восстановить конкретный файл в другую директорию
borgmatic extract --archive latest \
--path /etc/nginx/nginx.conf \
--destination /tmp/restoreניתן לבצע שחזור על שרת אחר: פשוט שנה את היעד והרכב את המאגר דרך SSH. זו יכולת מפתח עבור Disaster Recovery.
השוואה: Borg מול rsync
| פרמטר | Borg | rsync |
|---|---|---|
| דדופליקציה | ברמת נתח (CDC) | לא, מעתיק קבצים שלמים |
| תוספת | 1–3% נפח | 10–50% בשינויי מטא-דאטה |
| הצפנה | מובנית, AES-256 | בדרך כלל דרך SSH |
| מהירות שחזור מלא | 1–5 דקות ל-10 GB | 5–20 דקות ל-10 GB |
דוגמת סכימת שמירה
| סוג עותק | שמירה | תדירות | מקום בשימוש (על 500 GB) |
|---|---|---|---|
| יומי | 7 ימים | 1/יום | ~15 GB |
| שבועי | 4 שבועות | 1/שבוע | ~5 GB |
| חודשי | 6 חודשים | 1/חודש | ~3 GB |
| מלא (שנתי) | שנה אחת | 1/שנה | ~500 GB |
טעויות נפוצות בהגדרת Borg
-
תדירות בדיקה לא מספקת: ארכיונים יכולים להיפגם בשקט. תזמן בדיקות
borgmatic --initלפחות רבעונית. - סיסמת הצפנה חלשה: השתמש בסיסמה באורך 20+ תווים.
-
התעלמות מ-hooks: ללא
# Automatic timer borgmatic --init systemctl enable --now borgmatic.timer # Or manual timer cat > /etc/systemd/system/borgmatic.timer <<EOF [Timer] OnCalendar=*-*-* 01:00:00 Persistent=true [Install] WantedBy=timers.target EOF systemctl enable --now borgmatic.timer, לא תדע אם גיבוי נכשל.
אנו ממליצים להוסיף #!/bin/bash # /usr/local/bin/pre-backup.sh set -euo pipefail sudo -u postgres pg_dumpall --globals-only > /var/backups/pg_globals.sql sudo -u postgres pg_dump mydb | gzip > /var/backups/mydb.sql.gz לתצורה לזיהוי קל. ותמיד בדוק שחזור לאחר הפריסה — זו הדרך היחידה להיות בטוח שהגיבוי עובד. אם אתה צריך פתרון למספר שרתים, צור קשר — נכין תצורה אחידה עם ניטור מרכזי.
מה כוללת העבודה
- ביקורת על התשתית הנוכחית ובחירת אחסון
- התקנה ותצורה של BorgBackup/Borgmatic על שרתים
- יצירת מפתחות SSH והגבלות (restrict)
- הגדרת תזמון דרך טיימר systemd או crontab
- אינטגרציה עם Healthchecks.io או הניטור שלך
- כתיבת hooks ל-dumps של מסדי נתונים
- הגדרת שמירה ובדיקת שלמות
- תיעוד והדרכה לצוות שלך
- בדיקת שחזור לפי רשימת בדיקה
למה לבחור בנו
הצוות שלנו — 5+ שנות ניסיון ב-DevOps, מעל 50 פרויקטי גיבוי. אנו מבטיחים ללא הפתעות במהלך השחזור: כל ההגדרות מתועדות, ואנו מבצעים תרגיל שחזור לאחר הפריסה.
זמן הגדרה: 1–2 ימים לשרת בודד, עד 3 ימים לקלאסטר. העלות מחושבת באופן אישי — חיסכון באחסון מכסה את ההתקנה תוך פחות מ-3 חודשים.
רוצה גיבוי אמין? צור קשר — נעריך את הפרויקט שלך. או כתוב לנו, ונכין תצורה תוך שעה.
עוד על Borg: תיעוד BorgBackup







