 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  BorgBackup — deduplikacja i backup

# 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 user@backup.example.com:/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 user@backup.example.com:/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='user@backup.example.com:/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='user@backup.example.com:/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.

Contabo

Storage VPS z dużym dyskiem — dedykowany backup target dla Borg repo

Storage VPS

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS jako drugorzędny cel backupów offsite

Offsite

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Managed hosting z wbudowanymi backupami — alternatywa bez setupu Borg

Managed

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [rsync — kopia zapasowa VPS](/baza-wiedzy/rsync-kopia-zapasowa-vps)
-   [Strategia backupu 3-2-1](/baza-wiedzy/backup-strategia-hosting)
-   [MySQL — automatyzacja backupu](/baza-wiedzy/mysql-backup-automatyzacja)
-   [Wszystkie artykuły](/baza-wiedzy/)