rsync, uzak ya da lokal olarak dosya transferi işlemlerini gerçekleştiren ve bu işlemlerde kullandığı algoritma sayesinde daha hızlı sonuç sağlayan bir senkronizasyon aracı olarak ifade edilebilir. Açık kaynak kodlu ve GNU Genel Kamu Lisans’ı altında dağıtılan rsync, bir çok Linux dağıtımında öntanımlı olarak yüklü gelmektedir. Ayrıca, bir çok dağıtımın paket yöneticisinden de kolayca kurulabilmektedir. Kaynak ve hedef arasında kopyalama yapmadan önce, bir algoritma üzerinden dosyalar arasındaki farkları tespit eden rsync, hedef’e sadece değişikliğe uğramış ya da tamamen yeni olan dosyaları aktarır. Bu sayede kopyalama süreci hızlandırılmış olur.

  • Tüm bir dizinin ya da dosya sisteminin yedeklenebilmesi
  • Sembolik ve Hard linklerin, dosya ve dizin izinlerinin, sahip ve grup bilgilerinin hedefte muhafaza edilebilmesi
  • Root yetkisine gereksinim duyulmaması
  • Lokal sistem üzerinde yedekleme/senkronizasyon
  • Lokal sistemden, uzaktaki sisteme yedekleme/senkronizasyon
  • Uzaktaki sistemden, lokal sisteme yedekleme/senkronizasyon
  • Network üzerinden transfer için ssh kullanabilme
  • Rsync daemon modu ile sunucu desteği
  • Exclude anahtarı ile spesifik dosya/dizinlerin, dosya tiplerinin hariç tutulabilmesi.

Redhat tabanlı sistemlerde öntanımlı olarak bulunmaktadır. Bu sebeple ayrıca kuruluma ihtiyaç duyulmamaktadır.

Debian ve Ubuntu gibi dağıtımların paket depolarında bulunmaktadır. Dolayısı ile “apt-get” ile kolayca kurulabilmektedir.

apt-get install rsync
  • En temel kullanımı şu şekildedir:
rsync [kaynak-dosya-ya-da-klasor] [hedef-dosya-ya-da-klasor]
  • Birden fazla dosyayı hedef bir dizine iletmek için ise dosyalar sırasıyla hedef öncesinde belirtilir.
rsync -R [kaynak-dosya-1] [kaynak-dosya-2] [hedef-klasor]
  • Eğer yedekler uzaktaki bir sisteme transfer edilmek istenirse komut aşağıdaki gibi kullanılabilir. (Elbette, her iki sistemde de rsync kurulu olmalıdır.)
rsync -a kaynakdizin uzaksistem:hedefdizin

rsync -a /var/www mustafa@192.168.10.130:/var
  • Eğer yedekler, uzaktaki bir sistemden alınacaksa, komut şöyle olacaktır:
rsync -a mustafa@192.168.10.130:/var/www /var
  • birkaç örnek ile senkronizasyon işlemlerine başlayalım.İçeriğinde bir çok metin dökümanı (touch ./file{1..50}.txt ile yaratabilirsiniz) olan /yazilar klasörümüze ait içeriği bir üst dizindeki /icerikler klasörüne taşıyalım.

Not: Eğer kaynak klasör daha önceden oluşturulmuş bir klasör değilse belirtilen hedefte oluşturulacaktır.

rsync -arv /yazilar/ ../icerikler

Komutta kullanılan -a, [–archive] parametresi, bir çok özellik (-rlptgoD anahtarları) için kısaltma görevi görmektedir.  -a anahtarının içerdiği özellikler aşağıdaki gibidir:

  • -r : Kopyalama işlemi, alt dizinlerde kapsanacak şekilde recursive olarak yapılır.
  • -l : Sembolik linkler, sembolik link olarak kopyalanır.
  • -p : Dosya ve dizinlerin izin değerleri korunur.
  • -t : Dosyaların değiştirilme (mtime) bilgisi de transfer edilir. Senkronizasyon işlemleri için bu anahtar kullanılmalıdır.
  • -g : Dosya ve dizinlerin grup bilgileri korunur.
  • -o : Dosya ve dizinlerin sahip bilgileri korunur.
  • -D : Device dosyaları vs hedefte oluşturulur.

 

Yukarıda listelenen tüm parametreler (-rlptgoD ) kısaca -a denilerek devreye alınmaktadır.

Diğer kullanışlı anahtarlar ise şu şekildedir:

  • -H : Hard linkleri de transfer eder.
  • -z : Transfer sırasında dosyaları sıkıştırır.
  • –exclude : Belirtilen PATTERN, kopyalama işleminden muaf tutulur. Örnekler bölümünde detaylandırılacak.
  • –dry-run : Komut çalıştırıldığı zaman, hangi işlemlerin gerçekleşeceği gösterilir ancak işlemler gerçekte uygulanmaz.
  • –delete : Kaynak tarafta artık bulunmayan dosyalar, hedef taraftan da silinir. Dikkatli kullanmanızı öneririm.
  • –human-readable : Çıktılar, human-readable (anlaşılır) formatta verilir.

Ayrıca, -v anahtarı ile kopyalama işleminde verbose özelliği açılarak işlem sırasında detay alınabilmektedir. -vv ya da -vvv şeklinde işlem detayları daha da arttırılabilir.

Lokal yedekleme işlemleri için rsync komutu öntanımlı hali ile kullanılabilir.Bu şekilde /home/kullanici/ dizininin tüm içeriği (alt dizinlerle birlikte) /media/disk/yedekler/ klasörüne kopyalayanacaktır. Aynı komutu bir daha çalıştırdığınızda ise, harici diske sadece değişikliğe uğrayan ve yeni oluşturulan dosyalar aktarılacaktır.

rsync -av /home/kullanici/ /media/disk/yedekler/

Gene yukarıdaki örnekten gidersek, /home/kullanici/ dizininde bulunan dosyaları, uzaktaki bir sunucuya yedeklemek için rsync şu şekilde kullanılabilir:

NOT : Şifre sorulmamasını istediğiniz durumlar için uzaktaki sisteme key-based authentication (anahthar üzerinden kimlik doğrulaması) ile erişebilmek üzere sisteminizi yapılandırmanız gerekir.

NOT : Lokal sistemden uzak sunucuya dosya çekme işlemi push olarak ifade edilmektedir

rsync -av /home/kullanici/ kullanici@192.168.12.12:yedekler/

Bir önceki örneğin tersi olan bu kopyalama işleminde, uzaktaki bir sistemde bulunan bir dizin, lokaldeki bir dizine aşağıdaki şekilde transfer edilebilir:

NOT : Uzak sunucundan lokal sisteme dosya çekme işlemi pull olarak ifade edilmektedir

rsync -av root@192.168.12.12:/yedekler/ /yedekler/

 

Rsync’in –exclude parametresi, yedekleme sırasında, kopyalamadan muaf tutulacak dosya tiplerinin ya da dizinlerin belirtilebilmesine yaramaktadır.

Örnek olarak, /home/kullanici isimli şahsi dizininizde bir çok mp3 dosyası olması ve bu dosyaların yedeklenmesine gerek duymamanız gibi durumlarda, exclude parametresi ile iş görecektir:

rsync -av --exclude '*.mp3' /home/kullanici/ root@192.168.12.12:/yedekler/

 

exclude parametresi, dosyalar için olduğu gibi dizinler için de kullanılabilmektedir. Örneğin aşağıdaki komut, /home/kullanici/ dizini altındaki “ozel” isimli klasoru yedekleme işleminden hariç tutmaktadır.

rsync -av --exclude 'ozel' /home/kullanici/ root@192.168.12.12:/yedekler/

 

Test modu olarak tabir edilebilecek bu parametre ile, girdiğiniz rsync komutunun yapacağı işlemleri, herhangi bir kopyalama olmaksızın test edebilirsiniz. Bunun için basitçe komuta [n] anahtarını ekleyebilirsiniz, yapılacak işlemi bu şekilde simüle ederek, çalışacak komutun yapacağı işten emin olabilir ve  herhangi ters bir durumun oluşmamasını sağlayabilirsiniz.;

rsync -avn /home/kullanici root@192.168.12.12:/yedekler/

 

Sıkıştırarak göndermek istersek -z parametresini kullanabiliriz;

rsync -avz /home/kullanici/ /media/disk/yedekler/

Mustafa Bektaş Tepe
İyi Çalışmalar

Referanslar
https://www.syslogs.org/rsync-ile-dizin-senkronizasyon-ve-incremental-backup-islemleri
http://belgeler.gen.tr/man/man1/man1-rsync.html
https://ceaksan.com/tr/rsync-komutu-ve-kullanimi

Loading