Rsync ile Senkronizasyon ve Incremental Backup İşlemleri
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYh3lkYw' (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.
İçerik İndexi
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
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, 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ş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/
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
Trackbacks
Yorumda bulunun.
Teşekkür, çok güzel bir belge ollmuş.
[Cevapla]
güzel bir yazı olmuş.
[Cevapla]
Thanks…
[Cevapla]
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]
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]
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]
Selamlar,
rsync’e 22’den farklı port kullanmasını komuta ‘ssh -p portnumarası’ parametresini ekleyerek yapabiliyorsunuz.
Örnek:
[Cevapla]
Çok teşekkür ederim hocam.
[Cevapla]
konu güzel, anlatım güzel… adam KRAL :)
[Cevapla]
Elinize emeğinize sağlık
[Cevapla]
Paylasim icin tesekkur, isime yaradi.
[Cevapla]
Ellerine sağlık uzun zamandır sıkıntı yaşadığım bir olaydı, sayende hallettim. Teşekkür ederim.
[Cevapla]