00 df ve du: farklı sorular
İki araç birbirini tamamlar ama farklı soruları yanıtlar.
# 1. Hangi partition dolmuş?
df -h
# 2. O partition'da en büyük dizin hangisi?
du -sh /var/* | sort -rh | head -10
# 3. O dizinde en büyük alt dizin?
du -sh /var/log/* | sort -rh | head -10
01 df: dosya sistemi kullanımı
df mount edilen tüm dosya sistemlerinin disk kullanımını gösterir.
# İnsan-okunur format (en yaygın kullanım)
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 32G 18G 64% /
tmpfs 7.8G 2.1G 5.7G 27% /dev/shm
/dev/sdb1 200G 87G 113G 43% /data
# Belirli dizin veya dosya sistemini sorgula
df -h /var/log # bu dizinin bağlı olduğu FS
df -h /dev/sda1 # bu partition
# Sadece gerçek dosya sistemleri (tmpfs, devtmpfs vb. hariç)
df -hT --type=ext4
df -hx tmpfs -x devtmpfs # belirtilenleri hariç tut
# Dosya sistemi tipi de göster
df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 50G 32G 18G 64% /
# 1K blok (varsayılan, insan-okunur değil)
df
# 1M blok
df -m
# Tüm dosya sistemleri (sahte olanlar dahil)
df -a
ext4, xfs...Disk alanı olmasına rağmen "No space left on device" hatası alınabilir — inode tükenmiş olabilir. df -i ile inode kullanımını kontrol edin. Küçük dosyaların çok sayıda bulunduğu dizinlerde (önbellek, log) sık yaşanır.
02 df: inode kullanımı ve filtreler
İnode tükenmesi ciddi bir sorun — disk dolmamış olsa da yeni dosya oluşturulamaz.
# Inode kullanımı
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 45231 3231569 2% /
/dev/sda2 6553600 6500000 53600 99% /var
# %99'a yakın inode olan FS'leri bul
df -i | awk 'NR>1 && $5+0 > 80 {print}'
# En çok dosya içeren dizini bul (inode araştırması)
find /var -xdev -type f | awk -F'/' '{print $2"/"$3}' | \
sort | uniq -c | sort -rn | head -10
# Disk doluluk yüzdesi %85 üstündeki FS'leri listele
df -h | awk 'NR>1 && int($5) > 85 {print $0, "UYARI"}'
03 du: dizin boyutları
du disk kullanımını özyinelemeli hesaplar. Her alt dizinin ve dosyanın boyutunu verir.
# Mevcut dizindeki her şeyin özeti
du -sh *
# Tek dizinin toplam boyutu
du -sh /var/log
2.3G /var/log
# Alt öğelerin boyutunu da göster (özyinelemeli, hepsi)
du -h /var/log/
# Birden fazla hedef
du -sh /var /tmp /home
# Byte bazlı (sort ile kullanım için)
du -sb /var/log/*
# --apparent-size: disk blok değil, gerçek içerik boyutu
du -sh --apparent-size dosya.txt
# Farklı FS'e geçme: -x (xdev) ile aynı FS'de kal
du -sh -x / # mount noktalarını geçme
04 du: derinlik kontrolü ve sıralama
--max-depth ile kaç seviye derinlikte raporlanacağını, sort ile büyükten küçüğe sıralamayı kontrol edin.
# Sadece 1 seviye derinlik (alt dizin özetleri)
du -h --max-depth=1 /var/
du -hd1 /var/ # kısa form
12M /var/cache
2.3G /var/log
456M /var/lib
2.8G /var
# 2 seviye derinlik
du -hd2 /var/
# Büyükten küçüğe sırala (insan-okunur)
du -h --max-depth=1 /var/ | sort -rh
# Sayısal sıralama için -b kullan
du -b --max-depth=1 /var/ | sort -rn
# Sadece 100MB üstünü listele
du -h --max-depth=2 /var/ | \
awk '/^[0-9]*[MG]/ && $1+0 > 100 || $1 ~ /G/'
-dNdu -sh * glob expansion kullanır — gizli dosyaları (.cache gibi) dahil etmez. du -hd1 . dizine girer ve tüm içeriği (gizli dahil) raporlar. Tam sonuç için du -hd1 . tercih edin.
05 du + sort: en büyüğü bul
Disk doluluğunu araştırmanın klasik döngüsü: df ile hangi FS, du + sort ile nerede.
# Klasik: /var altındaki en büyük 10 öğe
du -sh /var/* 2>/dev/null | sort -rh | head -10
# Tüm alt dizinleri büyükten küçüğe (tam arama)
du -hx /var/ 2>/dev/null | sort -rh | head -20
# 1GB üstü dizinler
du -BG --max-depth=4 /var/ 2>/dev/null \
| awk '$1+0 > 1' \
| sort -rn \
| head -10
# ncdu: etkileşimli disk kullanım arayüzü (önerilir)
ncdu /var/
# j/k ile gezin, d ile sil, ? yardım, q çık
ncdu (NCurses Disk Usage) etkileşimli bir disk kullanım tarayıcısıdır. Büyük diskleri araştırmak için du + sort'tan çok daha kullanışlıdır. Çoğu Linux dağıtımında: apt install ncdu veya yum install ncdu
06 Pratik vakalar
Disk yönetiminin gerçek dünya senaryoları.
# Adım 1: Hangi FS dolmuş?
df -h | awk 'NR>1 && int($5) > 80 {print $5, $6}'
91% /var
# Adım 2: /var'da en büyük öğeler
du -hd1 /var/ 2>/dev/null | sort -rh
12G /var
8.5G /var/log
2.1G /var/lib
...
# Adım 3: /var/log'da en büyük dosyalar
find /var/log -type f -size +100M | xargs du -sh | sort -rh
# %85 üstündeyse uyarı gönder
df -h | awk 'NR > 1 {
gsub(/%/, "", $5)
if ($5+0 >= 85)
print "UYARI: " $6 " %"$5 " dolu (" $4 " boş)"
}'
# Cron'a ekle (15 dakikada bir)
# */15 * * * * /usr/local/bin/disk-check.sh | mail -s "Disk Uyarı" ops@example.com
# df'te gözüken ama du'da görünmeyen alan = silinmiş ama açık dosya
lsof +L1 # link sayısı 0 olan açık dosyalar
lsof +L1 -a +d /var/log # /var/log altında
# Çözüm: process'i yeniden başlat veya log dosyasını truncate et
truncate -s 0 /var/log/devops/app.log # sıfırla (sil değil)
# Docker'ın ne kadar yer kapladığını göster
docker system df
# Kullanılmayan her şeyi temizle
docker system prune -af --volumes
Hatırlanacaklar
df -h: dosya sistemi doluluk durumu — ilk kontroldf -i: inode tükenmesi — "disk dolu" hatası disk dolu olmadandu -sh /yol/*: dizindeki öğelerin özet boyutlarıdu -hd1 /yol/: 1 seviye derinlikte insan-okunur (-sh *'dan güvenli)du -sh * | sort -rh | head -10: en büyük 10 öğe- df vs du farkı olunca: silinmiş ama açık dosya →
lsof +L1 ncdu: etkileşimli disk araştırması için en iyi araç
Devam: free, uptime, uname — sistem bilgisi · süreç ve sistem izleme — ps, top, lsof