Skip to main content

LINUX: rsync

Instalacja (choć w Debianie 12 rsync powinien być):

apt install rsync

Przykład: kopiujemy zawartość katalogu /var/www/bookstack

RSYNC: katalogu /var/www/bookstack z serwera źródłowego do serwera docelowego

  • serwer zrodlowy: 51.77.39.150
  • serwer docelowy: 51.68.132.218

Założenia:

  • Masz dostęp SSH do obu serwerów

  • Użytkownik it na serwerze docelowym ma prawo zapisu do /var/www/bookstack

  • Synchronizujemy zawartość katalogu, a nie sam katalog (ważny ukośnik /)

Najczęstszy i zalecany wariant (uruchamiany na serwerze źródłowym):

rsync -avz --delete --dry-run /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/

Opcje:

  • -a – tryb archiwum (uprawnienia, właściciel, symlinki, czasy)

  • -v – tryb gadatliwy (widzisz co się kopiuje)

  • -z – kompresja w trakcie transferu

  • --delete – usuwa na serwerze docelowym pliki, których nie ma już na źródłowym

  • --dry-run - symulacja kopiowania (pokaże co będzie kopiował)
  • ukośnik na końcu /bookstack/→ kopiuje zawartość, nie katalog jako podkatalog

Właściwe polecenie:

rsync -avz --delete /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/

Nadanie uprawnień do katalogu, w przypadku problemów:

chown -R it:it /var/www/bookstack

Pominięcie niektórych podkatalogów, np. cache, logs:

rsync -avz --delete \
  --exclude 'storage/cache/' \
  --exclude 'storage/logs/' \
  /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/

Żeby nie zamazać istniejących uprawnień na serwerze docelowym, musisz w rsync nie przenosić: właściciela, grupy i (opcjonalnie) samych praw plików. Najbezpieczniej dla typowego /var/www/... jest wyłączyć te atrybuty i synchronizować tylko treść + czasy.

Zalecane polecenie (nie rusza owner/group/perms na celu)

Uruchamiasz na serwerze, z którego kopiujesz:

rsync -rtvz --no-perms --no-owner --no-group /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/
Opcje:
  • kopiuje pliki i katalogi (-r)

  • zachowuje czasy modyfikacji (-t)

  • nie zmienia uprawnień (--no-perms)

  • nie zmienia właściciela i grupy (--no-owner --no-group)

Uwaga: nie używam -a, bo -a domyślnie przenosi perms/owner/group.

Aby skopiować tylko nowe pliki (takie, które nie istnieją na serwerze docelowym), w rsync używa się opcji --ignore-existing.

rsync -rtvz --ignore-existing /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/

Opcje:

  • kopiuje wyłącznie pliki, których NIE MA na serwerze docelowym

  • nie nadpisuje istniejących plików

  • nie zmienia uprawnień, właściciela ani grupy (bo nie używamy -a)

Synchronizacja dwukierunkowa

rsync nie ma natywnej synchronizacji dwukierunkowej jak np. Syncthing. Robi się to dwoma poleceniami (A → B i B → A).

1️⃣ Synchronizacja: źródłowy → docelowy

(uruchamiane na serwerze 51.77.39.150)


rsync -avz /var/www/bookstack/ it@51.68.132.218:/var/www/bookstack/

2️⃣ Synchronizacja: docelowy → źródłowy

(uruchamiane na serwerze 51.77.39.150 – nadal)


rsync -avz it@51.68.132.218:/var/www/bookstack/ /var/www/bookstack/

To razem daje dwukierunkową synchronizację bez kasowania plików.