Jedną z zalet świata cyfrowego w porównaniu do fizycznego jest możliwość ochrony naszych „wartościowych” danych przed trwałą utratą. Znam osoby, które straciły wszystkie zdjęcia, książki i dokumenty w wyniku pożaru lub powodzi. Gdyby tylko mieli cyfrowe wersje tych rzeczy — moglibyśmy je uratować. Wystarczy jedno kliknięcie, by skopiować dane, a terabajty informacji można dziś przenosić na dysku mniejszym niż portfel. Poznajlinuxa.pl ułatwi Tobie zrozumienie bezpiecznego robienia kopii zapasowych (backupowania) w Linuxie.

Dlaczego nie chmura?
Podczas pracy nad tym artykułem rozmawiałem z wieloma użytkownikami o ich strategiach tworzenia kopii zapasowych. Okazało się, że część z nich używa publicznej chmury jako głównego miejsca przechowywania danych.
Ja sam nie korzystam z publicznych ani zewnętrznych usług chmurowych jako głównego backupu — z kilku powodów. Przede wszystkim mam ponad 3 TB danych, a zakup takiej przestrzeni w chmurze byłby bardzo kosztowny. Przykładowo: 1 TB na Google Drive kosztuje ponad 120 USD rocznie, a 10 TB to już 100 USD miesięcznie. To nie jedyny problem — dostęp do tych danych zużywa ogromne ilości transferu, co może wzbudzić podejrzenia mojego dostawcy internetu.
Największe zagrożenie? Przestajesz płacić — tracisz dane.
Dodatkowo, korzystając z takich usług, Twoje dane podlegają różnym przepisom prawnym i mogą być udostępnione organom państwowym bez Twojej wiedzy. Dostawca usług może przejąć kontrolę nad Twoimi plikami i zablokować Ci do nich dostęp — np. z powodu niejasnych naruszeń praw autorskich.
Prywatne chmury, takie jak ownCloud czy Seafile, są alternatywą, ale i one niosą ryzyko. Dane opuszczają Twoją sieć lokalną, są narażone na ataki z zewnątrz, a transfer i przechowywanie generują dodatkowe koszty.
Sam korzystam z prywatnej chmury, ale tylko do danych, które muszą być dostępne poza siecią lokalną lub są współdzielone. Nigdy nie używam jej jako backupu.
Spokój i lokalna kopia
Za mniej niż 700 zł mogę kupić dysk NAS o pojemności 4 TB, który posłuży mi przez 3–4 lata. Nie muszę martwić się o transfer danych ani o to, że ktoś mnie z nich odetnie.
Skoro już zdecydowałem się na lokalne przechowywanie danych, muszę zadbać o to, by ich nie utracić. Pierwszym krokiem jest wykonanie kopii zapasowej i skonfigurowanie systemu do regularnego backupu.
Istnieje wiele narzędzi z interfejsem graficznym — niektóre są domyślnie instalowane w dystrybucjach Linuksa. Ale ponieważ używam serwera plików bez środowiska graficznego, korzystam z narzędzi terminalowych. I właśnie o tym będzie ten artykuł.
Stawiam na prostotę, dlatego moim wyborem jest rsync
.
Czym jest rsync?
Rsync to skrót od „remote sync” — narzędzie stworzone przez Andrew Tridgella i Paula Mackerrasa w 1996 roku. To jedno z najczęściej używanych narzędzi w świecie UNIX-a, niemal standard w synchronizacji danych. Większość dystrybucji Linuksa ma rsync zainstalowane domyślnie, a jeśli nie — wystarczy doinstalować pakiet rsync
.
Rsync to potężne narzędzie — nie tylko kopiuje pliki, ale umożliwia synchronizację katalogów na tym samym komputerze, w sieci lokalnej, a nawet między maszynami oddalonymi o tysiące kilometrów.
Funkcjonalność rsync można rozszerzać za pomocą opcji, o których zaraz opowiem.
Podstawowa składnia:
rsync opcje katalog_źródłowy katalog_docelowy
Załóżmy, że masz katalog /media/hdd1/data-1
na dysku 1 i chcesz go skopiować na nowy dysk zamontowany pod /media/hdd2
:
rsync -r /media/hdd1/data-1 /media/hdd2/
Opcja -r
oznacza rekurencję — rsync zsynchronizuje również podkatalogi.
Gdy katalog data-1
zostanie utworzony na dysku hdd2, możesz synchronizować jego zawartość:
rsync -r /media/hdd1/data-1/ /media/hdd2/data-1/
Uwaga na ukośnik na końcu — jego brak spowoduje utworzenie nowego katalogu wewnątrz katalogu docelowego.
Możesz też utworzyć nowy katalog docelowy i zsynchronizować go ze źródłem:
rsync -r /media/hdd1/data-1/ /media/hdd2/data-2/
Jeśli chcesz zachować symlinki, uprawnienia, właścicieli plików i daty modyfikacji — użyj opcji -a
:
rsync -a /media/hdd1/data-1/ /media/hdd2/data-2/
Jeśli usuniesz pliki ze źródła i chcesz, by zniknęły też z kopii — dodaj --delete
:
rsync -a --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Aby zobaczyć postęp synchronizacji w terminalu, dodaj -v
:
rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Dla szybszego transferu przez sieć warto skompresować dane — opcja -z
:
rsync -avz --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Dodatkowo możesz użyć -P
, by zobaczyć częściowy postęp:
rsync -avzP --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Praca na maszynach sieciowych
Na moim lokalnym serwerze plików przechowuję wszystkie dane i montuję go na innych urządzeniach. Dzięki temu pliki są zawsze aktualne i mogę pracować z dowolnego komputera.
Nie montuję dysku backupowego — gdybym na nim pracował, rsync nadpisałby zmiany z głównego dysku. Na szczęście rsync ma opcję -u
, która pomija pliki nowsze niż te w źródle:
rsync -avu --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Synchronizacja przez sieć
Tu wkracza protokół SSH. Aby zsynchronizować katalog zdalny z lokalnym:
rsync -avzP --delete -e ssh user@adres_IP:ścieżka_źródłowa /ścieżka_docelowa/
Przykład:
rsync -avzP --delete -e ssh user@192.168.1.10:/home/user/backup/ /media/internal/local_backup/
Aby zsynchronizować lokalny katalog ze zdalnym:
rsync -avzP --delete -e ssh /home/user/Downloads/ user@192.168.1.10:/home/user/Downloads/
Przykłady użycia rsync w terminalu Linuxa
Poniżej przedstawiono praktyczne przykłady użycia rsync z omówionymi wcześniej flagami. Wszystkie przykłady zawierają wiele opcji — najczęściej używane v
(szczegółowe wyjście) i h
(czytelny format dla człowieka) wpływają jedynie na sposób prezentacji wyników i zdecydowanie warto je stosować.
Lokalnie do lokalnie
rsync -ahv /ścieżka/źródłowa/ /ścieżka/docelowa/
Użyj tego polecenia, jeśli chcesz skopiować pliki i katalogi z jednego miejsca do drugiego na tym samym komputerze.
Ustawianie właściciela i uprawnień
rsync -vh --chown=użytkownik:grupa --chmod=755 /ścieżka/źródłowa/ /ścieżka/docelowa/
Zamiast używać flagi -a
(archiwum), ręcznie ustawiamy właściciela plików i ich uprawnienia.
Wykonanie testowego uruchomienia (dry run)
rsync -avh --dry-run /ścieżka/źródłowa/ /ścieżka/docelowa/
W tym przykładzie nic nie zostanie faktycznie przesłane — wynik służy do sprawdzenia poprawności polecenia.
Lokalnie do zdalnie
rsync -avhz /ścieżka/źródłowa/ użytkownik@198.51.100.54:/ścieżka/docelowa/
Transfer danych z lokalnej maszyny na zdalną z użyciem kompresji.
Lokalnie do zdalnie z limitem przepustowości
rsync -avhz --bwlimit=100M /ścieżka/źródłowa/ użytkownik@198.51.100.54:/ścieżka/docelowa/
Transfer z lokalnej maszyny na zdalną z kompresją i ograniczeniem przepustowości.
Zdalnie do lokalnie
rsync -avhz użytkownik@198.51.100.54:/ścieżka/źródłowa/ /ścieżka/docelowa/
Synchronizacja danych ze zdalnej maszyny na lokalną z kompresją.
Zdalnie do lokalnie z niestandardowym portem
rsync -avhz -e 'ssh -p <numer-portu>' użytkownik@198.51.100.54:/ścieżka/źródłowa/ /ścieżka/docelowa/
Transfer ze zdalnej maszyny na lokalną z kompresją przez niestandardowy port SSH.
Wyświetlenie statystyk po transferze
rsync --stats -avh /ścieżka/źródłowa/ /ścieżka/docelowa/
Aktualizacja plików nowszych i wyświetlenie statystyk transferu.
Synchronizacja plików mniejszych niż 1 GB i większych niż 1 MB
rsync --max-size=1G --min-size=1M -avh /ścieżka/źródłowa/ /ścieżka/kopii/
Ustawienie limitu rozmiaru plików do synchronizacji.
Aktualizacja plików i katalogów
rsync -avhu /ścieżka/źródłowa/ /ścieżka/docelowa/
Pliki nowsze w źródle nadpiszą starsze wersje w miejscu docelowym; pliki nieistniejące zostaną skopiowane.
Ignorowanie istniejących plików
rsync --ignore-existing -avh /ścieżka/źródłowa/ /ścieżka/docelowa/
Istniejące pliki zostaną pominięte, a brakujące zostaną skopiowane.
Usuwanie plików po transferze
rsync -ahv --remove-source-files /ścieżka/źródłowa/ /ścieżka/docelowa/
Po zakończeniu transferu pliki źródłowe zostaną usunięte.
Porady i sztuczki powiązane z rsync
- Zawsze wykonuj testowe uruchomienie (
--dry-run
) z flagą-v
, aby upewnić się, że wszystko działa poprawnie. - Przy transferze między systemami zdalnymi warto ustawić limit przepustowości (
--bwlimit
). - Kompresja (
-z
) przydaje się przy przesyłaniu danych przez sieć. - Jeśli używasz opcji usuwania (
--delete
,--remove-source-files
), upewnij się, że rozumiesz ich działanie. - Jeśli nie masz specjalnych wymagań co do uprawnień, używaj trybu archiwum (
-a
), który je zachowuje. - Jeśli chcesz filtrować pliki, rozważ połączenie rsync z poleceniem
find
.
Przykład użycia rsync z find
:
find źródło -type f -exec rsync -avh --progress {} cel \;
Automatyzacja backupu z rsync w Linuxie
Nie musisz dodawać backupu do kalendarza — łatwiej go zautomatyzować. Używam do tego crontab
— prostego i lekkiego narzędzia.
Możesz ustawić harmonogram: codziennie, co tydzień, co miesiąc itd. Ja synchronizuję dane codziennie o 23:30.
Na Arch Linuksie zainstaluj cronie
. Wybierz edytor, np. nano:
export EDITOR=nano
Uruchom:
crontab -e
Format wpisu:
m h dm m dw polecenie
Przykład codziennego backupu o 23:30:
30 23 * * * rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/
Trzymaj jedną kopię zdalnie
Jednym z zagrożeń związanych z przechowywaniem danych wyłącznie lokalnie jest ryzyko ich utraty w wyniku katastrofy naturalnej, pożaru czy zalania. Dlatego warto mieć dodatkową kopię danych na maszynie znajdującej się w innej lokalizacji. Ja sam mam serwer u teściów — nazywam go „Server In Law” 😄
Taki zdalny backup może być realizowany za pomocą rsync przez SSH, jak opisałem wcześniej. Możesz ustawić zadanie w crontab, które będzie synchronizować dane z lokalnego serwera na zdalny — np. raz dziennie w nocy.
Podsumowanie
Jak widzisz, zarówno rsync
, jak i crontab
to narzędzia proste, lekkie, a jednocześnie niezwykle potężne i konfigurowalne. Nie potrzebujesz skomplikowanych rozwiązań ani drogich usług chmurowych, by zadbać o bezpieczeństwo swoich danych.
Linux nie musi być trudny — wystarczy kilka poleceń, by stworzyć solidny system backupu, który będzie działał automatycznie i bezpiecznie. A najważniejsze: masz pełną kontrolę nad swoimi plikami.
Jeśli dopiero zaczynasz przygodę z Linuksem — zacznij od rsync i crontab. To świetne narzędzia, które pokażą Ci, jak potężny może być terminal.