Disk Doldu Kurtarma: Acil Müdahale
Disk alanı dolduğunda acil müdahale adımları: du, ncdu ile büyük dosya tespiti, log temizleme, inode kontrolü ve otomatik temizlik yapılandırması.
İçindekiler
Giriş
Disk alanının dolması, sunucunuzda servislerin çökmesine, veritabanı hatalarına ve sistem kararsızlığına neden olabilir. Bu rehberde, disk dolduğunda acil müdahale adımlarını ve kalıcı çözümleri detaylı olarak inceleyeceğiz.
Acil Durum Tespiti
Disk Kullanımını Kontrol Etme
# Genel disk kullanımı
df -h
# İnode kullanımı
df -i
# Dosya sistemi türleri ile
df -Th
df -h çıktısını okuma:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 48G 1.2G 98% /
/dev/sda2 200G 150G 40G 79% /home
Disk kullanımı %95'i aştığında acil müdahale gerekir. %100'e ulaştığında servisler çökmeye başlar.
Büyük Dosya ve Dizin Tespiti
du Komutu ile Analiz
# Kök dizindeki en büyük dizinler
sudo du -sh /* 2>/dev/null | sort -rh | head -20
# /var dizini analizi (genellikle en çok yer kaplayan)
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10
# /var/log analizi
sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -10
# Belirli boyutun üzerindeki dosyaları bulma
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20
# En büyük 20 dosya
sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20
ncdu ile İnteraktif Analiz
# ncdu kurulumu
sudo apt install ncdu -y
# Kök dizin analizi
sudo ncdu /
# Belirli dizin analizi
sudo ncdu /var/log
ncdu kısayolları:
d— Seçili dosya/dizini siln— İsme göre sıralas— Boyuta göre sıralaq— Çıkış
Acil Temizlik Adımları
1. Log Dosyalarını Temizleme
# Systemd journal boyutunu kontrol etme
journalctl --disk-usage
# Journal'ı 100MB ile sınırlama
sudo journalctl --vacuum-size=100M
# 7 günden eski logları silme
sudo journalctl --vacuum-time=7d
# Büyük log dosyalarını truncate etme (silmeden küçültme)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# Eski rotasyonlu logları silme
sudo find /var/log -name '*.gz' -delete
sudo find /var/log -name '*.1' -delete
sudo find /var/log -name '*.old' -delete
truncate komutu dosyayı silmeden boyutunu sıfırlar. Bu, dosyayı kullanan servislerin yeniden başlatılmasını gerektirmez.
2. APT Cache Temizleme
# APT cache boyutunu kontrol etme
sudo du -sh /var/cache/apt/archives/
# İndirilen paket dosyalarını temizleme
sudo apt clean
# Eski paket versiyonlarını temizleme
sudo apt autoclean
# Kullanılmayan bağımlılıkları kaldırma
sudo apt autoremove -y
3. Eski Kernel'leri Temizleme
# Mevcut kernel versiyonu
uname -r
# Yüklü kernel'leri listeleme
dpkg --list | grep linux-image
# Eski kernel'leri kaldırma (mevcut kernel hariç)
sudo apt autoremove --purge -y
4. Tmp Dizini Temizleme
# /tmp boyutunu kontrol etme
sudo du -sh /tmp
# 7 günden eski tmp dosyalarını silme
sudo find /tmp -type f -atime +7 -delete
# /var/tmp temizleme
sudo find /var/tmp -type f -atime +30 -delete
5. Silinmiş Ama Açık Dosyaları Bulma
Bir dosya silinse bile, onu kullanan process hâlâ çalışıyorsa disk alanı serbest kalmaz:
# Silinmiş ama açık dosyaları bulma
sudo lsof +L1 | grep deleted
# Büyük silinmiş dosyaları bulma
sudo lsof +L1 | awk '$7 > 100000000 {print $1, $2, $7, $9}'
# İlgili process'i yeniden başlatarak alanı serbest bırakma
sudo systemctl restart SERVIS_ADI
Özellikle log dosyaları silindiğinde, ilgili servisi (nginx, apache, mysql vb.) yeniden başlatmadan disk alanı serbest kalmaz.
İnode Tükenmesi
Disk alanı boş görünse bile inode'lar tükenebilir:
# İnode kullanımını kontrol etme
df -i
# En çok dosya içeren dizinleri bulma
sudo find / -xdev -printf '%h\n' | sort | uniq -c | sort -rn | head -20
# Küçük dosya yığınlarını temizleme (örn: session dosyaları)
sudo find /tmp -type f -name 'sess_*' -delete
sudo find /var/spool -type f -mtime +30 -delete
Otomatik Log Rotasyon Yapılandırması
# /etc/logrotate.d/custom-logs
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
Journal Boyut Sınırı
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=200M
SystemMaxFileSize=50M
MaxRetentionSec=7day
sudo systemctl restart systemd-journald
Disk Kullanım İzleme Script'i
#!/bin/bash
# Disk kullanım uyarı script'i
THRESHOLD=90
PARTITION="/"
USAGE=$(df -h $PARTITION | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
echo "UYARI: Disk kullanımı %$USAGE ($PARTITION)"
echo "En büyük dizinler:"
du -sh $PARTITION* 2>/dev/null | sort -rh | head -10
fi
Sonuç
Disk dolması acil müdahale gerektiren kritik bir sorundur. Log dosyaları, APT cache ve eski kernel'ler en yaygın alan tüketen unsurlardır. Düzenli log rotasyonu ve disk izleme yapılandırarak bu sorunun tekrarlanmasını önleyebilirsiniz.
İlgili Makaleler
SSH Bağlantı Sorunu: Sunucuya Bağlanamıyorum
SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.
RDP Bağlantı Sorunu: Windows Sunucuya Erişilemiyor
RDP bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, RDP portu için filtre kuralı oluşturma ve sorun giderme adımları.
MTR Testi Nasıl Yapılır ve Destek Ekibine Gönderilir
WinMTR ve Linux MTR ile ağ testi yapma, ICMP filtre kuralı oluşturma ve sonuçları destek ekibine gönderme rehberi. Paket kaybı ve gecikme analizi.