RSYNC ile sunucudan dosya yedekleme, gönderme, alma işlemleri nasıl yapılır? Belirli klasör yada dosyaları aktarımın dışında nasıl bırakabiliriz?

RSYNC kullanarak sunucudan dosya yedekleme, gönderme ve alma işlemleri nasıl gerçekleştirilir? Hangi komutları kullanmamız gerekiyor? Belirli klasör veya dosyaların aktarımından kaçınmak için hangi yöntemleri kullanabiliriz?

RSYNC basit olarak iki sunucu arasında dosya aktarımına olanak sağlayan, bağlantının yada sunucunun kapanması işleminden sonrada kaldığı yerden devam edebilen (tekrar başlatmanız gerekli) bir yedekleme yada diğer adıyla dosya alma gönderme işlemidir.

Bu yöntem daha çok yedekleme için kullanılıyor, çünkü bu işlem ile yedeklediğiniz yerdeki dosyalar arasına yenileri eklendiğinde tekrar hepsini almak yerine sadece o değişen dosyaları alıyor, buda zamandan ve trafikten tasarruf sağlıyor bize.

Anlamayanlar için küçük bir örnek vermek istiyorum: A sunucunuzda 500 gb’lık bir klasör var. Bu klasör devamlı olarak yeni resimler, yeni dosyalar yada yedekler ile artıyor, büyüyor. Siz RSYNC yöntemi ile bu klasörü B sunucusuna yedeklediğiniz de dosyalarınızı güvenle yedeklemiş olursunuz. Ancak söz konusu klasör her gün yenileriyle büyüyor. Böylece tekrar RSYNC yöntemi ile dosya çekmeye çalıştığınızda önceki yedeklediği dosyaları kontrol ederek almıyor ve sadece yeni eklenen, yani daha önce yedeklediğiniz dosyalar arasında olmayanları yedekliyor… İlk işlem 2 saat sürerse, ikinci işlem 2 dakika sürecektir, çünkü olmayanları hesaplayıp alıyor.

Yeni başlayanlar ve sunucu işi ile ilgilenenlerin her zaman ihtiyaç duyabileceği bu özelliği kullanmayı anlatacağım, böylece elimizde bir altın bilezik olsun :slight_smile:

RSYNC işlemi ile bir çok isi yapabilirsiniz: Ayni sunucuda içinde dosya transferi, yedekleme işlemi, iki sunucu arasında yedekleme, birden fazla sunucu arasında dosya transferi gibi bir çok alanda size hizmet edebilir. Ayni zamanda bulunduğunuz sunucudan bir başka sunucuya da dosya gönderebilirsiniz…

RSYNC Parametreleri:

Uygulama için bunlar çok önemlidir, çünkü elimiz, gözümüz, ayağımız olacak bu parametreler. RSYNC komutunu kullanırken her zaman bu 3 parametreyi kullanmanızı öneririm: -avzu

  • a: Arşivleyerek indir anlamına gelir
  • v: Yedekleme işlemlerini görmemizi sağlar ssh ekranından
  • z: Dosyaları sıkıştırılarak çeker, buda hız açısından iyi olabilecek bir seçenek.
  • u: Dosya izinlerini çektiğiniz sunucudaki kullanıcının ki ile ayni yapar. (kullanmanız tavsiye olunur, aksi durumda farklı kullanıcı izinleri ile kaydedileceğinden, internette görmek istediğinizde çalışmayacaktır.)

Bunların yanında ek olarak kullanabileceğimiz parametreler:

  • -p: Dosya izinlerini (chmod) bozmadan, değiştirmeden ayni şekilde aktarır.
  • -t: Dosya tarihlerini değiştirmeden ayni şekilde aktarır.
  • -l: Kısayol dosyalarınızı da aktarır.
  • n: bu işlemden emin değilim ama sanırım dosya aktarım sırasında test yapıyor :slight_smile:
  • -e: Dosyaların ssh üzerinden gönderildiğini belirtir.
  • –delete-after: Yedeklediğiniz dosyaları, işlem bittikten sonra silmenizi sağlar. Bu yöntemi dikkatli kullanın, hatta hiç kullanmayın :slight_smile: Profesyonel değilseniz tavsiye edilmez…

RSYNC ile Aynı sunucu içinde dosya Transferi:

Örnek kullanım:
rsync -avz -l /home/kuaza /var/www/

Burada kuaza klasörünü www klasörünün içine klasör olarak aktardık, eğer sonuna / işareti koysaydık kuaza klasörünün, o zamanda klasör yerine sadece içindekileri aktarmamızı sağlayacaktır. Örnek sadece kuaza klasörü içindekileri aktarmak istersek:

rsync -avz -l /home/kuaza/ /var/www/

Kod içerisinde parametreleri istediğiniz gibi kullanabilirsiniz.

RSYNC ile sunucudan sunucuya dosya gondermek:

Yukardaki kullanım gibidir, tek yapmanız gereken gönderilecek sunucu bilgilerinide girmek.

rsync -avz -l /home/kuaza [email protected]:/var/www/

Bu işlemden sonra size soru sorayaca, yes diye yazıp enter yapın sonrasında da karşı sunucunun, yani dosyaları göndermek istediğiniz sunucunun şifresini soracak size, şifreyi yazın enter yapın, doğru ise işlem başlayacak ve aktarımı göreceksiniz. Burda önemli olan nokta ilk işlem sorasında sunucuya erişimi olan kullanıcı ismini ve sunucunun İP adresini doğru kullanmanız.

Örneğin: [email protected] : Burda root sunucuya bağlanırken kullandığımız kullanıcı adıdır. Bazı sunucularda kullanıcı adı farklı olabilir. Örneğin Bluehost.com yada hostgator.com dan dosya çekmek istediğimizde giriş sırasında kullandığımız kullanıcı adını yazmanız gerekecek. Tabi ssh erişimi gerekebilir, bunu da zaten açtırabiliyorsunuz kolaylıkla…

RSYNC ile Başka sunucudan dosya çekmek:

Yukarıdaki işlemin tersini uygulayarak başka bir sunucudan o anda kullandığınız sunucuya dosya aktarabilirsiniz.

rsync -avz -l [email protected]:/home/kuaza /var/www/

Burda da IPsini yazdığımız bilmem kaç ipli sunucudan kuaza klasörünü kendi sunucumuzda bulunan www klasörüne çekiyoruz. Tekrar ediyorum parametreler kısmını istediğiniz gibi kullanabilirsiniz. Örneğin chmod ayarlarının da değişmesini istemiyorsanız -p parametresinide ekleyebilirsiniz…

rsync -avz -l -p [email protected]:/home/kuaza /var/www/

Basitçe bu işlemi size anlatmaya çalıştım, benimde devamlı kullandığım bir özellik olduğu için devamlı bir yerde not olarak tutmam gerekiyor, bazen aradığımı kolay kolay bulamıyorum, özellikle kullanımını unuttuklarımın.

Ekleme: 12/09/2017

Klasör yada dosya aktarımın dışında bırakmak

Belirli klasör yada dosyaları isterseniz aktarım dışında bırakabilirsiniz. Örnek senaryo: Kullanmayacağınız yada çok büyük diye yedeklemeyeceğiniz gereksiz dosya, klasörleri aktarmamayı seçebilirsiniz. Bunun için kodunuza bunu eklemeniz yeterli:

--exclude 'Aktarilmayacak_klasor_ismi' --exclude 'public_html/aktarilmayacak_dosya_ismi.txt'

Verdiğim örnekte iki ayrı dahil edilmeme kodu yazdım. Aktarılmayaca_klasör_ismi klasörünü ve Aktarılmayaca_dosya_ismi.txt dosyasını aktarım sırasında ellemeyecek ve aktarmayacak.

Basit bir örnek:

rsync -avz -l --exclude 'Aktarilmayacak_klasor_ismi' --exclude 'public_html/aktarilmayacak_dosya_ismi.txt' /home/kuaza [email protected]:/var/www/

Eğer çok fazla dosya ve liste varsa, bunu bir dosyaya kaydederek işimizi kolaylaştırabiliriz. Öncelikle bir dosya oluşturup içerisine aktarılmasını istemediğiniz dosyaların isimlerini yada klasörleri yazınız. (dosya için dosya yolunu da girmeniz gerekiyor)

ssh ile nano yardımıyla bir dosya oluşturalım:

nano /home/aktarma_bunlari.txt

Sonrasında içerisine aşağıdaki örnekleri kendinize göre düzenleyerek, yada yenilerini ekleyerek kaydedin:

sources kaynak public_html/database.* downloads/test/*

Şimdide rsync kodumuza ekleyeceğimiz kod yapısı değişiyor, aşağıdaki gibi olacak:

--exclude-from '/home/aktarma_bunlari.txt'

Basit bir örnek:

rsync -avz -l --exclude-from '/home/aktarma_bunlari.txt' /home/kuaza [email protected]:/var/www/

Bu dokumanda yararlandığım kaynaklar:

Yardimci olabilecek kaynaklar: