Linux sistem yöneticilerinin en sık karşılaştığı problemlerden biri, beklenmedik şekilde dolan disk alanlarıdır. Özellikle gece yarısı, yoğun çalışma saatlerinde ya da kritik bir servis çalışırken ekrana düşen şu hata mesajı oldukça tanıdıktır.
“No space left on device”
Bu hata ilk bakışta basit bir disk doluluğu problemi gibi görünse de, üretim ortamlarında ciddi sonuçlara yol açabilir. Log dosyaları yazılamaz, veritabanı işlemleri durabilir, uygulamalar cevap veremez hale gelebilir ve hatta bazı servisler tamamen çökebilir.
Bu nedenle bir Linux sunucuda disk alanının neden dolduğunu hızlıca analiz edebilmek, sistem yöneticileri için oldukça önemli bir beceridir.
Disk Neden Aniden Dolar?
Sunucularda disk alanının dolmasına birçok farklı sebep olabilir. En yaygın nedenlerden bazıları şunlardır:
Uygulama loglarının kontrolsüz büyümesi, eski yedek dosyalarının temizlenmemesi, geçici dosyaların birikmesi, yanlış yapılandırılmış servislerin sürekli dosya üretmesi veya kullanıcı dizinlerinde gereksiz büyük dosyaların tutulması disk alanını kısa sürede tüketebilir.
Özellikle /var/log, /tmp, /var, /home ve uygulamalara özel dizinler bu tür sorunlarda ilk kontrol edilmesi gereken alanlardır. Ancak büyük sistemlerde dizin dizin gezerek hangi dosyanın ya da klasörün alan kapladığını bulmak zaman kaybettirir.
İşte bu noktada ncdu aracı devreye girer.
ncdu Nedir?
ncdu, yani NCurses Disk Usage, Linux sistemlerde disk kullanımını terminal üzerinden interaktif olarak analiz etmeye yarayan oldukça kullanışlı bir araçtır.
Klasik du komutuna göre çok daha okunabilir ve pratik bir kullanım sunar. Terminal ekranında dizinler arasında yön tuşlarıyla gezebilir, hangi klasörün ne kadar yer kapladığını hızlıca görebilir ve disk alanını tüketen büyük dosya veya dizinleri kısa sürede tespit edebilirsiniz.
Özellikle GUI arayüzü olmayan sunucularda çalışan sistem yöneticileri için ncdu ciddi anlamda zaman kazandırır.
ncdu Nasıl Kurulur?
Birçok Linux dağıtımında ncdu paket yöneticileri üzerinden kolayca kurulabilir.
Ubuntu ve Debian tabanlı sistemlerde:
sudo apt install ncdu
RHEL, CentOS, Rocky Linux veya AlmaLinux sistemlerde:
sudo dnf install ncdu
Eski CentOS sistemlerde ise:
sudo yum install ncdu
Kurulum tamamlandıktan sonra kullanımı oldukça basittir.
ncdu ile Disk Alanı Analizi Nasıl Yapılır?
Tüm sistemi analiz etmek için aşağıdaki komut kullanılabilir:
sudo ncdu /
Bu komut, kök dizinden başlayarak sistemdeki dizinleri tarar ve size boyutlara göre sıralanmış interaktif bir ekran sunar.
Tarama tamamlandıktan sonra en çok yer kaplayan dizinler üst sıralarda görünür. Yön tuşlarıyla dizinlerin içine girebilir, hangi alt klasörün veya dosyanın alan tükettiğini kolayca inceleyebilirsiniz.
Örneğin disk doluluğunun /var altında olduğunu fark ederseniz, bu dizinin içine girerek /var/log, /var/cache, /var/lib gibi alt dizinleri ayrı ayrı kontrol edebilirsiniz. Böylece sorunun büyük bir log dosyasından mı, cache klasöründen mi yoksa başka bir uygulama verisinden mi kaynaklandığını hızlıca anlayabilirsiniz.
Belirli Bir Dizini Analiz Etmek
Her zaman tüm sistemi taramak zorunda değilsiniz. Sorunun belirli bir dizinden kaynaklandığını düşünüyorsanız sadece o dizini analiz edebilirsiniz.
Örneğin log dizinlerini kontrol etmek için:
sudo ncdu /var/log
Kullanıcı dizinlerini kontrol etmek için:
sudo ncdu /home
Uygulama dizinini analiz etmek için:
sudo ncdu /opt
Bu yöntem, özellikle büyük disklerde zamandan tasarruf sağlar.
Geleneksel Yöntem: du, sort ve head Komutları
Her sunucuda ncdu kurulu olmayabilir. Özellikle kısıtlı erişime sahip sistemlerde ya da acil müdahale gerektiren durumlarda klasik Linux komutları hâlâ hayat kurtarır.
En büyük dosya ve dizinleri listelemek için şu komut kullanılabilir:
sudo du -a / 2>/dev/null | sort -n -r | head -n 10
Bu komutun yaptığı işlem oldukça basittir:
du -a / komutu tüm sistemdeki dosya ve dizinlerin boyutlarını listeler.sort -n -r çıktıyı sayısal olarak büyükten küçüğe sıralar.head -n 10 ise en büyük ilk 10 sonucu ekrana getirir.2>/dev/null kısmı ise yetki veya erişim hatalarını ekranda göstermemek için kullanılır.
Daha okunabilir bir çıktı almak isterseniz şu komutu da kullanabilirsiniz:
sudo du -ahx / 2>/dev/null | sort -rh | head -n 20
Burada -h parametresi boyutları KB, MB, GB gibi okunabilir formatta gösterir. -x parametresi ise sadece ilgili dosya sistemi içinde kalmasını sağlar. Bu özellikle farklı mount noktaları olan sunucularda daha kontrollü analiz yapmanıza yardımcı olur.
Büyük Dosyaları Bulduktan Sonra Dikkat Edilmesi Gerekenler
Disk alanını tüketen dosyayı bulmak tek başına yeterli değildir. Önemli olan, bu dosyanın neden büyüdüğünü anlamaktır.
Örneğin çok büyük bir log dosyası bulduysanız doğrudan silmek yerine önce hangi servise ait olduğunu kontrol etmelisiniz. Aktif kullanılan bir log dosyasını yanlış şekilde silmek, servis davranışını etkileyebilir veya log takibini zorlaştırabilir.
Bunun yerine log dosyasını güvenli şekilde boşaltmak için şu yöntem tercih edilebilir:
sudo truncate -s 0 /var/log/dosya.log
Bu komut dosyayı silmeden içeriğini sıfırlar. Böylece ilgili servis dosyaya yazmaya devam edebilir.
Ayrıca logların sürekli büyümesini önlemek için logrotate yapılandırmalarının kontrol edilmesi gerekir. Eğer logrotate düzgün çalışmıyorsa, log dosyaları zamanla büyüyerek diski tamamen doldurabilir.
Disk Alanı Yönetimi İçin İyi Uygulamalar
Disk doluluğu problemi yaşanmadan önce bazı önlemler almak oldukça önemlidir. Sunucularda düzenli disk takibi yapılmalı, kritik bölümler için alarm mekanizmaları kurulmalı ve log dosyaları otomatik olarak döndürülmelidir.
Özellikle üretim ortamlarında /var, /home, /tmp ve uygulama verilerinin bulunduğu dizinler düzenli olarak kontrol edilmelidir. Monitoring sistemlerinde disk kullanım oranı için uyarılar tanımlanmalı ve belirli eşikler aşıldığında sistem yöneticilerine bildirim gönderilmelidir.
Bunun için Zabbix, Prometheus, Grafana, Nagios, Checkmk gibi izleme araçları kullanılabilir. Basit ortamlarda ise cron ile çalışan küçük kontrol scriptleri bile oldukça faydalı olabilir.

