Log dizininde 15 GB yer kaplayan bir dosyayı siliyorsunuz. du çıktısı küçülüyor ama df -h hâlâ diskin dolu olduğunu söylüyor. Özellikle günlerce çalışan uygulama sunucularında görülebilen bir durum bu. Dosya görünüşte silinmiş olsa bile onu açık tutan işlem diskte yer kullanmaya devam edebilir.
Bu sorunun güzel tarafı, önce neyin yer tuttuğunu anlamak için herhangi bir servisi durdurmak zorunda olmamanız.
Önce gerçekten aynı dosya sistemine mi bakıyoruz?
Şu iki komutla başlayın:
df -hT /var
du -xsh /var
df, dosya sistemi seviyesinde kullanılan alanı gösterir. du ise erişebildiği dosya ve dizinlerin boyutlarını toplar. Aradaki farkın tek nedeni silinmiş açık dosyalar değildir; mount noktaları, izinler, ayrılmış bloklar ve dosya sistemi özellikleri de sonucu etkileyebilir.
du komutunu yeterli yetkiyle çalıştırmak önemli. Aksi durumda okunamayan dizinler nedeniyle eksik toplamla karşılaşabilirsiniz.
Silinmiş ama hâlâ açık dosyaları bulmak
lsof aracı kuruluysa:
sudo lsof +L1
Bu komut link sayısı sıfıra düşmüş ama bir süreç tarafından açık tutulan dosyaları listeler. Çıktıda süreç adı, PID, dosya tanıtıcısı ve dosya boyutu gibi bilgiler yer alabilir.
Örneğin büyük bir log dosyasını hâlâ bir Java servisi tutuyorsa, dosyanın dizinden silinmiş olması uygulamanın o dosyaya yazmayı bıraktığı anlamına gelmez.
lsof bulunmuyorsa önce paket yöneticisiyle kurulum gerekip gerekmediğini değerlendirin; sadece bu kontrol için üretim sunucusuna rastgele araç yüklemeyin.
İşlemi hemen sonlandırmalı mıyız?
Hayır. Önce PID'nin gerçekten hangi servise ait olduğunu ve uygulama sahibinin ne beklediğini öğrenin.
ps -fp 1234
1234 örnek PID'dir. Yanlış PID'ye işlem göndermek uygulama kesintisine neden olabilir.
Eğer dosya bir servis tarafından tutuluyorsa, kontrollü log reopen mekanizması veya uygun bakım penceresinde servis yeniden başlatma gerekebilir. Bunu doğrulamadan kill -9 çalıştırmak doğru bir yöntem değil.
journald doluluğu da olabilir
/var/log/journal klasörü büyümüşse şu komutla journal kullanımını inceleyebilirsiniz:
journalctl --disk-usage
Bu komut yalnızca raporlar. Journal temizleme, döndürme veya retention ayarı değiştirme işlemlerini ayrı değerlendirmeniz gerekir.
Dosyayı sildikten sonra neyi doğrulamalı?
Açık dosya sorunu giderildiğinde df -h değerinin düşmesini beklersiniz. Bunun yanında uygulamanın log yazmaya devam ettiğini ve servis sağlığının bozulmadığını da kontrol edin.
Ayrıca disk doluluğunun tekrar etmesini önlemek için logrotate, journal saklama politikası ve uygulamanın kendi log davranışını gözden geçirmek gerekir.
Özetle, du ve df farklı sonuç veriyorsa önce silinmiş açık dosyalar olasılığını araştırın. Sorunu anlamadan dosya silmeye devam etmek, çalışan sistemi daha da zor durumda bırakabilir.
Kaynak notu: Linux lsof(8), df(1), du(1), systemd journalctl(1) man sayfaları.




