df Komutu ile Disk Kullanimi Izleme ve Analiz

df Komutu ile Disk Kullanımını İzleme ve Analiz

Sysadmin hayatında en sık karşılaşılan problemlerden biri disk doluluğudur. Sabahın üçünde seni uyandıran alert’in arkasında çoğunlukla patlamış bir disk bölümü vardır. İşte bu yüzden df komutu, günlük araç kutunuzun vazgeçilmez bir parçası olmalı. Basit görünüyor, ama doğru kullanıldığında çok güçlü bir araç.

Bu yazıda df komutunu her açısıyla ele alacağız. Temel kullanımdan ileri seviye senaryolara, script entegrasyonundan monitoring sistemlerine kadar geniş bir perspektif sunacağım.

df Nedir ve Ne İşe Yarar?

df (disk free) komutu, Linux ve Unix tabanlı sistemlerde bağlı dosya sistemlerinin disk kullanım bilgilerini gösterir. Komutu çalıştırdığınızda şu bilgileri alırsınız:

  • Toplam alan
  • Kullanılan alan
  • Kullanılabilir alan
  • Kullanım yüzdesi
  • Bağlama noktası (mount point)

Komutun temel mantığı, statfs() sistem çağrısına dayanır. Yani doğrudan dosya sisteminden bilgi alır, disk üzerindeki dosyaları tek tek saymaz. Bu yüzden son derece hızlıdır.

Temel Kullanım

En basit haliyle sadece df yazıp çalıştırabilirsiniz:

df

Çıktı şöyle görünür:

Filesystem     1K-blocks    Used Available Use% Mounted on
udev             4018236       0   4018236   0% /dev
tmpfs             806776    1892    804884   1% /run
/dev/sda1       51343360 8234512  40474716  17% /
/dev/sdb1      206290904 45234512 150478716  24% /data

Bu çıktı kilobayt cinsinden olduğu için okunması biraz zor. İşte burada -h bayrağı devreye giriyor.

En Çok Kullandığım Bayraklar

İnsan Okunabilir Format: -h

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           788M  1.9M  787M   1% /run
/dev/sda1        49G  7.9G   39G  17% /
/dev/sdb1       197G   44G  144G  24% /data

Bu format çok daha okunaklı. GB, MB, TB gibi otomatik birim kullanır.

Belirli Bir Dizinin Disk Bilgisi

Hangi dosya sisteminde olduğunu bilmediğiniz bir dizinin disk kullanımını görmek için:

df -h /var/log
df -h /home
df -h /tmp

Bu özellikle NFS bağlantıları ve birden fazla bölümleme yapısı olan sistemlerde çok işe yarıyor. /home ayrı bir partition’daysa direk oraya ait bilgiyi görürsünüz.

Dosya Sistemi Tipini Gösterme: -T

df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     788M  1.9M  787M   1% /run
/dev/sda1      ext4       49G  7.9G   39G  17% /
/dev/sdb1      xfs       197G   44G  144G  24% /data
/dev/sdc1      btrfs     500G  120G  380G  24% /backup

ext4, xfs, btrfs, tmpfs, nfs gibi dosya sistemi tiplerini görmek, özellikle performans sorunlarını debug ederken kritik bilgi sağlar.

Sadece Belirli Tip Dosya Sistemlerini Gösterme: -t ve -x

# Sadece ext4 dosya sistemlerini göster
df -h -t ext4

# tmpfs ve devtmpfs hariç hepsini göster
df -h -x tmpfs -x devtmpfs

İkinci kullanım çok pratik. Sanal dosya sistemlerini ekrandan atar, sadece gerçek disk bölümlerini görürsünüz. Monitoring script’lerinde sıkça kullanılan bir pattern.

Inode Kullanımını Gösterme: -i

df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda1      3276800 234567 3042233    8% /
/dev/sdb1     13107200 891234 12215966    7% /data

Inode dolulugu cok gozden kacirilan bir problemdir. Disk alanınız bolca olduğu halde “No space left on device” hatası alıyorsanız, inode tükenmiş olabilir. Çok sayıda küçük dosya üreten uygulamalar (mail sunucuları, cache sistemleri, log rotasyon problemleri) inode havuzunu bitirebilir.

Gercek Dunya Senaryolari

Senaryo 1: Disk Doluluk Alarmı Geldi, Ne Yapıyorum?

Gecenin bir yarısı Slack’e alarm düştü: /var partition'u %95 dolu. İşte tam bu anda izlediğim adımlar:

# Önce genel duruma bak
df -h

# /var özelinde bak
df -h /var

# Hangi dosya sistemi tipinde olduğunu anla
df -hT /var

# Inode durumunu da kontrol et
df -i /var

Disk doluluk problemlerinde df sadece başlangıç noktası. Hangi dizinin ne kadar yer kapladığını bulmak için du komutuna geçersiniz. Ama df ile önce hangi partition’ın problemli olduğunu tespit edersiniz.

Senaryo 2: NFS Mount Kontrolü

Kurumsal ortamlarda NFS bağlantıları sık kullanılır. NFS’in gerçekten bağlanıp bağlanmadığını ve ne kadar yer kaldığını kontrol etmek için:

# NFS mount noktalarını filtrele
df -h -t nfs -t nfs4

# Tüm network dosya sistemleri
df -h -t nfs -t nfs4 -t cifs -t smbfs

Eğer NFS bağlantısı kopuksa bu komut donabilir. Bunun için --no-sync veya timeout ile birlikte kullanmak gerekebilir. Production’da dikkatli olun.

Senaryo 3: Capacity Planning İçin Anlık Rapor

Aylık kapasite raporlaması yapıyorsanız şu script işinizi görür:

#!/bin/bash
# Basit disk kapasite raporu

echo "=== Disk Kapasite Raporu - $(date) ==="
echo ""
echo "Kritik Durumlar (>80% dolu):"
df -h -x tmpfs -x devtmpfs | awk 'NR==1 || int($5) > 80 {print}'
echo ""
echo "Tum Disk Kullanimi:"
df -h -x tmpfs -x devtmpfs

Bu script’i cron’a eklersiniz ve her gün sabah mail olarak alırsınız.

Ileri Seviye Kullanım

Özel Blok Boyutu ile Gösterim

Bazen GB veya MB cinsinden sabit blok boyutu isteyebilirsiniz:

# Megabyte cinsinden
df -m

# Gigabyte cinsinden (GNU df'de)
df --block-size=G

# Terabyte cinsinden
df --block-size=T

Bu özellikle büyük depolama sistemlerini raporlarken tutarlı birim kullanmak için işe yarar.

Sadece Yerel Dosya Sistemleri: -l

df -hl

NFS, CIFS gibi uzak bağlantıları hariç tutar. Sadece yerel diskleri listeler. Timeout riski olan ortamlarda güvenli bir seçenek.

Çıktıyı Parçalamak ve İşlemek

df çıktısını awk, grep, sort ile birleştirerek çok güçlü sorgular yazabilirsiniz:

# Sadece kullanım yüzdesini ve mount point'i göster
df -h | awk 'NR>1 {print $5, $6}' | sort -rn

# %70 üzeri dolu olanları listele
df -h | awk 'NR>1 && int($5) >= 70 {printf "%-30s %s dolun", $6, $5}'

# En dolu partition'ı bul
df -h | grep -v Filesystem | sort -k5 -rn | head -1

Monitoring Script’i: Disk Alarm Sistemi

İşte production ortamlarda kullandığım, e-posta bildirimi de yapan basit bir alarm scripti:

#!/bin/bash
# disk_monitor.sh - Disk doluluk alarm script'i
# Cron'a ekle: */30 * * * * /usr/local/bin/disk_monitor.sh

ESIK_UYARI=75
ESIK_KRITIK=90
MAIL_ALICI="[email protected]"
SUNUCU=$(hostname)

while IFS= read -r satir; do
    # Yuzdeyi al, % isaretini kaldir
    yuzde=$(echo "$satir" | awk '{print $5}' | tr -d '%')
    mount=$(echo "$satir" | awk '{print $6}')
    kullanilan=$(echo "$satir" | awk '{print $3}')
    toplam=$(echo "$satir" | awk '{print $2}')

    # Sayi kontrolu
    if ! [[ "$yuzde" =~ ^[0-9]+$ ]]; then
        continue
    fi

    if [ "$yuzde" -ge "$ESIK_KRITIK" ]; then
        mesaj="KRITIK: $SUNUCU sunucusunda $mount bolumu %$yuzde dolu! ($kullanilan / $toplam)"
        echo "$mesaj" | mail -s "[KRITIK] Disk Alami - $SUNUCU" "$MAIL_ALICI"
        echo "$(date): $mesaj" >> /var/log/disk_alarm.log

    elif [ "$yuzde" -ge "$ESIK_UYARI" ]; then
        mesaj="UYARI: $SUNUCU sunucusunda $mount bolumu %$yuzde dolu ($kullanilan / $toplam)"
        echo "$mesaj" | mail -s "[UYARI] Disk Kullanimi - $SUNUCU" "$MAIL_ALICI"
        echo "$(date): $mesaj" >> /var/log/disk_alarm.log
    fi

done < <(df -h -x tmpfs -x devtmpfs | grep -v Filesystem)

echo "$(date): Disk kontrolu tamamlandi" >> /var/log/disk_alarm.log

Bu script 30 dakikada bir çalışır, eşik değerleri aştığında mail atar ve log dosyasına yazar. İhtiyacınıza göre Slack webhook veya Teams entegrasyonu da ekleyebilirsiniz.

df ve du Arasindaki Fark

Sıkça karıştırılan bir konu: df ve du farklı şeyler yapar.

  • df: Dosya sistemi seviyesinde bilgi verir. Kernel’dan alır. Hızlıdır.
  • du: Dizin içindeki dosyaları gezerek toplam boyutu hesaplar. Yavaştır ama hangi dizinin ne kadar yer kapladığını gösterir.

Örneğin df ile / partition’unun %90 dolu olduğunu görürsünüz. Hangi dizinin suçlu olduğunu bulmak için:

du -sh /* 2>/dev/null | sort -rh | head -10

Bu iki komut birbirini tamamlar. df ile problemi tespit edersiniz, du ile kaynağı bulursunuz.

Bazi Dikkat Edilmesi Gereken Noktalar

Rezerv alan meselesi: df çıktısında “Used + Available = Total” yapmaz. ext4 gibi dosya sistemleri default olarak toplam alanın %5’ini root kullanıcısı için ayırır. Bu yüzden aritmetik tutmaz. Bunu görmek için:

df -h /
# Toplam: 49G, Kullanilan: 7.9G, Musait: 39G
# 7.9 + 39 = 46.9G, 49G degil. Fark rezerv alan.

tmpfs ve sanal dosya sistemleri: Varsayılan df çıktısunda çok sayıda tmpfs, udev, cgroupfs gibi sanal dosya sistemi görürsünüz. Bunlar RAM’de yaşar. Kalabalık göründüklerinde -x tmpfs -x devtmpfs ile filtreleyebilirsiniz.

Silinen ama açık dosyalar: Büyük bir log dosyasını rm ile sildikten sonra df‘in hala eski değeri gösterdiğini fark edebilirsiniz. Bu, o dosyanın hala açık bir process tarafından tutulduğu anlamına gelir. Gerçek disk alanı ancak process kapandıktan sonra serbest kalır. Bu durumu tespit etmek için:

lsof | grep deleted | awk '{print $7, $1, $2}' | sort -rn | head -20

Windows Muadili

Windows’ta çalışıyorsanız, PowerShell’de benzer bilgileri şöyle alabilirsiniz:

# PowerShell ile disk kullanimi
Get-PSDrive -PSProvider FileSystem

# Daha detayli format
Get-WmiObject -Class Win32_LogicalDisk | 
  Select-Object DeviceID, 
    @{n='Toplam(GB)';e={[math]::Round($_.Size/1GB,2)}},
    @{n='Bos(GB)';e={[math]::Round($_.FreeSpace/1GB,2)}},
    @{n='Doluluk(%)';e={[math]::Round(($_.Size-$_.FreeSpace)/$_.Size*100,1)}}

Hizli Referans Tablosu

| Komut | Ne Yapar | |—|—| | df -h | İnsan okunabilir format | | df -hT | Dosya sistemi tipiyle birlikte | | df -i | Inode kullanimi | | df -hl | Sadece yerel dosya sistemleri | | df -h /path | Belirli dizinin bulundugu partition | | df -x tmpfs | tmpfs hariç tut | | df -t ext4 | Sadece ext4 göster |

Sonuc

df komutu, görünüşte basit ama doğru kullanıldığında son derece değerli bir araç. Günlük sistem yönetiminde disk sorunlarına müdahalenin ilk adımı her zaman df -h ile başlar.

Özetlemek gerekirse:

  • Günlük rutin kontrol için df -h -x tmpfs -x devtmpfs kullanın
  • Inode problemlerini unutmayın, df -i alışkanlık haline getirin
  • Alarm mekanizması kurun, disk dolulukları çoğunlukla yavaş yavaş gerçekleşir ve önceden önlem alınabilir
  • df + du kombinasyonunu öğrenin, biri olmadan diğeri eksik kalır
  • Silinen ama açık dosya tuzağına dikkat edin

Disk yönetimi reaktif değil proaktif yapılması gereken bir iş. Monitoring sisteminize df tabanlı kontroller ekleyin, kapasite planlamasını ihmal etmeyin, kritik partition’larınız için alert eşiklerini belirleyin. Gece üçte Slack alarmıyla uyanmak yerine, gündüz vakti sakin kafayla önlem almak her zaman daha iyidir.

Bir sonraki yazıda du komutunu ve disk space analiz araçlarını (ncdu, duf) ele alacağım. Takipte kalın.

Yorum yapın