Jak tworzyć kopie zapasowe plików w Linuksie za pomocą rsync w terminalu

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.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.