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.