Büyük bir lojistik merkezinden veya medikal depodan hastaneniz için bir depo kiraladığınızı hayal edin. Depo şirketi devasa afişler basmıştır: "SINIRSIZ TAŞIMA KAPASİTESİ! İstediğiniz ağırlıkta, tonlarca tıbbi cihazı, oksijen tüpünü, serum kolilerini bu depoya yığabilirsiniz! Ağırlık sınırı yok!" Sözleşmeyi imzalarsınız. Depoya girip malzemeleri yerleştirmeye başlarsınız. Ancak 101. kutuyu kapıdan sokmak istediğinizde deponun güvenlik görevlisi önünüze dikilir: "Durun! İçeriye daha fazla malzeme sokamazsınız!" Şaşırırsınız: "Nasıl sokamam? Depo bomboş, içerideki eşyaların toplam ağırlığı 50 kilo bile değil, siz sınırsız tonaj vaat etmiştiniz!" Görevli sırıtır, cebinden 40 sayfalık sözleşmeyi çıkarır ve en alttaki mikroskobik 6 punto dipnotu gösterir: "Madde 48-B: Depomuz ağırlık olarak sınırsızdır; ancak depoya sokulabilecek toplam bağımsız parça sayısı (nesne adedi) 100 ile sınırlıdır. İçeriye 100 adet dikiş iğnesi koysanız bile hakkınız biter." Tonlarca boş yeri olan devasa depo, 100 adet iğne yüzünden kilitlenmiştir.
Web barındırma (Shared Hosting) sektöründe pazarlamacıların en sevdiği ve en çok can yakan illüzyonlarından biri tam olarak bu depodur: "Sınırsız Disk Alanı" yalanı ve arkasına pusu kurulmuş olan acımasız Inode (İndeks Düğümü) Sınırı.
Linux Dosya Sisteminin Gerçeği: Inode Nedir?
Birçok bilgisayar kullanıcısı dosya sistemini sadece megabaytlar ve gigabaytlar olarak algılar. Ancak Linux dosya sistemlerinde (ext4, XFS) durum çok farklıdır.
Bir disk iki ayrı parametreyle dolabilir:
- Blok Alanı (Boyut): Diskin kapladığı fiziksel bayt miktarı (GB).
- Inode (İndeks Düğümü / Dosya Adedi): Dosya sisteminde oluşturulabilecek toplam dosya ve klasör adedi!
Her bir dosya, klasör, sembolik bağ (symlink) veya geçici oturum dosyası, diskte boyutundan bağımsız olarak tam 1 adet Inode tüketir.
- 10 GB'lık tek bir devasa film dosyası: 1 Inode tüketir.
- İçinde sadece tek bir harf yazan 1 baytlık 100.000 adet metin dosyası: 100.000 Inode tüketir!
+------------------------------------------------------------------------+
| MÜŞTERİNİN GÖRDÜĞÜ PANEL |
| |
| Disk Kullanımı: 4.2 GB / SINIRSIZ (Kullanılan: %0.01) [Yeşil Çubuk] |
| |
|------------------------------------------------------------------------|
| GİZLENEN GERÇEK: INODE LİMİTİ |
| |
| Dosya Adedi (Inode): 250.000 / 250.000 (%100 DOLU!) [KIRMIZI ALARM] |
| |
| SONUÇ: Diskte 500 GB boş yer var; ama 1 baytlık yeni dosya açılamaz! |
+------------------------------------------------------------------------+
Patolojinin Gelişimi: "Disk Dolu: No Space Left on Device"
Müşteri e-ticaret sitesine WooCommerce kurar, bir önbellek (Cache) eklentisi (WP Rocket, LiteSpeed Cache) ekler ve 5.000 adet ürün yükler:
- Her ürün için WordPress otomatik olarak 8 farklı boyutta küçük resim (thumbnail) üretir (40.000 dosya).
- LiteSpeed Cache her ziyaretçi ve her sayfa için küçük bir HTML önbellek dosyası üretir (80.000 dosya).
- PHP oturum dosyaları ve sistem logları birikir (50.000 dosya).
- E-postalar gelen kutusunda birikir (40.000 dosya).
Toplam disk alanı: Yalnızca 3.8 GB. Sağlayıcının vaat ettiği "Sınırsız" diskin zerresi bile kullanılmamıştır.
Ancak gece saat 23:00'te sağlayıcının CloudLinux / cPanel Inode sayacı 250.000 tavanına çarpar!
Ve o an sistemde kaos başlar:
- Veritabanı Yazamaz: MySQL geçici tablo oluşturamaz.
- Resim Yüklenemez: Medya kütüphanesine yeni ürün resmi atamazsınız:
Upload failed. Could not write file to disk. - E-postalar Reddedilir: Gelen mailler sunucuya giremez:
Mailbox is full / Disk quota exceeded. - Site Çöker: Önbellek eklentisi yeni dosya yazamadığı için PHP ölümcül hata verir:
Fatal error: Unknown: Failed to open stream: No space left on device.
Müşteri cPanel'e girer: Disk kullanımında "4 GB / Sınırsız" yazmaktadır! Müşteri çıldırır: "Diskim boşken neden disk dolu hatası alıyorum?!"
Müşteri Hizmetlerinin Pişkinliği: "Alanınız Değil, Adediniz Doldu!"
Müşteri destek bileti açar:
"Sunucumda disk dolu hatası alıyorum, acilen düzeltin!"
Destek ekibinin o ezberletilmiş yanıtı gelir:
"Sayın müşterimiz, hosting paketlerimizde disk alanı sınırsız olmakla birlikte, sunucu sağlığını ve I/O dengesini korumak adına maksimum Inode limitimiz 250.000 dosyadır. Hesabınız Inode sınırına ulaştığı için yeni dosya oluşturulması sistem tarafından kısıtlanmıştır. Lütfen sitenizdeki gereksiz dosyaları, resimleri ve cache klasörlerinizi silerek dosya sayınızı 200.000'in altına düşürünüz."
Müşteri haklı olarak isyan eder:
"Siz sitenize kocaman 'Sınırsız Disk' yazdınız! Ben neden kendi sitemin önbelleğini ve ürün resimlerini silmek zorundayım?!"
Ama nafiledir. Hizmet sözleşmesinin 72. maddesinde o minik Inode kuralı durmaktadır.
Hosting Firmaları Neden Inode Sınırı Koyar?
Peki, sağlayıcılar bu sınırı neden koyar? Sırf müşteriye eziyet etmek için mi?
Burada mühendislik açısından acı bir gerçek yatar: Dosya Sisteminin Fiziksel Sınırları.
- Tek bir fiziksel sunucuda 1.000 müşterinin olduğunu düşünün.
- Her müşteri "Sınırsız diskim var" diyerek sunucuya 2 milyon adet küçük dosya (örneğin kontrolsüz bir Node.js
node_modulesklasörü veya cache) yüklerse; o sunucuda 2 Milyar adet dosya oluşur! - Linux dosya sistemi 2 milyar dosyanın olduğu bir dizinde
lsyaparken, yedek alırken (tar / rsync) veya virüs taraması çalıştırırken kilitlenir. Disk I/O kuyruğu felç olur.
Dolayısıyla teknik olarak bir dosya sayısı sınırı koymak makuldür. Sahtekarlık olan kısım; bu sınırı gizleyip afişlere "SINIRSIZ DİSK" yazarak müşteriyi kandırmaktır.
Teşhis: Terminalde Inode Taraması
Sunucunuzda Inode sınırına dayanıp dayanmadığınızı görmek için terminale şu cerrahi komutu yazın:
# Inode kullanım durumunu gösterir:
df -i
# Örnek Çıktı:
# Filesystem Inodes IUsed IFree IUse% Mounted on
# /dev/sda1 1000000 1000000 0 100% /Ekranda IUse% 100% görüyorsanız, kaç gigabayt boş yeriniz olduğunun hiçbir önemi yoktur; dosya sisteminiz boğulmuştur.
Hangi Klasörün Inode Canavarı Olduğunu Bulma Formülü:
Hangi dizinde milyonlarca dosya biriktiğini bulmak için şu tek satırlık bash betiğini çalıştırın:
find /var/www/vhosts/site.com/public_html -maxdepth 3 -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -k 2Çıktı suçluyu anında gösterir:
wp-content/uploads: 12.000 dosyawp-content/cache/supercache: 185.000 dosya! (İşte katil buradadır!)
Cerrahi Çözüm: Inode Diyetine Girmek
Eğer paylaşımlı bir hostingde mahsur kaldıysanız ve paketinizi yükseltemiyorsanız acil durum temizliği şarttır:
- Önbellek Dosyalarını Dosya Sisteminden Belleğe Taşıyın:
Önbelleği diskte milyonlarca.htmldosyası olarak tutmak yerine Redis veya Memcached nesne önbelleğine geçin. Bellekteki anahtarlar Inode tüketmez. - Kullanılmayan Görsel Boyutlarını Kapatın:
WordPress temanızın her yüklenen resim için 10 farklı boyut üretmesini engelleyin (Settings -> Media -> Thumbnail sizes -> 0). - E-Posta Çöpünü Temizleyin:
Webmail üzerindekiJunk / SpamveTrashklasörlerindeki yüz binlerce eski maili boşaltın. - Gerçek Çözüm: Kendi VDS'inize Geçin!
Kendi sanal sunucunuzu (VDS) kiraladığınızda diski kendi istediğiniz Inode değeriyle (mkfs.ext4 -N 10000000 /dev/sdb) biçimlendirirsiniz. Başkasının koyduğu hayali 250 bin sınırına mahkum kalmazsınız.
Sonuç
100 iğne koyunca dolan bir depoya "sınırsız" denilemez; 250 bin dosya adedinde kilitlenen bir hosting paketine de "sınırsız disk" denilemez.
Pazarlama sloganları sizi uyutmasın; dijital dünyada hiçbir kaynak sınırsız değildir. Bir hosting sağlayıcısının kalitesi vaat ettiği sınırsız hayallerle değil; sözleşmesine dürüstçe yazdığı teknik limitlerle ölçülür. Altyapınızı seçerken gigabaytlara değil, Inode sınırlarına bakın; yoksa boş bir diskin ortasında kilitli kalan dosyalarınızın feryadını dinlersiniz.