Borg فقط بخشهای تغییرکرده را ارسال میکند (deduplication)، داده را فشرده و رمزنگاری میکند و هر بکاپ را بهصورت یک نسخهی کامل قابل بازیابی نگه میدارد. در این آموزش web01 بکاپ میگیرد و backup01 مخزن را نگه میدارد.
۱. نصب روی هر دو سرور
sudo apt install -y borgbackup
borg --versionنسخهی Borg دو سرور باید از یک سری (1.x) باشد.
۲. کاربر محدود روی سرور بکاپ
روی backup01:
sudo adduser --disabled-password --gecos '' borg
sudo -u borg mkdir -p /home/borg/repos/web01روی web01 یک کلید SSH مخصوص بکاپ بسازید:
sudo ssh-keygen -t ed25519 -N '' -f /root/.ssh/borg_ed25519
sudo cat /root/.ssh/borg_ed25519.pubروی backup01، کلید را با محدودیت به /home/borg/.ssh/authorized_keys اضافه کنید. این کلید فقط میتواند borg serve را روی همان مخزن اجرا کند و نه هیچ دستور دیگری:
command="borg serve --restrict-to-path /home/borg/repos/web01 --append-only",restrict ssh-ed25519 AAAA... root@web01--append-only یعنی اگر web01 هک شود، مهاجم نمیتواند بکاپهای قبلی را پاک کند. این بهترین دفاع در برابر باجافزار است.
۳. ساخت مخزن
روی web01:
export BORG_RSH='ssh -i /root/.ssh/borg_ed25519'
export BORG_REPO='ssh://borg@backup01/home/borg/repos/web01'
sudo -E borg init --encryption=repokey-blake2
sudo -E borg key export "$BORG_REPO" /root/borg-web01.keyرمز مخزن و فایل کلید را بیرون از هر دو سرور نگه دارید (مثلاً در گاوصندوق رمز). بدون اینها بکاپ قابل بازیابی نیست.
۴. اسکریپت بکاپ
/usr/local/sbin/borg-backup.sh:
#!/bin/bash
set -euo pipefail
export BORG_RSH='ssh -i /root/.ssh/borg_ed25519'
export BORG_REPO='ssh://borg@backup01/home/borg/repos/web01'
export BORG_PASSCOMMAND='cat /root/.borg-pass'
borg create --stats --compression zstd,6 --exclude-caches \
--exclude '/var/cache/*' --exclude '/var/tmp/*' \
::'{hostname}-{now:%Y-%m-%d_%H%M}' \
/etc /var/www /home /root /var/backups
borg prune --list --keep-daily 7 --keep-weekly 4 --keep-monthly 6sudo chmod 700 /usr/local/sbin/borg-backup.sh
sudo sh -c 'read -rs -p "Repo passphrase: " p; echo "$p" > /root/.borg-pass'; sudo chmod 600 /root/.borg-passپایگاه داده را مستقیم از فایلهایش بکاپ نگیرید. پیش از Borg یک dump در /var/backups بسازید.
در حالت--append-only، دستورpruneفقط علامت حذف میزند و فضای مخزن آزاد نمیشود. برای آزاد کردن فضا،borg compactرا هر چند وقت یک بار از خود backup01 (با دسترسی کامل) اجرا کنید.
۵. زمانبندی با systemd
sudo tee /etc/systemd/system/borg-backup.service >/dev/null <<'EOT'
[Unit]
Description=Borg backup
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/borg-backup.sh
EOT
sudo tee /etc/systemd/system/borg-backup.timer >/dev/null <<'EOT'
[Unit]
Description=Nightly Borg backup
[Timer]
OnCalendar=*-*-* 01:30
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
EOT
sudo systemctl daemon-reload && sudo systemctl enable --now borg-backup.timer
sudo systemctl start borg-backup.service && journalctl -u borg-backup -n 30 --no-pager۶. بازیابی (حتماً آزمایش کنید)
sudo -E borg list
sudo -E borg list ::web01-2026-11-08_0130 etc/nginx
cd /tmp && sudo -E borg extract ::web01-2026-11-08_0130 etc/nginx/nginx.conf
sudo -E borg check --verify-data # occasionally; reads all dataبکاپی که بازیابیاش را آزمایش نکردهاید، بکاپ حساب نمیشود. ماهی یک بار یک فایل را واقعاً بازیابی کنید.