Forum

Linux'ta inode tüke...
 
Bildirimler
Hepsini Temizle

Linux'ta inode tükenmesi (No space left on device) hatası alıyorum ama diskte yer var: Gizli küçük dosya avı

2 Yazılar
2 Üyeler
0 Reactions
9 Görüntüleme
(@developerman1535)
Gönderiler: 2
Active Member
Konu başlatıcı
 
[#550982]

Linux sunucularda bazen çok ilginç bir durumla karşılaşabilirsiniz:

No space left on device

Hatasını alırsınız ancak diski kontrol ettiğinizde yüzlerce GB, hatta TB seviyesinde boş alan vardır.

Örneğin:

df -h

çıktısı:

Filesystem      Size  Used Avail Use%
/dev/sda1       900G  420G  480G  47%

Yani diskin yalnızca %47'si doludur.

Buna rağmen:

touch test.txt

dediğinizde:

No space left on device

hatası alabilirsiniz.

Böyle bir durumda ilk kontrol edilmesi gereken şeylerden biri inode kullanımıdır.


1. Inode nedir?

Linux dosya sistemlerinde her dosya ve dizin için metadata tutulur.

Bu metadata'nın bulunduğu yapıya inode denir.

Basitleştirirsek:

Disk alanı
   ↓
Dosyanın içeriği

Inode
   ↓
Dosyanın metadata bilgileri

Bir inode içerisinde dosyayla ilgili:

  • sahiplik

  • izinler

  • dosya tipi

  • boyut

  • zaman bilgileri

  • veri bloklarının adresleri

gibi bilgiler tutulur.

Önemli nokta:

Bir dosya çok küçük olsa bile bir inode tüketebilir.

Bu nedenle milyonlarca küçük dosya bulunan bir sistemde disk alanı boş kalırken inode'lar tamamen tükenebilir.


2. Basit bir örnek

Diyelim ki filesystem'inizde:

1 TB disk

var.

Ve:

400 GB kullanılıyor
600 GB boş

olsun.

Ancak sistemde milyonlarca küçük dosya bulunuyorsa inode'lar tükenebilir.

Örneğin:

10.000.000 adet
1 KB'lık dosya

yaklaşık 10 GB veri kullanabilir.

Fakat:

10 milyon inode

tüketir.

Sonuç:

Disk:
%40 dolu

Inode:
%100 dolu

Bu durumda yeni dosya oluşturamazsınız.

Ve Linux:

No space left on device

hatasını verebilir.


3. İlk kontrol: df -h

Öncelikle normal disk kullanımına bakalım:

df -h

Örneğin:

Filesystem      Size  Used Avail Use%
/dev/sda1       900G  420G  480G  47%

Burada disk alanı açısından herhangi bir problem görünmüyor.

Şimdi inode kullanımına bakalım.


4. Asıl önemli komut: df -i

Şunu çalıştırın:

df -i

Örneğin:

Filesystem      Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1      50000000 50000000       0  100% /

Burada problem açıkça görülüyor:

IUse% = 100%

Yani disk alanı boş olsa bile filesystem üzerinde yeni inode kalmamış.

Dolayısıyla yeni dosya oluşturulamıyor.


5. Disk ve inode arasındaki fark

Kısaca:

df -h

→ Disk alanı ne kadar dolu?

df -i

→ Kaç inode kullanılıyor?

Bu nedenle:

df -h → %50
df -i → %100

gibi bir durum mümkün.

Bu, Linux sunucularda oldukça önemli bir teşhis noktasıdır.


6. Peki inode'ları ne tüketiyor?

Şimdi asıl soru burada başlıyor:

Hangi klasörde milyonlarca küçük dosya var?

Bunu bulmamız gerekiyor.

İlk olarak root filesystem altında dizinlerin inode kullanımına bakılabilir.

Örneğin:

du --inodes -x -d 1 / 2>/dev/null | sort -n

Bazı sistemlerde du sürümüne göre --inodes desteği bulunmayabilir.

Alternatif olarak belirli dizinleri tek tek inceleyebilirsiniz.

Örneğin:

find /var -xdev -type f | wc -l

ve:

find /tmp -xdev -type f | wc -l

7. /tmp en şüpheli yerlerden biri

Özellikle sunucularda /tmp ve /var/tmp kontrol edilmelidir.

Örneğin:

find /tmp -xdev -type f | wc -l

Sonuç:

1842937

gibi bir sayı çıkıyorsa dikkat edilmelidir.

Yaklaşık:

1.8 milyon dosya

bulunuyor demektir.

Bunların toplam boyutu çok yüksek olmayabilir.

Ancak inode tüketimi ciddi olabilir.


8. Gizli dosyalar özellikle önemli

Saldırılarda veya hatalı çalışan uygulamalarda dosyalar bazen:

/tmp/.cache
/tmp/.x
/tmp/.data
/tmp/.tmp
/tmp/.session

gibi gizli isimlerle oluşturulabilir.

Bunun yanında hosting ortamlarında:

/home/user/tmp
/home/user/.cache
/home/user/.local

gibi dizinler de kontrol edilmelidir.

Gizli olması tek başına zararlı olduğu anlamına gelmez.

Ancak inode tükenmesi yaşanıyorsa bu dizinler mutlaka incelenmelidir.


9. En fazla dosyanın bulunduğu dizini bulmak

Örneğin /var altında problem olduğunu düşünüyorsanız:

for dir in /var/*; do
    [ -d "$dir" ] && printf "%s " "$dir" && find "$dir" -xdev -type f 2>/dev/null | wc -l
done

Bu şekilde hangi alt dizinde çok sayıda dosya bulunduğunu görebilirsiniz.

Örneğin:

/var/log       1523
/var/cache     28492
/var/tmp       1838291
/var/lib       92832

Burada:

/var/tmp

açık şekilde dikkat çekiyor.


10. Hosting sunucularında /home özellikle kontrol edilmeli

cPanel veya benzeri hosting sunucularında inode problemlerinin kaynağı çoğu zaman tek bir müşteri hesabı olabilir.

Örneğin:

/home/user1
/home/user2
/home/user3

hesaplarından biri milyonlarca dosya oluşturmuş olabilir.

Kontrol için:

for dir in /home/*; do
    [ -d "$dir" ] && printf "%s " "$dir" && find "$dir" -xdev -type f 2>/dev/null | wc -l
done

kullanılabilir.

Örneğin:

/home/customer1   18234
/home/customer2   45121
/home/customer3   3948212

gibi bir sonuç görürseniz:

customer3

incelenmelidir.


11. “Gizli küçük dosya avı” nasıl yapılır?

Problemli kullanıcı veya klasörü bulduktan sonra daha detaylı inceleme yapılabilir.

Örneğin:

find /home/customer3 -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -nr | head -50

Bu komut hangi dizinlerde çok sayıda dosya bulunduğunu göstermeye yardımcı olur.

Örneğin:

1850000 /home/customer3/tmp/cache
920000  /home/customer3/public_html/wp-content/cache
310000  /home/customer3/.cache

gibi bir çıktı elde edebilirsiniz.

Artık problemli alan çok daha net görünür.


12. WordPress cache klasörleri

WordPress sitelerinde cache sistemleri çok sayıda küçük dosya oluşturabilir.

Örneğin:

wp-content/cache
wp-content/litespeed
wp-content/uploads/cache

gibi klasörler kontrol edilebilir.

Özellikle yanlış yapılandırılmış veya aşırı büyüyen cache sistemleri inode tüketimini ciddi şekilde artırabilir.

Ancak cache klasörünü:

rm -rf

ile körü körüne silmek doğru değildir.

Önce kullanılan cache sisteminin ne olduğunu belirlemek gerekir.


13. Session dosyaları

PHP session dosyaları da inode tüketebilir.

Örneğin:

/var/lib/php/sessions

veya sistem yapılandırmasına göre başka bir session dizini kullanılabilir.

Kontrol:

find /var/lib/php/sessions -type f 2>/dev/null | wc -l

Sonuç çok yüksekse session temizleme mekanizması düzgün çalışmıyor olabilir.


14. Mail queue da kontrol edilmeli

Mail sunucularında çok fazla küçük dosya oluşması inode tüketimine neden olabilir.

Özellikle:

Exim
Postfix
Maildir

yapılarında milyonlarca küçük mail dosyası bulunabilir.

cPanel/Exim sunucularında:

exim -bpc

ile mail queue içerisindeki mesaj sayısı kontrol edilebilir.

Ancak inode probleminin yalnızca queue sayısından kaynaklandığını varsaymayın.

Maildir yapısında kullanıcı posta kutularındaki binlerce küçük dosya da inode tüketebilir.


15. “rm -rf /tmp/*” çözüm mü?

İnternette sık görülen önerilerden biri:

rm -rf /tmp/*

komutudur.

Bunu düşünmeden çalıştırmayın.

Çünkü /tmp içerisinde yalnızca gereksiz dosyalar bulunmaz.

Çalışan uygulamalar tarafından kullanılan geçici dosyalar ve socket'ler de bulunabilir.

Özellikle üretim sunucusunda:

rm -rf /tmp/*

gibi agresif bir temizlik işlemi uygulamadan önce neyin silineceği anlaşılmalıdır.


16. Güvenli temizlik nasıl yapılmalı?

Önce eski dosyaları listeleyin.

Örneğin 7 günden eski dosyaları görmek için:

find /tmp -xdev -type f -mtime +7 -ls

Kontrol ettikten sonra uygun olduğuna eminseniz:

find /tmp -xdev -type f -mtime +7 -delete

kullanılabilir.

Ancak production sunucularında bu işlem de uygulamanın çalışma biçimi dikkate alınarak yapılmalıdır.

Daha güvenli yaklaşım:

Önce listele
   ↓
Dosyaların kaynağını belirle
   ↓
Uygulamanın ihtiyacını kontrol et
   ↓
Eski/geçici dosyaları temizle
   ↓
inode kullanımını tekrar kontrol et

17. Silinen dosya hâlâ yer kaplıyorsa?

Çok önemli başka bir Linux problemi:

Bir dosyayı sildiniz ama disk alanı geri gelmedi.

Örneğin:

rm /var/log/huge.log

dediniz.

Ama:

df -h

hala aynı değeri gösteriyor.

Bunun sebebi dosyanın bir process tarafından hâlâ açık tutulması olabilir.

Kontrol:

lsof +L1

Örneğin:

apache  1234  user  5w  REG  ... /var/log/huge.log (deleted)

gibi bir çıktı görebilirsiniz.

Burada dosya silinmiş olsa bile process dosyayı açık tuttuğu için disk alanı hemen geri dönmeyebilir.

Bu problem inode tükenmesinden farklıdır, ancak “dosyayı sildim ama alan gelmedi” durumunda mutlaka kontrol edilmelidir.


18. Inode probleminin başka bir nedeni: milyonlarca küçük dosya

Özellikle şu tür uygulamalar dikkat edilmesi gereken kaynaklardır:

  • Cache sistemleri

  • Session sistemleri

  • Maildir

  • Queue sistemleri

  • Log sistemleri

  • Backup yazılımları

  • Temporary dosyalar

  • WordPress eklentileri

  • Malware

  • PHP shell'leri

  • Cron scriptleri

  • Uygulama cache'leri

Örneğin bir script yanlışlıkla:

while true
do
    touch /tmp/file_$(date +%s%N)
done

gibi sürekli dosya oluşturuyorsa birkaç saat içerisinde çok ciddi inode tüketebilir.


19. Malware ihtimalini unutmayın

Eğer normalde 50-100 bin dosyası olan bir hosting hesabı aniden:

2 milyon
5 milyon
10 milyon

dosyaya ulaştıysa sadece “cache şişmiş” demek doğru olmayabilir.

Özellikle:

/tmp
/var/tmp
/home/user/tmp
/home/user/.cache

gibi alanlarda rastgele isimlendirilmiş çok sayıda küçük dosya bulunuyorsa malware ihtimali değerlendirilmelidir.

Örneğin:

/tmp/.x1a8d
/tmp/.k92jd
/tmp/.cache_9182
/tmp/.data_18273

gibi dosyalar görülmesi tek başına malware kanıtı değildir.

Ancak oluşturulma zamanları, sahibi ve içerikleri incelenmelidir.


20. Inode problemi tekrar ediyorsa kök nedeni bulun

Sadece dosyaları silmek geçici çözüm olabilir.

Örneğin:

2 milyon dosya
↓
Temizlendi
↓
inode normale döndü
↓
2 gün sonra
↓
3 milyon dosya

oluyorsa bir şey hâlâ dosya üretmektedir.

Bu durumda:

Cron
PHP
WordPress
Plugin
Cache
Mail
Backup
Malware

kaynaklarından hangisinin dosyaları oluşturduğu bulunmalıdır.


21. Pratik teşhis komutları

Inode problemi yaşadığınızda aşağıdaki komutlar oldukça faydalıdır.

Disk kullanımını kontrol et:

df -h

Inode kullanımını kontrol et:

df -i

/tmp dosya sayısını kontrol et:

find /tmp -xdev -type f | wc -l

/var/tmp dosya sayısını kontrol et:

find /var/tmp -xdev -type f | wc -l

/home dosya sayısını kontrol et:

find /home -xdev -type f | wc -l

Problemli dizinleri bul:

du --inodes -x -d 2 / 2>/dev/null | sort -n | tail -30

Silinmiş ancak açık dosyaları bul:

lsof +L1

22. Hosting sunucuları için hızlı kontrol

cPanel/WHM sunucusunda:

1. df -h
2. df -i
3. /tmp
4. /var/tmp
5. /home
6. /var/log
7. /var/lib
8. Mail queue / Maildir
9. Cache klasörleri
10. Malware kontrolü

sırasıyla incelenebilir.

Özellikle /home altında tek bir hesabın diğer hesaplardan aşırı farklı inode tüketip tüketmediğine bakmak oldukça faydalıdır.


Sonuç

Linux'ta:

No space left on device

hatasını gördüğünüzde doğrudan:

rm

veya:

df -h

ile yetinmeyin.

Öncelikle:

df -h
df -i

çıktılarını karşılaştırın.

Eğer:

Disk kullanımı : %40
Inode kullanımı: %100

gibi bir durum varsa problem disk kapasitesi değil, inode tükenmesidir.

Ardından amaç:

inode'ları ne tüketiyor?
        ↓
hangi filesystem?
        ↓
hangi dizin?
        ↓
hangi kullanıcı?
        ↓
hangi uygulama?
        ↓
neden bu kadar dosya oluşturuyor?

sorusunu cevaplamaktır.

Unutmayın:

Diskte 500 GB boş alan olması, sistemde yeni dosya oluşturabileceğiniz anlamına gelmeyebilir. Filesystem'in inode'ları bittiyse birkaç byte'lık yeni bir dosya bile oluşturulamaz.

Bu yüzden Linux sunucu bakımında yalnızca GB/TB disk kullanımını değil, inode kullanımını da düzenli olarak takip etmek gerekir.


 
Gönderildi : 08/10/2026 16:00
Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33859
Illustrious Member Yönetici
 

Merhaba, iyi niyetinizi anlıyorum ancak AI içeriklerini paylaşmayı tercih etmiyouz. 2008 yılından bu yana burada paylaşılan tüm bilgiler sizler gibi meslektaşlarımızın kendi tecrübeleri oldu, tabi ki AI bu bilgilerden çok şey öğrendi ancak ÇözümPark' ın bu güçlü repütasyonu bu AI içerikleri ile ne yazık ki düşeceği için son iki yazınızı üzülerek sileceğimizi belirtmek isteriz. İlk yazınız da AI üretim ama motivasyonunuz düşmesin istedik, fakat görüyoruz ki bu içerikleri paylaşmaya devam edeceksiniz.


Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 08/10/2026 17:12
Paylaş: