original in en Brian Hone
en to tr Ceyhun Elmas
Brian Hone E Ink firmasında sistem yöneticisi ve yazılım geliştirici olarak çalışıyor. Boş zamanlarında soğuk sularda sörf yapıyor ve kayalıklara tırmanıyor.
Yedeklemenin neden sistem yöneticilerinin kabusu olduğuna dair size uzunca bir liste verebilirim. Eğer bir sistem yöneticisi iseniz biraz düşünmeniz yeterli.İşte nedenlerden bazıları : pahalı ve çabuk bozulabilen donanımlar, kullanımı bir kabus olan pahalı yazılımlar, ve geri dönmesi saatler alan büyük dosyalar. Daha da kötüsü genellikle yedekleme konusu kaçınılmaz gün gelene kadar en düşük öncelikli işler arasında yer alır. Yedeklere sahip olmanıza karşın aşağıdaki diyalogla karşılaşabilirsiniz :
User: "Dosyamı kaybettim. Bu dosya acilen gerekiyor."
SysAdmin: "Tamam, dosyanın adı ne ?"
User: "Bilmiyorum, sanırım içinde bir 'e' geçiyordu."
SysAdmin: "Ok, hangi dizin altındaydı?"
User: "Bilmiyorum, şu dizinlerden biri içinde olabilir ..."
SysAdmin: "*İç çekerek* Bu dosyayı en son ne zaman kullandığınızı biliyor musunuz ?"
User: "Hımmmmm... Sanırım bir perşembe günüydü, Şubat ya da Nisan'dı. Sorun nedir ?
Bir yedekleme sistemi olduğunu ve bunların bulunabileceğini sanıyordum."
Rsync küçük bir algoritmann mükemmel bir uyarlanmasıdır. Asıl gücü dosyasisteminin başaryla aynısının oluşturmasndan(mirror) gelir. Rsync ile kolaylıkla dosyasisteminin güncel kopyasna ağ protokolleri üzerinden (nfs, smb ya da ssh gibi ) oluşturabilirsiniz. Rsync'nin dier bir özelliği de yalnızca değişen ya da silinen dosyaların da arşivlenebilmesidir. Rsync'nin bu yazda anlatlabilecek pek çok özellikleri bulunuyor. Bunları rsync.samba.org adresinden okumanızı öneririm.
Sistemimiz ucuz bir Linux makina , pek çok ucuz disk ve rsync'yi kullanan küçük bir kabuk betiğinden (shell script) oluşuyor. [Fig 1] Yedekleme yaparken rsync'ye değişiklikleri yerleştirebilecei 'YY-DD-MM' isimli bir dizin oluşturmasını söylüyoruz. Sonra rsync sunucuyu çalıştırıyor ve değişimleri yedekliyoruz. Eğer dosya değişmiş ise eski sürüm bir incremental dizine kopyalanıyor, ve yeni dosya ana dizindeki eski dosyann üzerine yazılıyor. [Fig 2]
Genelde günlük değişimler toplam dosyasisteminin küçük bir parçasıdır. Aldığım ortalamaya göre yaklaşık %5 ile %1 arasında değişmektedir. Dolayısıyla dosyasisteminizin iki kat bir disk kapasitesi incremental yedekleme ile 50-100 gün yetecektir. Disk tamamen dolduğunda yeni bir disk setine geçin ve eskisini kapalı duruma getirin. Pratikte incremental dosyalar 6 hafta disk üzerinde korumak olanaklıdır. Gerçekte eğer bir yerlerde boş bir alan bulursanız diskleri değiştirmeden önce incremental dosyalar bu boş alana da kopyalabilirsiniz. Bu yolla disk üzerinde büyük incremental sayıların koruyabilirsiniz.
Yukarıdaki anlattığımıza geri dönelim. Şimdi teyp/kartuş sistemine karşı 6 aylık incremental yedekleriniz Linux sisteminde hazır bekliyor. Dilediğiniz arama komutlarıyla (/find/grep gibi ) tüm kayıp dosyalar bulabilirsiniz. Üstelik yalnızca içinde 'e' geçtiği ya da tarih bilgisi elimizde olsa bile. Benim favori problemim ise birisinden şu şekilde geldi :
Favori senaryomuz - tam bir çökme anı. Şimdi size büyük nfs/samba sunucunuzu kaybettiğinizi söyleyelim. Eğer samba yapılandırma dosyalarının yedekleri varsa birkaçdakika içinde bunları yedekleme sunucusundan geri dönebilirisiniz. Şimdi bunu kartuşlarla deneyelim.
Teyp Yedekleme | Rsync | |
---|---|---|
Fiyat | Çok yüksek | Düşük |
Tam (Full) Yedekleme | Hızlı | Hızlı |
Incremental Yedekleme | Hızlı | Hızlı |
Tamamını dönme | çok yavaş, büyük olasılıkla birden fazla kartuş. | Hızlı - herşey disk üzerinde |
Dosya dönme | Yavaş, birden fazla kartuşta olabilir, doğru kartuşu bulmak bazen kolay olmayabilir. | Oldukça hızlı - Herşey disk üzerinde ve UNIX araçlarının (find, grep ,locate) tam desteğiyle. |
Tam bir çökme | Tek seçenek tamamını geri dönmek. | Bir parçası da geri dönülebilir. |
Bu yapılandırmanın pek çok yolu var. Buradaki tüm araçlar açık-kod, standart dağıtımlarda bulunuyor ve oldukça kullanışlılar. Burada bir yaplandarma açıklayacağız ama daha pek çok farklı şekilde yapılandırılabilir.
Bu betik temel olarak rsync görselyöresinden alınmıştır. Burada gerçekte yalnız bir komut var :
rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av
anahtar seçenekler burada:
Aşağıdaki betik her akşam Linux'un cron komutuyla çalıştırılabilir. Betik her akşam saat 23.00 'da çalıştırılıyor."crontab -e" yazın ve aşağıdaki satırı ekleyin :
0 23 * * * /path/to/your/script
Burada betiğimiz bulunuyor. Tekrar belirtmeliyiz ki bunun pek çok yolu olabilir. Bu yalnızca bir uyarlama.
#!/bin/sh ######################################################### # Script to do incremental rsync backups # Adapted from script found on the rsync.samba.org # Brian Hone 3/24/2002 # This script is freely distributed under the GPL ######################################################### ################################## # Configure These Options ################################## ################################### # mail address for status updates # - This is used to email you a status report ################################### MAILADDR=your_mail_address_here ################################### # HOSTNAME # - This is also used for reporting ################################### HOSTNAME=your_hostname_here ################################### # directory to backup # - This is the path to the directory you want to archive ################################### BACKUPDIR=directory_you_want_to_backup ################################### # excludes file - contains one wildcard pattern per line of files to exclude # - This is a rsync exclude file. See the rsync man page and/or the # example_exclude_file ################################### EXCLUDES=example_exclude_file ################################### # root directory to for backup stuff ################################### ARCHIVEROOT=directory_to_backup_to ######################################### # From here on out, you probably don't # # want to change anything unless you # # know what you're doing. # ######################################### # directory which holds our current datastore CURRENT=main # directory which we save incremental changes to INCREMENTDIR=`date +%Y-%m-%d` # options to pass to rsync OPTIONS="--force --ignore-errors --delete --delete-excluded \ --exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR -av" export PATH=$PATH:/bin:/usr/bin:/usr/local/bin # make sure our backup tree exists install -d $ARCHIVEROOT/$CURRENT # our actual rsyncing function do_rsync() { rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT } # our post rsync accounting function do_accounting() { echo "Backup Accounting for Day $INCREMENTDIR on $HOSTNAME:">/tmp/rsync_script_tmpfile echo >> /tmp/rsync_script_tmpfile echo "################################################">>/tmp/rsync_script_tmpfile du -s $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile echo "Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile" Mail $MAILADDR -s $HOSTNAME Backup Report < /tmp/rsync_script_tmpfile echo "rm /tmp/rsync_script_tmpfile" rm /tmp/rsync_script_tmpfile } # some error handling and/or run our backup and accounting if [ -f $EXCLUDES ]; then if [ -d $BACKUPDIR ]; then # now the actual transfer do_rsync && do_accounting else echo "cant find $BACKUPDIR"; exit fi else echo "cant find $EXCLUDES"; exit fi