RSYNC ile Windows makinelerin Debian/GNU Linux’a yedeklenmesi
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 :
- Yedek makinesinin yönetimi kolay olmalı
- Sistem ağ üzerinden çalışmalı.
- Yalnızca değişen dosyaları yedekleyecek kadar akıllı olmalı.
- Çok fazla ağ trafiğine sebep olmamalı
- GNU/GPL yazılımlar ile minumum maliyete sahip olmalı
- Son kullanıcı için kullanımı kolay olmalı
- 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 :
-
Sunucuya bağlanması izin verilen adres bloğu
-
Sunucunun çalışacağı kullanıcı kimliği.
-
Sunucunun çalışacağı grup kimliği.
-
İ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.
-
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 …
-
Modül için açıklama / yorum satırı
-
Bu modülü kullanarak bağlananların dosyaları sunucuda yerleştirileceği dizin
-
Yedekleme yapılabilmesi için modül salt okunabilir olmamalı
-
Yedekten geri dosya yüklenebilmesi için modül salt yazılabilir olmamalı
-
Modülü kullanmaya yetkili kullanıcılarının, kullanıcı paralolarının tutulduğu dosya adı
-
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 :
-
- -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 kiman rsync
. C:
sürücüsündekiprj
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 durumdaD:
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.- 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.
- -v(erbose) : Açıklayıcı ol. vv daha açıklayıcı ol. vvv : daha da açıklayıcı ol.
| | 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 :
-
Dos ortam değişkeni tanımlanarak :
c:>set RSYNC_PASSWORD=parola
-
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.