Linux Sunucuda Disk Dolu Hatası Nasıl Çözülür? Alan ve Inode Kontrolü
Linux sunucuda dosya yükleyemiyor, güncelleme yapamıyor veya “No space left on device” hatası alıyorsanız, ilgili dosya sisteminde kullanılabilir alan tükenmiş olabilir. Ancak sorun her zaman diskteki dosyaların toplam boyutuyla ilgili değildir. Çok sayıda küçük dosya, boş alan bulunmasına rağmen yeni dosya oluşturulmasını engelleyebilir.
Linux disk dolu hatasını çözmek için önce disk alanı ve inode kullanımını kontrol edin, ardından doluluğa neden olan dizini belirleyin. Kaynağı bulmadan toplu dosya silmek, çalışan uygulamalara zarar verebilir.
1. Disk Alanını Kontrol Edin
SSH üzerinden sunucunuza bağlanarak şu komutu çalıştırın:
df -hT
Çıktıdaki temel alanlar şöyledir:
|
Alan |
Anlamı |
|
Filesystem |
Dosya sistemi veya aygıt |
|
Type |
ext4, XFS veya tmpfs gibi dosya sistemi türü |
|
Size |
Toplam kapasite |
|
Used |
Kullanılan alan |
|
Avail |
Kullanılabilir alan |
|
Use% |
Doluluk oranı |
|
Mounted on |
Bağlama noktası |
Özellikle /, /var ve uygulamanızın veri dizininin bulunduğu dosya sistemini inceleyin. Sunucuda bir diskin boş olması, başka bir bölümdeki doluluk sorununu çözmez.
Hata belirli bir dizinde oluşuyorsa doğrudan o konumu kontrol edin:
df -hT /var
Buradaki /var yolunu sorun yaşanan dizinle değiştirebilirsiniz.
2. Diskte Yer Varken Hata Alıyorsanız Inode Kullanımına Bakın
Inode; dosyanın sahipliği, izinleri ve veri konumu gibi bilgileri tutan yapıdır. Çok sayıda küçük dosya veya dizin oluşturulması, dosya sisteminin inode kapasitesini tüketebilir.
Kontrol etmek için:
df -i
IUse% değeri %100’e ulaşmışsa, dosya sisteminde yeni dosya oluşturacak inode kalmamış olabilir. Bu durum, GB cinsinden boş alan bulunmasına rağmen yazma işlemlerinin başarısız olmasına neden olabilir. (gnu.org)
Örneğin milyonlarca küçük önbellek dosyası, tek bir büyük yedek dosyasından daha az disk alanı kullanırken çok daha fazla inode tüketebilir. Böyle bir durumda yalnızca büyük dosyaları temizlemek yeterli değildir.
3. En Fazla Alan Kullanan Dizinleri Bulun
Kök dosya sistemindeki üst düzey dizinleri karşılaştırın:
sudo du -xhd1 / | sort -h
Bu komutta:
- -x, başka dosya sistemlerine geçilmesini önler.
- -h, boyutları okunabilir biçimde gösterir.
- -d1, incelemeyi bir dizin seviyesiyle sınırlar.
En yüksek kullanım /var altındaysa incelemeyi daraltın:
sudo du -xhd1 /var | sort -h
/var ayrı bir dosya sistemiyse ilk komut onun içeriğini taramaz; ayrıca kontrol etmeniz gerekir. Büyük dizinlerde tarama zaman alabilir ve disk yükü oluşturabilir.
Sık büyüyen konumlar arasında uygulama logları, yerel yedekler, önbellekler ve container verileri bulunur. Veritabanı dizinleri de büyük olabilir; ancak bu dizinlerdeki dosyalar doğrudan silinmemelidir.
Inode Tüketen Dizinleri Bulma
Sorun inode doluluğuysa GNU du ile dizinleri inode kullanımına göre karşılaştırabilirsiniz:
sudo du --inodes -x -d1 /var | sort -n
En yüksek değere sahip dizinin altında aynı incelemeyi tekrarlayın. Temizlik yapmadan önce dosyaların hangi uygulamaya ait olduğunu ve yeniden oluşturulup oluşturulamayacağını belirleyin.
4. Gereksiz Alanı Kontrollü Şekilde Temizleyin
Temizlik yöntemi, doluluğun kaynağına göre seçilmelidir. Aşağıdaki işlemler birbirinin alternatifi değildir; yalnızca sisteminize uygun olanları uygulayın.
Ubuntu ve Debian Paket Önbelleği
İndirilmiş paket arşivlerinin boyutunu kontrol edin:
sudo du -sh /var/cache/apt/archives
Bu önbelleği temizlemek için:
sudo apt clean
Bu işlem kurulu programları kaldırmaz; paket yöneticisinin sakladığı indirme dosyalarını temizler. Önbellek küçükse kazanılacak alan da sınırlı olacaktır.
Systemd Günlükleri
Journal kayıtlarının kullandığı alanı görüntüleyin:
sudo journalctl --disk-usage
Eski kayıtların silinmesi uygunsa ve gerekli kayıtları sakladıysanız, örnek olarak arşivlenmiş journal kullanımını 500 MB seviyesine indirmek için:
sudo journalctl --rotate --vacuum-size=500M
Bu komut eski günlük kayıtlarını siler. Temizlik arşivlenmiş dosyalara uygulanır; aktif günlükler nedeniyle toplam kullanım hedef değerin üzerinde kalabilir. --rotate, mevcut günlüklerin döndürülmesini sağlar.
Uygulama Logları ve Eski Yedekler
Nginx, Apache veya uygulama logları hızla büyüyorsa önce nedenini araştırın. Sürekli tekrarlanan bir hata, temizlediğiniz alanı kısa sürede yeniden doldurabilir.
Loglar için uygun döndürme ve saklama politikası oluşturun. Eski yedekleri kaldırmadan önce başka bir konumda kullanılabilir kopyalarının bulunduğunu doğrulayın.
Veritabanı dosyalarını, Docker volume dizinlerini veya /tmp içeriğinin tamamını gelişigüzel silmeyin. Geçici görünen dosyalar çalışan servisler tarafından kullanılıyor olabilir.
5. Dosyayı Sildiniz Ama Alan Açılmadı mı?
Linux’ta bir dosya silinse bile çalışan bir süreç onu açık tutuyorsa disk alanı hemen serbest kalmayabilir. Bu nedenle df yüksek kullanım gösterirken du ile aynı büyüklükte dosya bulamayabilirsiniz.
Açık tutulan silinmiş dosyaları incelemek için, lsof kuruluysa:
sudo lsof -nP +L1
Çıktıda süreç adı, PID ve dosya bilgilerini kontrol edin. Büyük bir silinmiş dosyayı açık tutan servis belirlenirse, servisin desteklediği log yeniden açma yöntemi veya kontrollü yeniden başlatma değerlendirilebilir.
İşlemi doğrudan sonlandırmadan önce hizmet kesintisi etkisini değerlendirin. Aynı dosya birden fazla satırda görünebileceği için boyutları toplamak da yanıltıcı olabilir.
6. Alan ve Inode Boşsa Diğer Sınırları Kontrol Edin
İki ölçüm de normal görünüyorsa hata mesajının tamamını ve işlemin yazmaya çalıştığı gerçek konumu inceleyin.
Olası nedenler arasında şunlar bulunur:
- Kullanıcı veya proje kotasının dolması.
- /tmp gibi ayrı bir dosya sisteminin ya da tmpfs alanının dolması.
- Container’ın farklı bir depolama alanı kullanması.
- Alttaki thin pool veya depolama havuzunda kapasitenin tükenmesi.
“Disk quota exceeded” ve “Read-only file system” farklı sorunlara işaret eder. Özellikle salt okunur dosya sistemi hatasında yalnızca dosya silmek çözüm sağlamaz; sistem günlükleri ve depolama sağlığı da incelenmelidir.
Disk Dolu Hatasının Tekrarlaması Nasıl Önlenir?
Temizlik sonrasında alan ve inode kullanımını yeniden kontrol edin:
df -hT
df -i
Ardından uygulamanızın dosya yazabildiğini ve servislerin normal çalıştığını doğrulayın.
Kalıcı çözüm için log saklama sürelerini belirleyin, önbellek temizliğini uygulamanın kendi araçlarıyla yönetin ve hem alan hem inode kullanımı için alarm oluşturun. Verileriniz düzenli büyüyorsa disk kapasitesini artırmayı planlayın. Sanal diski büyütmenin ardından bölüm ve dosya sisteminin de genişletilmesi gerekebileceğini unutmayın.
Ekiphost ile Depolama İhtiyacınızı Önceden Planlayın
Sunucunun depolama kapasitesini yalnızca mevcut dosyalara göre seçmek yeterli değildir. Loglar, veritabanı büyümesi, güncellemeler ve geçici işlemler için de alan bırakılmalıdır.
Ekiphost ile projenizin depolama ve performans ihtiyaçlarını değerlendirerek uygun VDS veya fiziksel sunucu seçeneklerini inceleyebilirsiniz. Doğru kapasite planlaması, büyüyen uygulamalarınızın daha sağlıklı çalışmasına ve beklenmedik doluluk sorunlarının azaltılmasına yardımcı olur.