Ana Sayfa » *nix » Rsync ile Senkronizasyon ve Incremental Backup İşlemleri

Rsync ile Senkronizasyon ve Incremental Backup İşlemleri


BerbatKötüİdare EderGüzelHarika (Toplam 12 oy. 5 puan üzerinden ortalama 4,92 || Oy vererek siz de katkıda bulunabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYqYS83d' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
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. Daha önce, rsync kullanan rsnapshot isimli bir yedekleme çözümüne değinmiştim, şimdi de rsync'in kendisinden bahsetmek istiyorum.

 

Genel Bilgiler


Açık kaynak kodlu ve GNU Genel Kamu Lisans'ı altında dağıtılan rsync, bir çok 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

FreeBSD

FreeBSD sistemlerde port ağacı üzerinden kurulabilmektedir.
Not: Bu işlemi yapmadan önce port ağacınızı güncellemeyi unutmayın.

# cd /usr/ports/net/rsync
# make install clean

Ben genel olarak yukarıdaki sistemleri kullanmaktayım. Ancak siz farklı bir dağıtım kullanıyorsanız, kurulumu paket yöneticinizi kullanarak yapabilirsiniz.

Kullanım


Yazının başında da kısaca bahsettiğim gibi rsync, 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şmak istiyorum.

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 protected]: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. Bu yapılandırma, yazının konusu olmadığından dolayı ayrıca bahsetmeyeceğim.

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/ [email protected]:/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 protected]:/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/ [email protected]:/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 protected]:/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 [email protected]:/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.

Rsync ile ilgili temel bilgiler hemen hemen bu kadar.
Daha fazla bilgi için aşağıdaki adresten yararlanabilirsiniz.
http://www.samba.org/rsync/

Visited 14.969 times, 1 visit(s) today
Kategoriler: *nix |

Bu yazılar da ilginizi çekebilir:


- Rsnapshot ile Uzak Linux Hostların Backuplarını Almak
- Scalpel ile Data Recovery
- Mysql – Backup to FTP (PHP Script)
- Linux Sistemlerde FTP Dizinlerinin Mount Edilmesi
- BandwidthD ile Birden Fazla Interface’i Monitor Etmek | FreeBSD

Yorumlar


  1. Turgay | (Kasım 2nd, 2010 12:01 pm)

    Teşekkür, çok güzel bir belge ollmuş.

    [Cevapla]

  2. yavuz | (Kasım 2nd, 2010 2:13 pm)

    güzel bir yazı olmuş.

    [Cevapla]

  3. hayalperest | (Kasım 2nd, 2010 9:19 pm)

    Thanks…

    [Cevapla]

  4. Ömer Şiar Baysal | (Kasım 17th, 2010 5:53 pm)

    Merhaba,

    rsync ile bir süredir senkronizasyon işlemleri gerçekleştiriyorum. Windows ortamında kullanmak isteyenler olursa rsync’in windows’a port edilmiş grsync sürümüne google yardımıyla ulaşabilirler.

    [Cevapla]

  5. Serkan ÇELİK | (Ocak 2nd, 2011 8:59 am)

    Merhaba,

    Güzel bir yazı olmuş, elinize sağlık.

    Cron job ile otomatik mirroring yapabilirsiniz isteğe bağlı olarak. Aşağıdaki adreste detaylı açıklamayı bulabilirsiniz.

    http://www.howtoforge.com/mirroring_with_rsync_p2

    [Cevapla]

  6. alper | (Haziran 15th, 2014 2:31 pm)

    Merhaba öncelikle vermiş olduğunuz bilgiler için tşk.ler, hocam şöyle birşey sormak istiyorum, rsync ile standart 22 port ile uzaksunucudan veri çektik tamam fakat bazen portlar farklı oluyor bunun için ne yapmalıyız ?

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Selamlar,

    rsync’e 22’den farklı port kullanmasını komuta ‘ssh -p portnumarası’ parametresini ekleyerek yapabiliyorsunuz.

    Örnek:

    rsync -ave "ssh -p1234" komutun devamı.....
    

    [Cevapla]

    alper tarafından yanıtlandı.

    Çok teşekkür ederim hocam.

    [Cevapla]

  7. Serkan | (Haziran 27th, 2014 10:42 am)

    konu güzel, anlatım güzel… adam KRAL :)

    [Cevapla]

  8. Alparslan | (Ağustos 2nd, 2014 4:05 pm)

    Elinize emeğinize sağlık

    [Cevapla]

  9. Orcun | (Ocak 19th, 2015 4:20 pm)

    Paylasim icin tesekkur, isime yaradi.

    [Cevapla]

  10. Cemil | (Şubat 20th, 2015 12:54 pm)

    Ellerine sağlık uzun zamandır sıkıntı yaşadığım bir olaydı, sayende hallettim. Teşekkür ederim.

    [Cevapla]

Trackbacks

Yorumda bulunun.