UNIX Dilinde Konuşma, Bölüm 5: Veriler, veriler her yerde!

0
butch
IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 5: Veriler, veriler her yerde!

Birden çok sistemde saklanan dosyaların taşınması ve yönetilmesi

Düzey: Orta

Martin Streicher (mstreicher@linux-mag.com), Baş Editör, Linux Magazine

28 Kasım 2006

Dosyaları sistemler arasında nasıl taşıyacağınızı ve bu kadar yayılmış verileri, nasıl zamanuyumlu tutacağınızı gösteren birkaç tekniğe bakalım.

Son yıllarda bilgisayar donanımı komik bir şekilde ucuzladı. Bir gigabaytlık bir sabit disk alanının maliyeti 0,50 Dolar'a indi, 19 inçlik düz panelli ekranların 200 Dolar'ın ve UNIX® çalıştıran bir dizüstü bilgisayar 1000 Dolar'ın altında maliyeti olabiliyor. Özel sunucu donanımları bile sıradan bir mal fiyatına indi.

Bu kadar düşük fiyatlarla, orta ya da büyük ölçekli kuruluşlar, ayrı donanım parçalarını farklı görevler için ayırabiliyorlar. Bununla birlikte, bilgi işlem kapasitesini genişletmek, bir makineyi bir ağa bağlamak, bir disk görüntüsünü yeni bir beyaz kutuya (bir soysal bilgisayar) kopyalamak ve daha sonra, yeniden başlatmak kadar kolay olabiliyor. Elbette, her şeyin bir bedeli var. Her bilgisayar, elektrik, soğuk hava, sevgi ve ilgi bekliyor.

Çok sayıda bilgisayar yönetirken karşılaşılan en yaygın sorunlardan biri, bu kadar çok sistemi güncel tutmak ve tutarlı bir şekilde yönetmektir. Bazı durumlarda, tutarsız ifadelerle kullanıcıların kafası karışmasın diye bir uygulama sürümünün her yere uygulanmasını istersiniz. Ya da, başka bir örnek verirsek, her bir sunucudaki aynı işletim sisteminin aynı amaca hizmet etmesini isteyebilirsiniz. Tahmin edebilmek iyidir.

Yalnızca bir dizüstü bilgisayarınız ve bir masaüstü bilgisayarınız olsa bile, bu iki makineyi zamanuyumlu tutabilmek göz korkutucu bir görevdir. Bugün yolda, taşınabilir bilgisayarınızla çalışıyorsunuz. Dün de masaüstünüzü düzeltmeye çalıştınız. İki günde de dosyaları, merkezi bir dosya sunucusundan ya da merkezi bir dosya sunucusuna yüklemiş olabilirsiniz. Veriler gelip giderken kısa zamanda neyin nereden olduğunu karıştırabilirsiniz.

Bu dizinin 5. bölümünde, gelin birlikte dosya patlamalarını denetim altında tutmanıza yardımcı olabilecek birkaç tekniğe bakalım.

Arşivleyip iletme

Birden çok bilgisayardaki verileri tutarlı bir şekilde saklamanın en kolay yolu, dosyalarınızı (elektronik sayfa, veritabanı, metin dosyaları, vb.) beraberinizde tutmanızdır. Kullandığınız tüm makinelere fiziksel erişiminiz varsa, taşınabilir bir diski, CD-RW sürücüsünü ya da büyük bir flaş bellek kösteğini taşıyabilir ve dosyalara gereksinim duyduğunuzda depolama aygıtını hemen takabilirsiniz.

Ancak, kullandığınız bir makine uzaktaysa ya da makineye erişilemiyorsa, diyelim ki Boise, Idaho'daki şirketinizin makine odasındaysa, çevrebirim aygıtlarını bağlamak bir seçenek olamaz. Bunun yerine, dosyalarınızdan bir arşiv oluşturabilir (bir kısmıyla ya da tümüyle), yerel ağınıza (LAN) ya da genel ağınıza (WAN) bağlanabilir, arşivi hedefe kopyalayabilir ve çalışmanıza devam etmek için dosyaları geri yükleyebilirsiniz. (Dahası, arşivi, bilgisayarınızı takside unutmak gibi olağanüstü bir durumda dosyalarınızı korumak için basit bir yedek olarak da kullanabilirsiniz.)

UNIX sistemlerinde, stalwart yardımcı programı tar, arşiv oluşturma gibi basit bir işi yapar. tar yardımcı programı bir ya da daha çok dosyayı ve dizini tek bir dosyada birleştirir, baytları, sahipleri, izinleri, dosya tipini ve özgün dosyaların dosya sistemi hiyerarşinizdeki istasyonu korur. tar yardımcı programı, dosyalarınızı bire bir olarak manyetik banda kaydeder -- tar, nitekim tape archiver (manyetik bant arşivleyicisi) teriminin kısaltmasıdır.

Örneğin, çeşitli dosyalardan oluşan Liste 1'deki gibi bir dizininiz olsun.


Liste 1. Dosya dizini
 
$ cd stuff
$ ls -lR
.:
drwxr-xr-x  2 mstreicher mstreicher   4096 Oct 12 19:11 css
-rwxr-xr-x  1 mstreicher mstreicher     91 Aug 17  2005 demo.rb
-rw-r--r--  1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf

./css:
total 16
-rw-r--r--  1 mstreicher mstreicher   711 Mar 25  2006 style.css
-rw-r--r--  1 mstreicher mstreicher 11353 Apr 10  2006 valid.css

İki dosya ve dizinden oluşan bir arşiv oluşturmak için tar yardımcı programını çalıştırın:

$ tar --create --verbose --gzip --file archive.tgz *
css/
css/style.css
css/valid.css
demo.rb
tech.pdf

--create seçeneği, tar yardımcı programına bir arşiv oluşturmasını söyler; --verbose seçeneği, tar yardımcı programının işlediği dosyaların bir listesini oluşturur; --gzip seçeneği, gzip stili sıkıştırmayı etkinleştirir ve arşivi sıkıştırır; --file archive.tgz de arşivin adını belirtir.

Kabuk, yıldız işaretini (*) "tüm dosyalar" olarak yorumlar ve bu nedenle bunu iki dosya ve dizin adı şekilinde açar. Yukarıdaki çıkıştan hemen anlayabileceğiniz gibi tar, css dizinini arşivler ve bu dizinin içeriğini arşivlemeyi yineler.

tar yardımcı programını çalıştırdıktan sonra geçerli dizinde archive.tgz adlı yeni bir dosya bulunur:

$ ls -l archive.tgz 
-rw-r--r--  1 mstreicher mstreicher 105470 Oct 13 17:16 archive.tgz

Artık, archive.tgz dosyasını başka bir bilgisayara kopyalayabilir ve önceden arşivlenen dosyayı çıkarmak için uzak bilgisayarda tar yardımcı programını çalıştırabilirsiniz. Aslında, dosyaları geri yüklemeye ilişkin komut satırı, önceki komut satırının neredeyse aynısıdır. Arşivi çıkarmak için aşağıdaki komut satırını kullanın:

$ tar --extract --verbose --gunzip --preserve-permissions --file archive.tgz

Bu tar komutu, archive.tgz tar dosyasının içeriğini çıkarır. --extract seçeneği, --create seçeneğinin karşıtıdır; --gunzip, --gzip seçeneğinin tersidir ve --preserve-permissions, özgün dosyaların izinlerini yeniden oluşturur.

Bu komutu çalıştırdıktan sonra, sakladığınız dosyalar zaman damgası, izinleri ve dosya adı korunarak tam olarak geri yüklenir. Ayrıca, css adlı dizin de, içeriği situ içine çıkarılmış bir şekilde yeniden oluşturulur.

tar yardımcı programında çok sayıda seçenek kullanılır: --create, --extract ve --list (.tar dosyasından açmadan katalog oluşturur). Diğer seçenekler (--gzip ve --preserve-permissions gibi), tar yardımcı programının arşivi oluşturma şeklini denetler. Daha fazla ayrıntı ve her bir seçeneğin uygun sözdizimi için UNIX sürümünüze ilişkin tar man sayfasına bakın.

Arşiv oluşturma, bunu hedefe kopyalama ve çıkarma yararlıdır, ancak çok zahmetli olabilir. Ayrıca, arşiv aşırı büyükse, arşivi ve açılan dosyaları saklayamayabilirsiniz. Zamandan tasarruf sağlamak için ve kaynak ve hedef bilgisayarlar bir LAN ya da WAN aracılığıyla bağlıysa, Güvenli Kabuk, SSH ve tar yardımcı programını dosyaları tek bir hamlede arşivlemek, kopyalamak ve çıkarmak için birleştirebilirsiniz. Bu işlem aşağıda gösterilmiştir:

$ (cd ~/stuff; tar --create --gzip --file - *) | \
  ssh destination tar --extract --gunzip --file --verbose -C stuff

Bu komutta olup biten çok şey var. O zaman gelin bu komutu parçalarına ayıralım:

  1. Parantez içine alınmış komut dizilerine alt kabuk denir. Dizinin değiştirilmesi gibi alt kabukta yapılacak değişiklikler, komut satırınızı etkilemez, ancak alt kabuğun ortamını etkiler. Dolayısıyla, ilk sözcük grubu olan (cd ~/stuff; tar --create --gzip --file - *), ~/stuff dizinine geçilmesini sağlar ve tar yardımcı programını çalıştırır. Alt kabuğun ardından bir dikey çubuk gelir ve alt kabuğun tüm çıkışı dikey çubukla tanımlanan ardışık işlemdeki bir sonraki komuta gönderilir.
  2. Diğer birçok UNIX yardımcı programı gibi tar da standart çıkışlardan (stdout) yazabilir ve standart girişlerden (stdin) okuyabilir. Hem stdout, hem de stdin genellikle bir tire işareti (-) ile belirtilir. Dolayısıyla, --create --file - sözcük grubu, arşivi stdout üzerinde oluşturur.
  3. Dikey çubuk (|), alt kabuğun tüm çıkışını ssh'de birleştirir. Bu, tüm çıkışı etkili bir şekilde kaynak bilgisayardan hedef bilgisayara aktarır.
  4. Son olarak, hedef makine, arşivi çıkarmak için kendi tar örneğini çalıştırır. Ancak burada, --extract --file -, arşivi standart girişten okur. -C seçeneği, alan tar yardımcı programını, herhangi bir işleme başlamadan önce dizini stuff olarak (uzak ana dizininizdeki) değiştirmeye zorlar. Sonuçta, ssh aracılığıyla iletilen arşiv ~/stuff dizininde paketinden çıkarılır.

Tek bir komutta (biraz uzun olsa da) dosyalarınızı arşivlediğiniz, aktardınız ve arşivinizdeki dosyaları çıkardınız. Bu arada, komut satırının sırası değiştirildiğinde uzak bilgisayarda oluşturulan bir arşivi alabilir ve yerel bilgisayarınıza çıkarabilirsiniz. Yerel makineden çalıştırılan bu çözümü aşağıda görebilirsiniz:

$ ssh destination cat archive.tgz | \
  (cd ~/stuff; tar --extract --gunzip --file -)

Uzak arşiv, uzak bilgisayarda açılır ve cat'den gelen bayt akışı, önce dizini değiştiren ve daha sonra, arşivi çıkaran bir alt kabuğa gönderilir. (tar komutuna -C ~/stuff seçeneğini eklerseniz, aynı etki gerçekleşir; örnekte yalnızca alt kabukların da giriş tüketebileceği gösterilmektedir.)

Aynı makinede dosyaları ikizlemek için de aynı yöntemi kullanabilirsiniz. Şöyle bir şey deneyin:

tar --create --file - * | tar -C /path/to/directory --extract --file -

Kopyalama, kompliman yapmanın en samimi şeklidir

ssh'nin kullanıldığı tar yardımcı programı, dosyaları bir makineden bir diğerine aktarmak için uygun bir yöntemdir. tar yardımcı programı arşivi oluşturur ve ssh, arşivin güvenli aktarımını kolaylaştırır.

Başka bir yöntem de dosyaları bir makineden başka bir makineye aktarmak için SSH'nin doğal yeteneklerini kullanmaktır. SSH'nin başka bir "kişiliği" olan sftp, FTP'nin (Dosya Aktarımı Protokolü) tüm özelliklerini sağlarken, aktarma sırasında dosya verilerini de korur. (Genellikle, güvenli olmadığı için FTP'nin kullanılması uygun görülmez; ancak, genel kullanıma açık FTP siteleri, bu kural için önemli bir istisnadır.)

Daha önce FTP kullandıysanız, sftp sanal olarak FTP'yle aynıdır. hedef adlı uzak makineye bağlanmak için yalnızca sftp hedef yazın ve dosyaları ileri geri taşımak için cd, lcd, mput ve mget gibi FTP komutlarını çalıştırın.

Dosyaları iki makine arasında aktarmanın bir başka yöntemi de scp ya da secure copy (güvenli kopyalama) olanağını kullanmaktır. Adından da anlaşılacağı gibi scp, daha çok eski basit cp gibi çalışır: Dosyaları bir yerden başka bir yere kopyalar. Bu yer aynı makinede ya da iki makine arasında olabilir.

Örneğin, bazı dosyaları ve dizinleri yerel makinenizdeki başka bir dizine kopyalamak istediğinizde, Liste 2'dekine benzer bir kod çalıştırırsınız.


Liste 2. Dosyaların iki makine arasında kopyalanması
        
$ ls -lF
drwxr-xr-x  2 mstreicher mstreicher   4096 Oct 12 19:11 css/
-rwxr-xr-x  1 mstreicher mstreicher     91 Aug 17  2005 demo.rb*
-rw-r--r--  1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf
$ cp -pr * /home/joe/stuff
$ ls -lF /home/joe/stuff
drwxr-xr-x  2 mstreicher mstreicher   4096 Oct 12 19:11 css/
-rwxr-xr-x  1 mstreicher mstreicher     91 Aug 17  2005 demo.rb*
-rw-r--r--  1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf

Bu örnekte, cp -pr yinelemeli olarak tüm dosyaları ve dizinleri /home/joe/stuff dizinine kopyalar. -r, yinelemeye neden olur; -p, dosyaların zaman damgalarını korur.

Aynı şeyi (yerel olarak kopyalama) scp ile yapabilirsiniz:

$ scp -pr * /home/joe/stuff

Ancak, uzak bir sistemi belirlerseniz, scp dosyaları ağ üzerinden kopyalar:

$ scp -pr * destination:/home/joe/stuff


/home/joe/stuff dizininin hedef makinede var olduğunu ve sizin bu dizine yazma yetkinizin olduğunu varsayarsak, iki dosya ve dizin bire bir olarak uzak makineye kopyalanır. cp gibi, scp de korumak için -p ve yineleme için -r seçeneklerini tanır.

Özellikle her ssh/scp/sftp işlemi için parolanızı yazmamak için bir gizli-genel anahtar çifti oluşturduysanız, scp'nin kullanımı çok kolaydır.

Ancak, scp'nin bilmeniz gereken bir de tuhaflığı vardır. Ana dizininizde doc adlı bir dizinin bulunduğunu ve bunu, bir uzak sisteme kopyalamak istediğinizi varsayalım. Ayrıca, ~/doc dizininin içeriğinin, bir dosya ya da dizin adının aynı olduğu durumlarda, uzak doc dizininin içeriğinin üzerine yazılmasını istiyorsunuz. Kullanılacak komut şöyle bir şey olacaktır:

$ scp -pr ~/doc destination:/path/to/doc

Hedef makinedeki yolun sonunda sağa eğik çizginin (/) olmadığına dikkat edin. scp, yolu "~/doc dizininin içeriğini, hedef makinedeki /path/to/doc dizinine kopyala" olarak yorumlar. cp'yle olduğu gibi, yerel dosya ve dizinlerle aynı adı taşıyan uzak dosyaların ve dizinlerin üzerine yazılır; uzak sistemdeki benzersiz dosyalara dokunulmaz.

Ancak, aşağıdaki gibi sona bir sağa eğik çizgi eklerseniz:

$ scp -pr ~/doc destination:/path/to/doc/

scp, bu yolu "~/doc dizinini /path/to/doc dizinine kopyala" olarak yorumlar. Dolayısıyla, uzak dizinin içeriğinin üzerine yazmak yerine, yerel doc dizini uzak dizine kopyalanır.

Sona eklenen sağa eğik çizgi bir hata değildir. Bazen bunu kullanmak isteyebilirsiniz; diğer zamanlarda, amacınıza bağlı olarak istemeyebilirsiniz.


Zamanuyumlu tutma

scp, oldukça yararlıdır, çünkü cp'yi çok yakından taklit eder. tar ve ssh biraz daha karmaşıktır; ancak bunlar da sahip ve izinler gibi dosya meta verilerini korur.

Ancak hem tar, hem de scp yerel ve uzak dizinlerin içeriğini eşzamanlayamaz. Örneğin, yerel sistemde bir dosyayı ve uzak sistemde başka farklı bir dosya değiştirdiyseniz, çalışan bir ikiz yapmak için iki scp komutu çalıştırmanız gerekir. Şimdi, değişen çok sayıda dosyanızın olduğunu düşünün, bunların birçoğu da aynı adı taşıyor. Çok hızlı bir şekilde, eşzamanlamanın ne kadar karmaşık olabileceğini görebilirsiniz.

Dosya kümelerini eşzamanlayan rsync adlı harika bir yardımcı program olduğu için şanslısınız. Daha da iyisi, rsync yalnızca değişen verileri aktararak, aktarılan veri miktarını en alt düzeye indirir.

tar gibi rsync yardımcı programını ssh ile birleştirip uzak sistemleri bağlayabilir ve yerel ve uzak dosya topluluklarını eşzamanlayabilirsiniz. scp gibi rsync yardımcı programını dosyaları yerel olarak kopyalamak için kullanabilirsiniz. Ayrıca, rsync yardımcı programını kullanarak dosyaları listeleyebilirsiniz.

Ancak en iyisi, rsync yardımcı programında bir dizini, başka bir dizinin doğru ikizi yapacak seçenekler vardır. Özgün dizinde olmayan dosyaları silmek için seçenekler kullanılır. Gelin birlikte bazı örneklere bakalım:

$ rsync -e ssh --times *.txt destination:

Bu komut, geçerli çalışma dizinindeki tüm metin dosyalarını destination adlı makinedeki ana dizininize kopyalar. -times seçeneği, her bir dosyanın erişim, oluşturma ve son değiştirme zamanı bilgilerini korur.

$ rsync -e ssh --times --perms --recursive --delete doc destination:

Bu rsync komutu, ana dizininizde bulunan yerel doc dizinini destination makinesine ikizler. İzinler ve dosya zamanları korunurken, yabancı dosyalar (yerel dizinde var olmayan uzak dizindeki dosyalar) kaldırılır.

rsync bazı önemli değişiklikler yapabilir. Bu nedenle, resync komutu yapmayı planladığı şeyi önizlemek için komut satırına --dry-run seçeneğini eklemeyi tercih edebilirsiniz. --dry-run herhangi bir değişiklik yapmaz -- yalnızca Liste 3'teki gibi neler olacağını gösterir.


Liste 3. rsync komutunun yapacaklarının önizlenmesi
        
$ rsync -e ssh --dry-run --times --perms --recursive --delete bin destination:
building file list ... done
bin/
skipping non-regular file "bin/HTML.pl"
skipping non-regular file "bin/Quark.pl"
bin/Responses/
bin/Responses/DBI.pm
bin/Responses/Response.pm
skipping non-regular file "bin/XML.pl"
bin/backupdca.sh
bin/lib/
bin/report.pl
bin/report.txt

sent 724 bytes  received 108 bytes  554.67 bytes/sec
total size is 168879  speedup is 202.98

rsync yardımcı programında birçok seçenek vardır:

  • -a çok değerlidir; --group --owner --perms --times --devices --links --recursive seçeneklerinin kısaltmasıdır. --devices, aygıt dosyalarını yeniden oluşturur ve --links, simgesel bağlantıları, simgesel bağlantının gösterdiği şey yerine simgesel bağlantı olarak kopyalar.
  • --update, rsync komutunun yeni dosyaların üzerine yazmasını önler. Uzak sistemde, yerel sistemdekinden daha yeni bir dosya varsa, uzak sistemin dosyası korunur.
  • rsync komutunun neler yapacağını izlemek için --verbose seçeneğini kullanın.

Yine, ince ayrıntıları öğrenmek için rsync man sayfasını okuyabilirsiniz. Önemli özelliklerinden biri, tanımladığınız ölçüte göre dosyaları özellikle içermesi ya da dışlamasıdır.


Veriler, veriler her yerde

UNIX, 20 yıldan fazladır ağ ortamlarında kullanılıyor. Bu süre içinde donanım büyük ölçüde değişti, ancak yazılımın büyük bir kısmı aynı kaldı. Dolayısıyla, kullanıcıların ve sistem yöneticilerinin sorunları da değişmedi. En büyük sorunlardan biri, tüm verileri takip etmek oldu. Bu sorun, disk kapasitesinin büyümesiyle devasa boyutlara ulaştı. tar, sftp/scp ve rsync gibi yardımcı programlar, en vahşi diskleri bile evcilleştirebiliyor.

Bu dizinin 6. bölümünde, zamandan ve emekten tasarruf sağlamak ve insanlardan kaynaklanan hataları azaltmak için bir başka yöntem olan otomasyon konusuna göz atacağız.



Kaynaklar

Bilgi Edinme

Ürün ve teknoloji edinme

Tartışma


Yazar hakkında

Martin Streicher, Linux Magazine adlı dergide Baş Editör'dür. Purdue University'den bilgisayar bilimi konusunda master derecesi almış ve 1982 yılından bu yana UNIX benzeri sistemlerde Pascal, C, Perl, Java ve (en son) Ruby programlama dillerinde programlama yapmaktadır. Martin'e martin.streicher@linux-mag.com adresinden erişebilirsiniz.

Görüşler

0
realist

UNIX'e yeni girmiş arkadaşlar bu serinin başlığındaki "UNIX"i AIX olarak değiştirirlerse, IBM'in Microsoft benzeri, her şeyi sahiplenme rahatsızlığının sebep olacağı kafa karışıklığını önlemiş olurlar.

Ayrıca "stalwart", güçlü, güvenilir demekmiş. seslisozluk.com her derde deva.

Görüş belirtmek için giriş yapın...

İlgili Yazılar

GTK+ ile ilgili temel bilgiler, Bölüm 3: GTK+ nasıl yayılır?

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Ajax Konusunda Uzmanlaşma, Bölüm 8

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 7: Komut satırı deyimleri

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Ajax ve XML: Beş adet genel Ajax kalıbı

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

UNIX Dilinde Konuşma, Bölüm 1: Komut satırının gücüne hükmedin

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.