Rsync, *nix sistemlerde oldukça sık kullanılan güzel bir dosya transfer uygulamasıdır. Yedekleme ya da senkronizasyon işlemlerinde sadece değişen dosyaların (incremental) kopyalanmasını sağlayarak işlemleri hızlandırmayı amaçlamaktadır.
Rsync ile lokal yedekleme yapılabildiği gibi uzaktaki bir sisteme ssh üzerinden kopyalama yapabilmek de mümkündür.
Özellikle, bir çok dosya barındıran büyük dizinlerin hızlıca yedeklenme ihtiyacı gibi durumlar için ideal olan rsync, web sunucularda, kök dizinlerin birden fazla sistemde senkronize olarak tutulması (yansılama) gibi işlemler için sıklıkla kullanılmaktadır.
Genel Bilgiler
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.
Bir çok kullanışlı yönü bulunan rsync’in temel özellikleri aşağıdaki gibidir:
Temel Özellikler
- 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.
Kurulum
RHEL / CentOS / Fedora
Redhat tabanlı sistemlerde öntanımlı olarak bulunmaktadır. Bu sebeple ayrıca kuruluma ihtiyaç duyulmamaktadır.
Debian / Ubuntu
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
Kullanım
Yazının başında da kısaca bahsettiğim gibi rsync, backup almak ya da dizin/dosya replikasyonu için olukça fazla kullanım seçeneği sunmaktadır. En temel komut cümlesi aşağıdaki gibidir.
# rsync -a kaynakdizin hedefdizin
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
Eğer yedekler, uzaktaki bir sistemden alınacaksa, komut şöyle olacaktır:
# rsync -a uzaksistem:kaynakdizin hedefdizin
Lokalden lokale, lokal sistemden uzak sisteme, uzak sistemden lokal sisteme gibi senayolar için örnek komutlara, detaylı olarak Örnekler başlığında değineceğim, ancak daha önces rsync parametrelerinden bahsetmekte fayda var.
Kullanışlı Parametreler
Komutta kullanılan -a, [–archive] anahtarı, 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.
Örnekler
Kullanım detaylarına değindikten sonra, bu bölümde çeşitli senaryolar üzerinden bazı örnekler paylaşıcam.
Lokal Diskler Arası Kopyalama
Lokal yedekleme işlemleri için rsync komutu öntanımlı hali ile kullanılabilir. Misal olarak /home/kullanici adlı şahsi dosyalarınızın bulunduğu dizini, sistemenizde /media/disk/ dizinine bağlanmış olan harici diskinize aktarmak için aşağıdaki komutu kullanabilirsiniz.
# rsync -av /home/kullanici/ /media/disk/yedekler/
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.
Lokalden Uzak Hosta Kopyalama
Gene yukarıdaki örnekten gidersek, /home/kullanici/ dizininde bulunan dosyaları, uzaktaki bir sunucuya yedeklemek için rsync şu şekilde kullanılabilir:
# rsync -av /home/kullanici/ email@example.com:yedekler/
Komutu çalıştırdığınız zaman, 192.168.12.12 ip’li sisteme SSH üzerinden bağlantı sağlanacak ve kullanıcı şifreniz sorulacaktır. Şifrenizi girdikten sonra /home/kullanici/ dizininde bulunan tüm dosyalar, uzaktaki sistemin /home/kullanici dizini altında oluşturulan yedekler klasörüne SSH üzerinden (güvenli olarak) kopyalanacaktır.
Ş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. Linux sistemlere SSH ile şifresiz bağlantı kurulumasından bahsetmiştim. Buradan o makaleye ulaşabilirsiniz.
Eğer, uzaktaki sunucuya root yetkisi ile ssh bağlantısı kurma şansınız var ise misal olarak /home/kullanici dizinindeki dosyaları 192.168.12.12 ip’li sistemin kök (/) dizininde yedekler dizinine aktarmak için şu şekilde bir komut çalıştırılabilirsiniz:
# rsync -av /home/kullanici/ firstname.lastname@example.org:/yedekler/
Uzak sistemin root şifresini girdikten sonra /home/kullanici/ dizinindeki dosyalar karşı sistemde /yedekler/ dizinine aktarılacaktır.
Uzaktan Lokale Kopyalama
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:
# rsync -av email@example.com:/yedekler/ /yedekler/
Bu şekilde, 192.168.12.12 ip’li sistemin /yedekler/ dizininde bulunan dosyalar, lokal sisteminizin /yedekler/ dizinine transfer edilecektir.
Exclude (Hariç Tutma) İşlemleri
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/ firstname.lastname@example.org:/yedekler/
Böylece, mp3 uzantılı dosyalara hariç, /home/kullanici/ dizinindeki tüm dosyalar, 192.168.12.12 ip’li sistemin /yedekler/ dizinine kopyalanacaktır.
–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/ email@example.com:/yedekler/
Dry-Run
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:
# rsync -avn /home/kullanici firstname.lastname@example.org:/yedekler/
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.
Not: Crontab ile bu işlemleri otomatik hale getirebilirsiniz. Böylece belirlediğiniz zaman diliminde otomatik yedekleme yapabilirsiniz. Crontab kullanımı için burayı tıklayabilirsiniz.