(Yeni sayfa: 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 özelli...) |
|||
36. satır: | 36. satır: | ||
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 : | 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 | + | 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 : | 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 : |
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.
1. apt-get install rsync
2. 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
3. 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.
4. Ş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.
5. 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
6. 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.conf
echo $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 cagatay 11 Test\ Kullanıcısı 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 2 3 rsync.exe -vrtR --delete --progress "/cygdrive/c/prj/" cagatay@192.168.100.15::cagatay/
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.
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 cagatay@192.168.100.15::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.