Uzunca bir süredir ağ içerisinde yer alan kullanıcılara ait windows makinelerinin yedeklenmesi için bir çözüm arayışı içerisindeydim. Sistemin sahip olması gereken özellikler ise şu şekilde sıralayabilirim :

  1. Yedek makinesinin yönetimi kolay olmalı
  2. Sistem ağ üzerinden çalışmalı.
  3. Yalnızca değişen dosyaları yedekleyecek kadar akıllı olmalı.
  4. Çok fazla ağ trafiğine sebep olmamalı
  5. GNU/GPL yazılımlar ile minumum maliyete sahip olmalı
  6. Son kullanıcı için kullanımı kolay olmalı
  7. Kendi başına zamanlanmış yedekler alabilmeli

Talep edilen 1-5 arası özelliklerin sağlanması bakımından rsync en uygun çözüm olarak gözüktü. 6. ve 7. özellikler içinse cygwin projesinden windows için derlenmiş rsync’e ön yüz olarak Delphi ile ufak bir program yazdım. GPL ile lisanslanan bu program ile ilgili detaylara buradan ulaşabilirsiniz.

Rsync sayesinde bir makineden diğer makineye belli bir dizin yapısını olduğu gibi aktarabiliniyor. Bu aktarımda yalnızca değişen dosyalar dikkate alındığı için ilk aktarımdan sonraki aktarımlar oldukça hızlı olabiliyor. Ayrıca düşük bağlantı hızlarında aktarımdan önce dosyaları sıkıştırma yeteneği ile zamandan kazanç sağlayabiliyor. Rsync’in zengin özellikleri ile ilgili detaylı bilgi için man rsync.

Rsyc ile iki şekilde aktarım yapılabiliyor :

  • SSH veya RSH kullanarak uzaktaki makineye bağlanarak kopyalama. Bu durumda uzak makinede rsync olup olmaması önemli olmuyor. İstemci makinede rsync olması yeterli. Ayrıca uzak bağlantı için SSH kullanıldığı durumlarda gönderilen veriler de SSH’ın kalkanı altında üçüncü gözlerden korunmuş oluyor. Yalnız bu durumda uzak makinede geçerli bir kullanıcı hesabı bulunması gerekiyor.
  • Uzak makinede rsync sunucusu kullanarak dosya transferini gerçekleştirmek. Bu yöntemde ise kaynak ve hedef makinelerde rsync olması zorunlu ve hedef makinede de rsync’ın sunucu olarak ayarlanması gerekiyor. Bunun yanı sıra yalnızca kopylama başlangıcında bir yetkilendirme kontrolü var. Onun dışında transfer edilen veriler ayrıca şifrelenmiyor. ** Dolayısıyla bu yöntemin kamusal alanlarda kullanımının veri güvenliği açısından sakıncalı olduğu akıllardan çıkartılmamalı.** Fakat istemci makinelerde ssh ve sunucu makinede de geçerli bir kullanıcı hesabına gerek duymuyor.

Hedeflediğim yedekleme sistemi 100’den fazla windows makineye kurulacağı için, kurulumda ve yönetimde de basitlik temel hedefim olduğu için ben ikinci yöntem üzerinden yürümeye karar verdim.

Şimdi gelelim tanımı yapılan sistemin kurulumuna :

Yedekleme Makinesinde Rsync’ın Sunucu olarak kurulması

Benim kullandığım sistem Debian olduğu için aşağıdaki kurulum yönergelerinden bazıları Debian’a özgü olabilir. Ama en azından diğer GNU/Linux sistemleri için de bir fikir vereceğine inanıyorum.

apt-get install rsync

rsync’in sunucu olarak çalışması için /etc/defaults/rsync dosyasındaki RSYNC_ENABLE=false değerini false dan true ya çevirmek gerekiyor. Bu dosyada ayrıca rsync ayar dosyasının ismini, rsync’e ek parametreleri de verebiliyoruz

Daha sonra etc altında bir rsyncd.conf ve kullanıcı şifrelerinin tutulacağı şifre dosyası oluşturmamız grekiyor. Şifrelerin tutulacağı dosyanın adını rsyncd.conf dosyasında belirtiyoruz. Debian’da hazır olarak bir rsyncd.conf dosyası gelmiyor. Dolayısı ile root olarak bu dosyayı bizim yaratmamız gerekiyor. rsyncd.conf dosyası temel olarak iki kısımdan oluşuyor. Başlık kısmında genel parametreleri veriyoruz, modül olarak nitelenen detay kısımda ise yedekleme dizinleri, yetkili kullanıcılar ve diğer özellikler belirtiliyor. Bu sistem için örnek rsyncd.conf dosyası aşağıda :

 1 hosts allow = 192.168.100.0/24
 2 uid = yedek
 3 gid = yedek
 4 [cagatay]
 5 auth users = cagatay
 6 comment = Cagatay Tengiz
 7 path = /home/yedek/cagatay
 8 read only = false
 9 write only = false
10 secrets file = /etc/rsyncd.sec
11 [erkan]
12 auth users = erkan
13 comment = Erkan Kutlumus
14 path = /home/yedek/erkan
15 read only = false
16 write only = false
17 secrets file = /etc/rsyncd.sec

Fark ettiğiniz üzere köşeli parantez ile başlayan kısımlardan öncesi, genel parametreleri içeriyor, köşeli parantezler ile başlayan kısımlar ise modül tanımlarını. Şimdi her satırın detaylı açıklamasını verelim :

  1. Sunucuya bağlanması izin verilen adres bloğu

  2. Sunucunun çalışacağı kullanıcı kimliği.

  3. Sunucunun çalışacağı grup kimliği.

  4. İlk modül tanımı. Modül başlıkları köşeli parantezler içerisinde veriliyor. Modüllere istediğiniz isimleri vermekte özgürsünüz.

  5. Bu modüle erişmeye hakkı olan kullanıcıların listesi. Fark ettiyseniz yukarıdaki örnek ayar dosyasında modül adı ile kullanıcı adı aynı. Aslında bu böyle olmak zorunda değil. Windows için geliştirdiğim rsync’e önyüz olan programda modül adı=kullanıcı adı varsayımını yaptığım için modül adı ile kullanıcı adı birebir aynı verildi. Şöyle bir modül tanımı da geçerlidir :

    [anayedek] auth users = cagatay, erkan …

  6. Modül için açıklama / yorum satırı

  7. Bu modülü kullanarak bağlananların dosyaları sunucuda yerleştirileceği dizin

  8. Yedekleme yapılabilmesi için modül salt okunabilir olmamalı

  9. Yedekten geri dosya yüklenebilmesi için modül salt yazılabilir olmamalı

  10. Modülü kullanmaya yetkili kullanıcılarının, kullanıcı paralolarının tutulduğu dosya adı

  11. ve devamı : Diğer modül tanım(lar)ı

Daha detaylı bilgi için man rsyncd.conf.

Şimdi yukarıda belirtilen parola dosyasını oluşturmamız gerekiyor. Dosyanın yapısı ise oldukça basit, Kullanıcı_Adı:Parola şeklinde. Parola dosyasını oluşturmak için ise yine root olarak aşağıdaki komutları vermemiz yeterli olacaktır.

mct:~# echo cagatay:11 > /etc/rsyncd.sec
mct:~# echo erkan:12 >> /etc/rsyncd.sec

Böylelikle Çağatay’ın paralosını 11, Erkan’ın parolasını ise 12 olarak belirledik. Son olarak parola dosyasından kullanıcı ve grup haricindeki tüm yetkileri kaldırmamız gerekiyor :

mct:~# chmod o-rwx /etc/rsyncd.sec

Aksi takdirde rsync sunucusu güvenlik açısından dosyayı kullanmayı red ediyor ve kullanıcı yetkilendirmesi gerçekleşmiyor.

rsyncd.conf dosyasında rsync’ın yedek kullanıcısı altında çalışacağını belirttik. Bu durumda sistemde bu kullanıcı yaratılmalı ve yine konfigürasyon dosyasında belirtilen dizinler yedek kullanıcısı kullanılarak yaratılmalı :

mct:~#adduser yedek
mct:~#su yedek
yedek@mct:/etc$ cd ~
yedek@mct:~$ mkdir ~/cagatay
yedek@mct:~$ mkdir ~/erkan

Son olarak artık rsync sunucumuzu başlatalım :

mct:~# /etc/init.d/rsync start

Yukarıda bahsedilen 3., 4. ve 5. adımlardaki işlemleri yapan basit bir bash betiği ise aşağıdaki şekilde yazılabilir. :

#!/bin/bash 
echo "[$1]  
auth_users = $1  
comment = $3  
path = /home/yedek/$1  
read only = false  
write only = false  
secrets file = /etc/rsyncd.sec" >> /etc/rsyncd.confecho $1:$2 >> /etc/rsyncd.sec  
mkdir /home/yedek/$1  
chown -R yedek.yedek /home/yedek/$1

Betiği gözde metin düzenleyicinizde yazdıktan sonra, yedek_kullanicisi_ekle.sh ismiyle kaydedip, çalışma izinlerini verin. Betik, kodundan da kolayca anlaşılabileceği gibi kullanıcı_adı parolası açıklama parametreleri ile çalışıyor :

./yedek_kullanicisi_ekle.sh <em>cagatay 11 Test\ Kullanıcısı</em>

Windows Makinelerde Rsync Kurulumu ve Kullanımı

rsync, windows işletim sistemlerinde cygwin projesi ile hazır derlenmiş olarak elde edilebiliyor. Rsync kullanmak için cygwin’i tam olarak kurmanıza gerek yok aşağıdaki üç dosya aynı dizinde olduğu sürece rsync’i sorunsuz bir şekilde kullanabiliyorsunuz :

  • rsync.exe
  • cygpopt-0.dll
  • cygwin1.dll

Bu üç dosyayı bu adresten sıkıştırılmış olarak elde edebilirsiniz. Yazının yazıldığı tarih (Aralık 2004) itibariye rsync 2.6.3, cygwin 1.5.12-1 sürümünde idi.

Rsync kullanımı oldukça kolay olan bir program. Yukarıda anlatılan şekilde kurulan bir yedekleme sunucusuna yedekleme yapmak için kullanılan komut dizilimi

rsync [parametreler] [kaynak_dizin(ler) veya dosya(lar)] [kullanıcı@hedef_makina::modul/]

şeklinde. Komutun dizilimini ve parametrelerini, gerçek hayatta uygulanabilecek bir örnek ile açıklamaya çalışırsak :

    1. -v(erbose) : Açıklayıcı ol. vv daha açıklayıcı ol. vvv : daha da açıklayıcı ol.
      -r(ecursive) : Alt dizinlerin içine dal.
      -t(ime) : Dosyaların gerçek zamanlarını yedeklerde koru.
      -R(elative) : Dosyaların dizin yapısını koru.
      –delete : Kaynakta olmayan dosyaları ve dizinleri hedefte de sil.
      –progress : Dosya aktarımı sırasında süreç detayını ver. Yukarıda kullanılmayan ama faydalı olabilecek bir iki parametre de :
      -z : Dosyaları aktarmadan önce sıkıştır. Düşük bağlantı hızları için ideal
      –exclude : Aktarılmayacak dosyaların belirtilmesinde kullanılabilir. Örneğin --exclude "*.mp3"Burada bahsedilmeyen daha birçok parametre için tabii ki man rsync.
    2. C: sürücüsündeki prj dizinin yedeği alınacak. Görüldüğü üzere dizin yapısı linux dizin yapısı şeklinde veriliyor. Ters bölü () yerine düz bölü (/) ve sürücü tanımlama için de iki nokta üst üstüste (:) yerine /cygdrive/c/ dizisi. Bu durumda D: sürücüsü altındaki bir dizinden yedek almak için de "/cygdrive/d/bir dizin" yazılmalı. Kaynak dizin belirtilirken dizin ifadesini örnekte olduğu gibi çift tırnak içine almakta fayda var. Böylelikle boşluk ve varsa özel karakterleri \ işareti ile ayrıca belirtmek zorunda kalmazsınız.
    3. Kullanıcı adı ve modüller yukarıda tanımladığımız rsyncd.conf dosyasından geliyor. Modülden sonra istenirse ek dizin tanımı da yapılabilir.
|           | 1                         | 2                  | 3                                |
|-----------|---------------------------|--------------------|----------------------------------|
| rsync.exe | -vrtR --delete --progress | "/cygdrive/c/prj/" | [email protected]::cagatay/ |

Komutu çalıştırdığınızda, rsync sunucucuya bağlanmak için gerekli parolayı komut satırından isteyecektir. Komut satırından girmek dışında iki yöntem ile de parola girişi gerçekleştirilebilir :

  1. Dos ortam değişkeni tanımlanarak :

    c:>set RSYNC_PASSWORD=parola

  2. Düz metin dosyasından okutarak :`

    c:>rsync –pasword-file=“c:\sifre.txt” ….

Sunucudaki dosyaların listesini almak için rsync’i tek dizin girişi ile çalıştırmalısınız :

C:\>rsync.exe -r [email protected]::cagatay/

Tüm bu işlemleri komut satırı yerine görsel arabirimden yapmak istediğim ve de yerel ağdaki diğer tüm makinelerin yedeklerinin kolayca alınabilmesi, yönetilebilinmesi için rsync’e ön yüz olan bir program yazdım. GPL lisansı ile dağıtılan bu programın kurulum dosyasına, kaynak kodlarına, ekran görüntülerine vs. http://www.tengiz.net/projeler/yedekle/ adresinden ulaşabilirsiniz. Program temel olarak yukarıda anlatılan kurulum ayarlarına uygun olarak çalışıyor.