İçindekiler
Disk dolduğunda belirtiler çoğu zaman ilgisiz görünür. MySQL açılmaz, PHP oturum dosyası yazamaz, web sitesi beyaz sayfa verir, SSH ile girerken bile -bash: cannot create temp file uyarısı çıkar. Bu tür bir anda yapılacak en kötü şey, rastgele klasör silmektir. Önce ölçün, sonra silin.
1. Hangi bölüm dolu?
df -h
Use% sütununda %100 görünen bölümü bulun. Kök (/) mu, yoksa ayrı bağlanmış /var ya da /home mu? Bu, nereye bakacağınızı belirler.
Bir de şunu çalıştırın:
df -i
Bu komut inode kullanımını gösterir. Disk alanı boş göründüğü hâlde "yer yok" hatası alıyorsanız sebep inode tükenmesidir. Genelde milyonlarca küçük dosya vardır: PHP oturum dosyaları, önbellek parçaları ya da kuyrukta kalmış e-postalar.
2. Yer kaplayan klasörü bulun
du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
-x parametresi taramayı aynı dosya sisteminde tutar, bağlı diskler ve /proc gibi sanal klasörler hesaba girmez. En büyük klasörü bulduktan sonra aynı komutu o klasör için tekrarlayın. Üç dört adımda suçluya ulaşırsınız.
Tek tek büyük dosyaları görmek isterseniz:
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
3. Genellikle suçlu olanlar
Yıllar içinde gördüğüm vakaların büyük kısmı şu listeden çıkıyor:
- Log dosyaları:
/var/logaltında dönmeyen (rotate edilmeyen) bir günlük. Özellikle hata veren bir uygulamanın her saniye satır yazdığı durumlar. - systemd journal: Sınırı ayarlanmamış journal birkaç gigabayta çıkabilir.
- Eski yedekler: Bir betiğin her gece aynı diske aldığı ve hiç silmediği tar.gz dosyaları.
- Paket önbelleği:
dnfya daaptönbelleği. - MySQL binary logları:
binlogaçık ama süre sınırı yok. - Silinmiş ama açık dosyalar: Bunu aşağıda ayrıca anlatıyorum.
4. Güvenli temizlik
Journal'ı son 7 güne indirmek için:
journalctl --vacuum-time=7d
Paket önbelleği için:
dnf clean all # RHEL, AlmaLinux, Rocky
apt-get clean # Debian, Ubuntu
Büyüyen bir log dosyasını silmeyin, boşaltın:
truncate -s 0 /var/log/uygulama/hata.log
Fark şu: Dosyayı rm ile silerseniz, ona yazan süreç dosyayı açık tuttuğu için alan geri gelmez. truncate ise dosyayı yerinde sıfırlar.
5. "Sildim ama yer açılmadı" durumu
Bir dosyayı sildiniz ama df hâlâ dolu gösteriyorsa, o dosyayı bir süreç hâlâ açık tutuyordur. Şöyle bulursunuz:
lsof +L1 2>/dev/null | head
Listede (deleted) yazan satırlar görürsünüz. İlgili servisi yeniden başlattığınızda alan geri gelir. Örneğin systemctl restart httpd.
6. Bir daha olmaması için
/etc/systemd/journald.confiçindeSystemMaxUse=500Mgibi bir sınır koyun.- Kendi uygulama loglarınız için logrotate kuralı yazın.
- Yedekleri aynı diske almayın. Mecbursanız eski yedekleri silen bir satır ekleyin:
find /yedek -name "*.tar.gz" -mtime +7 -delete - Disk %85'i geçince size e-posta atan basit bir kontrol kurun. Gece yarısı sürpriz yaşamamanın en ucuz yolu budur.
Disk dolması bir arıza değil, bir uyarıdır: Sunucuda bir şey kontrolsüz büyüyor demektir. Yer açmak sorunu bugün çözer; büyüyen şeyi bulmak ise bir daha yaşamamanızı sağlar.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.