Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

BorgBackup — deduplikacja, szyfrowanie i remote backup przez SSH

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Backup

BorgBackup to jeden z najpotężniejszych narzędzi do backupu dla Linuxa — łączy deduplikację na poziomie bloków, silne szyfrowanie, kompresję i elegancki CLI. W praktyce 30 dziennych snapshotów 20 GB systemu zajmuje 25 GB, a nie 600 GB. W tym przewodniku przejdziemy przez instalację, inicjalizację repo lokalnego i zdalnego, tworzenie archiwów, politykę prune, przywracanie danych i zabezpieczenie przez append-only mode.

Jak działa deduplikacja w Borg

Borg dzieli pliki na chunki zmiennej wielkości (buzhash, średnio ~2 MB) i przechowuje każdy chunk w repo tylko raz — po hashu SHA-256. Kolejne backupy odwołują się do istniejących chunków przez ich hash i zapisują tylko nowości. Efekt: dodanie pojedynczego pliku kosztuje jego rozmiar (nie rozmiar całego archiwum), a edycja końcówki wielkiego pliku zapisuje tylko zmieniony fragment.

Instalacja

# Debian / Ubuntu
sudo apt install borgbackup

# RHEL / Rocky
sudo dnf install borgbackup

# Single-file binary (najnowsza wersja)
wget https://github.com/borgbackup/borg/releases/latest/download/borg-linux64
chmod +x borg-linux64
sudo mv borg-linux64 /usr/local/bin/borg

# Weryfikacja
borg --version

Inicjalizacja repozytorium

# Lokalne repo
borg init --encryption=repokey-blake2 /mnt/backup/borgrepo

# Repo na zdalnym serwerze przez SSH (najczestszy scenariusz)
borg init --encryption=repokey-blake2 [email protected]:/srv/borg/vps01

# Podczas init Borg zapyta o passphrase - wpisz MOCNE haslo.
# Bez passphrase nie odzyskasz danych.

# Eksport klucza (zapisz bezpiecznie offline!)
borg key export [email protected]:/srv/borg/vps01 /root/borg-key-vps01.txt

Tryby szyfrowania: repokey-blake2 (klucz w repo, zalecane), keyfile-blake2 (klucz lokalnie, trzeba backupować), none (brak szyfrowania — NIE używaj w produkcji).

Tworzenie archiwum

# Aby nie trzymac passphrase w terminalu
export BORG_PASSPHRASE='twoje-mocne-haslo'
export BORG_REPO='[email protected]:/srv/borg/vps01'

# Utworz archiwum z nazwa zawierajaca hostname i date
borg create                                 \
    --verbose --stats --show-rc             \
    --compression zstd,3                    \
    --exclude-caches                        \
    --exclude '/var/cache/*'                \
    --exclude '/var/log/*.gz'               \
    --exclude '/tmp/*'                      \
    --exclude '/proc' --exclude '/sys'      \
    ::'{hostname}-{now:%Y-%m-%d_%H:%M}' \
    /etc /home /var/www /var/lib/mysql /root

zstd,3 to dobry balans szybkość/kompresja. Dla CPU-bound użyj lz4, dla maksymalnej kompresji zstd,22 albo lzma. Flaga --stats pokaże ile chunków było nowych vs deduplikowanych — typowo 95% po pierwszym backupie jest deduplikowane.

Prune policy — retencja starych archiwów

Bez prune repo rośnie w nieskończoność. Borg prune usuwa stare archiwa według polityki dziennej/tygodniowej/miesięcznej/rocznej — pamięta o najmłodszym z każdej kategorii:

# Zachowaj: 7 dziennych, 4 tygodniowe, 6 miesiecznych, 1 roczny
borg prune                           \
    --verbose --list --stats         \
    --glob-archives '{hostname}-*'   \
    --keep-daily 7                   \
    --keep-weekly 4                  \
    --keep-monthly 6                  \
    --keep-yearly 1                  \
    ::

# Po prune zwolnij miejsce (usuwa nieuzywane chunki)
borg compact

Uwaga: Od Borg 1.2 prune NIE zwalnia miejsca od razu — musisz uruchomić borg compact. Starsze wersje robiły to automatycznie.

Listowanie i restore

# Wszystkie archiwa w repo
borg list

# Zawartosc konkretnego archiwum
borg list ::vps01-2026-04-09_03:00

# Informacje o repo (rozmiar, liczba chunkow, deduplikacja)
borg info

# Restore calego archiwum do biezacego katalogu
mkdir /tmp/restore && cd /tmp/restore
borg extract ::vps01-2026-04-09_03:00

# Restore pojedynczego pliku / katalogu
borg extract ::vps01-2026-04-09_03:00 etc/nginx

# Mount archiwum jako FUSE (przegladanie bez extract)
mkdir /mnt/borgmount
borg mount ::vps01-2026-04-09_03:00 /mnt/borgmount
ls /mnt/borgmount
borg umount /mnt/borgmount

Append-only mode — ochrona przed ransomware

Jeśli klient zostanie skompromitowany, atakujący może uruchomić borg delete i zniszczyć backupy. Obrona: append-only mode na serwerze backup — klient może dodawać archiwa, ale nie usuwać. Prune robisz ręcznie lokalnie na serwerze backup z pełnym dostępem.

# /srv/borg/users/vps01/.ssh/authorized_keys (na serwerze backup)
command="borg serve --append-only --restrict-to-path /srv/borg/vps01",restrict ssh-ed25519 AAAA... vps01@example

Borg vs inne narzędzia

Narzędzie Deduplikacja Szyfrowanie Backendy Prune
Borg Tak (chunks, zmienna wielkość) Tak (AES-256, BLAKE2) Lokalny, SSH Tak (keep-*)
Restic Tak (chunks) Tak (AES-256) Lokalny, S3, B2, GCS, Azure, REST, SFTP Tak (forget)
rsync Nie (tylko --link-dest) Nie (SSH na transport) Lokalny, SSH, rsyncd Nie (ręcznie)
Duplicity Nie (diff-based) Tak (GPG) Lokalny, S3, FTP, WebDAV, SSH Tak

Automatyzacja przez cron / systemd timer

#!/bin/bash
# /usr/local/bin/borg-backup.sh
set -euo pipefail

export BORG_PASSPHRASE_FILE=/root/.borg-passphrase
export BORG_REPO='[email protected]:/srv/borg/vps01'

borg create --stats --compression zstd,3 \
    ::'{hostname}-{now:%Y-%m-%d_%H:%M}' \
    /etc /home /var/www /var/lib/mysql /root

borg prune --list --keep-daily 7 --keep-weekly 4 --keep-monthly 6 ::
borg compact

echo "Backup OK at $(date)" | tee -a /var/log/borg-backup.log
# Crontab - codziennie o 3:00
0 3 * * * /usr/local/bin/borg-backup.sh >> /var/log/borg-backup.log 2>&1

Najczęstsze pytania

Czym BorgBackup różni się od rsync? +
rsync kopiuje pliki zachowując strukturę katalogów — każda kopia to pełny obraz (z --link-dest możesz zrobić hardlinki dla oszczędności). Borg używa deduplikacji na poziomie chunków (~2 MB) — identyczne fragmenty plików są zapisane raz, niezależnie od ich położenia. W praktyce 30 dziennych snapshotów systemu zajmuje mniej więcej tyle co jeden pełny backup. Borg dodatkowo szyfruje i kompresuje repo. rsync jest szybszy dla jednorazowego sync, Borg wygrywa dla archiwum wielu wersji.
Jak bezpieczny jest Borg repository na obcym serwerze? +
Borg domyślnie używa client-side encryption — szyfrowanie odbywa się na kliencie przed wysłaniem, kluczem AES-256 chronionym passphrase. Osoba z dostępem do remote repo widzi tylko zaszyfrowane chunki bez możliwości odszyfrowania. Tryb repokey trzyma klucz w repo (bezpieczne jeśli passphrase jest mocne), keyfile trzyma klucz lokalnie (trzeba backupować). Dla maximum security używaj append-only mode na serwerze remote — nawet skompromitowany klient nie może usunąć starych archiwów.
Borg vs Restic — które wybrać? +
Borg jest szybszy dla scenariusza SSH-remote (natywny protokół), ma lepszą deduplikację i bardziej dojrzały prune. Restic obsługuje więcej backendów out of the box (S3, Backblaze, Google Cloud, Azure, REST server) i ma prostszy UX. Dla VPS-to-VPS przez SSH Borg wygrywa wydajnością. Dla backupu do S3/B2 Restic jest naturalnym wyborem. Obydwa mają deduplikację i szyfrowanie. Nie ma jednego lepszego — wybierz według backendu.
Co zrobić jeśli zapomnę passphrase do Borg repo? +
Nic. Passphrase chroni klucz szyfrujący i Borg nie ma backdooru — bez niego dane są nieodzyskiwalne. Dlatego zaraz po inicjalizacji repo zapisz klucz przez `borg key export` do bezpiecznego miejsca offline (password manager, wydruk w sejfie). Klucz to nie passphrase — to plik z kluczem szyfrującym chronionym przez passphrase. Jeśli masz klucz exportowany, możesz ustawić nowe passphrase przez `borg key change-passphrase`.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.