Mayıs 2012 için arşiv

ext3 Dosya Sisteminde “Too Many Links” Hatası

Bildiğiniz gibi, ext4 çıkana kadar bir çok popüler Linux dağıtımında dosya sistemi olarak ext3 kullanılıyordu. Bu dosya sistemi, yaygınlığını ext2 dosya sistemi üzerine, geri uyumlu olarak geliştirilmesine borçlu. Tabi, bu geri uyumluluk bazı dezavantajlar da getiriyor.

Bir çok uygulama (özellikle web uygulamaları) dizini, müzik ve video arşivi gibi dosya ve dizinlerin çok olduğu bir dosya yapısı ile uğraştıysanız, “Too Many Links” hatası almış olmanız muhtemel. Özellikle, doğru tasarlanmamış web uygulamaları, yüklenen dosyaları sadece tek bir dizin altına kopyalıyorsa bu hatanın alınması kaçınılmaz olur. Benzer şekilde, müzik / video arşivini belirli bir hiyerarşiye koymadan tek bir dizin altına toplayanlarınız varsa (ki olmamasını temenni ederim), bu hatayı görmüş olabilirsiniz.

Peki, nedir bu hatanın sebebi?

İlk paragrafta dediğim gibi, ext3 dosya sistemi, ext2 ile uyumlu çalışabilmesi için bazı ext2 özelliklerini aynen devam ettirmek zorunda kaldı. Bunlardan biri de, bir dizin altında bulunabilecek dosya/dizinlerin sayısı. ext2 dosya sisteminde, bir dizin altında bulunacak “link” (dosya/dizin) sayısı, en fazla 32,000 olabilir. Bunlardan 2 tanesi, “.” ve “..” linkleri her dizin için olmak zorunda, o yüzden, bir dizin altında bulunabilecek dizin sayısı 31,998’i geçemez. ext3 dosya sistemi de bu özelliği devam ettirmek için aynı limitleri kullanmaktadır. Bu sayıyı arttırmak ancak uygun parametreleri değiştirerek Linux çekirdeğini (kernel) yeniden derleyerek yapılabilir.

Çok dosyam var, ne yapayım ben?

Eğer müzik arşiviniz için soruyorsanız, bence o diske format atın.

Ama, eğer web uygulamanızın aldığı / ürettiği dosyalar için soruyorsanız, orada birşeyler yapabilliriz. Öncelikle, sisteminize yüklenen dosyaları, orijinal isimleri ile değil, “hash” fonksiyonundan geçmiş halini kullanacağız. Örnek olarak, MD5 hash fonksiyonunu kullanacağız. Bildiğiniz gibi, MD5 fonksiyonu bize 32 karakterlik, 16’lık sayı tabanında bir sonuç verecektir. İşin sırrı, bu 16’lık tabanda elimize gelen 0-f arası 16 karakteri anahtar olarak kullanmak. Dosyaların kaydedildiği yerde bir seviye daha oluşturup, dosyanın MD5 sonucunun ilk karakterini bu dizin adına vereceğiz. Bundan sonra, dosya adının MD5 sonucu o karakterle başlayan dosyaları bu dizin altına koyacağız.

Yani, önce şu şekilde görünen dosya sistemi,

 

 

 

düzenlemeden sonra şu şekilde görünecek:

 

 

 

 

 

Bu sayede, bir dizin altında bulunan dosyaları 16 ayrı dizine, belli bir mantıkla dağıtılmış olacak. Uygulamada yapılacak küçük değişiklikler ile, dosyaları daha düzgün bir şekilde depolayabileceğiz. Bir dizin altında bulunan dosya sayısı da azaldığı için “Too Many Links” hatası almayacağız. Eğer dosya sayısı artarsa, bu dizinlerin altında aynı mantıkla bir seviye daha oluşturulabilir. Bu şekilde, teker teker seviyelendirerek 16 seviye oluşturabiliriz.

Şimdi size uygulamanızda biraz iş düşüyor. Kolay gelsin o halde.

#PGDayTR’nin Ardından

2. Türkiye PostgreSQL konferansı, geçen sene olduğu gibi, bu sene de İstanbul’da Bahçeşehir Üniversitesi’nde yapıldı. Geçen sene, vaktimi nöbet kulelerinde harcadığım için katılamamıştım, Bu sene, biraz zorlamayla da

2. Türkiye PostgreSQL Konferansı

olsa 3+1 arkadaş bu sene katıldık. Biraz deniz, biraz İstanbul derken konferans zamanı gelmişti. İlk icraatımız, Foursquare üzerinden etkinliği oluşturmak ve check-in yapmak oldu. Daha sonra, #PGDayTR hashtag’i ile Twitter üzerinden
Birbirinden değerli insanların sunum yaptığı konferansta, iki kişi benim için özellikle etkiliydi. Birincisi, PostgreSQL Avrupa Başkanı Magnus Hagander, ikincisi de – affına sığınarak – “İmparator Penguen” olarak niteleyebileceğim Devrim Gündüz. yazmaya başladık. Twitter’da bu tag ile arayınca etkinlik sırasında atılan yazılara – çok olmasa da – ulaşabilirsiniz.

Magnus Hagander, konferansın ilk konuşmasını yaptı. Bu konuşmada, devrim niteliğinde bir sürüm olarak görülen 9.2 sürümü ile gelen özellikleri, süresi yettiğince anlattı. Yeni gelen performans iyileştirmeleri, “Yeşil Bilişim – Green Computing” için yapılan güç tüketimi ayarları, yeni veri yapıları gibi bir çok yeniliği paylaştı. Tabi, bunları şimdi buraya ayrıntılarını yazmayacağım, biraz araştırın ya da PostgreSQL 9.2’nin çıkmasını bekleyin.

Devrim Gündüz, aslında bıraksak tek başına bir konferans yapabilecek enerjideydi. İlk konuşmasında bizim uyguladığımız RedHat + PostgreSQL Cluster çözümünü anlatması bir garip yaptı beni. Onca kişinin önünde, kendi uyguladığımız bir çözümün anlatılması ve önerilmesi, güzel bir duyguymuş. Belki de, artık bu çözümü bizim anlatma zamanımız geldi, di mi Devrim?

İkinci konuşmada Oracle’a giydirme seansı, stand-up şov gibi oldu, çok da eğlenceliydi. Keşke biraz daha giydirebilseydik.

Yazacak daha çok şey bulunabilir, ama gerek yok. Seneye siz de gelin, siz de görün.

Adres ne mi? İşte: http://pgday.postgresql.org.tr

Peki Twitter yok mu? O da var: https://twitter.com/#!/PGDayTR

Eski bir Hitit atasözünün dediği gibi, “May the source be with you!”