Ana içeriğe geç
Kategoriye Dön

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ı.

Okuma süresi: 13 dk Sorun Giderme
diskdolduduncduloginodetemizlemekurtarma

İç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

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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 sil
  • n — İsme göre sırala
  • s — Boyuta göre sırala
  • q — Çıkış

Acil Temizlik Adımları

1. Log Dosyalarını Temizleme

hljs bash
# 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

hljs bash
# 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

hljs bash
# 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

hljs bash
# /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:

hljs bash
# 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:

hljs bash
# İ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ı

hljs bash
# /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ı

hljs bash
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=200M
SystemMaxFileSize=50M
MaxRetentionSec=7day
hljs bash
sudo systemctl restart systemd-journald

Disk Kullanım İzleme Script'i

hljs bash
#!/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.