Disk doldu mu? Sistem yavaşladı mı? Bir uygulama log dosyalarını patlatıp her şeyi çökertti mi? Bunların hepsinin cevabı genellikle aynı yerde başlıyor: df komutu. Linux sistem yöneticiliğinde df, sabah kahvesi gibidir. Güne onunla başlarsın, sorun çıktığında ona dönersin. Basit görünür ama derinlerine indikçe ne kadar güçlü bir araç olduğunu anlarsın.
df Komutu Nedir ve Ne İşe Yarar?
df, “disk free” kelimelerinin kısaltmasıdır ve sisteminizdeki dosya sistemlerinin disk kullanım bilgilerini gösterir. Hangi bölümde ne kadar alan var, ne kadarı kullanılıyor, ne kadarı boş, yüzde kaç doluluk oranı var gibi kritik bilgilere saniyeler içinde ulaşırsınız.
GNU coreutils paketinin bir parçası olan df, neredeyse her Linux dağıtımında varsayılan olarak gelir. Debian, Ubuntu, CentOS, RHEL, Arch fark etmez; df her yerde aynı temel işlevi görür.
Komutun temel sözdizimi şu şekildedir:
df [SEÇENEKLER] [DOSYA/BÖLÜM]
Argüman vermeden çalıştırdığınızda tüm bağlı dosya sistemlerini listeler. Belirli bir dosya veya dizin verirseniz, o dosyanın bulunduğu dosya sistemini gösterir.
Temel Kullanım
En basit haliyle df komutunu çalıştıralım:
df
Bu komutun çıktısı şöyle görünür:
Filesystem 1K-blocks Used Available Use% Mounted on
udev 3987284 0 3987284 0% /dev
tmpfs 803832 1872 801960 1% /run
/dev/sda1 51475068 8234512 40586268 17% /
tmpfs 4019148 145236 3873912 4% /dev/shm
/dev/sdb1 103081248 75643128 22155636 78% /data
Görüldüğü gibi çıktı kilobayt cinsinden geliyor ve okunması biraz zor. İşte bu noktada -h parametresi devreye giriyor.
En Sık Kullanılan Parametreler
-h (human-readable): Boyutları okunabilir formatta gösterir (KB, MB, GB, TB)
-H: Büyük H, 1024 yerine 1000’in kuvvetlerini kullanır (megabyte yerine megabyte gibi ama farklı hesaplama)
-T: Dosya sistemi tipini gösterir (ext4, xfs, tmpfs, btrfs gibi)
-i: İnode kullanım bilgilerini gösterir, bayt değil
-a: Tüm dosya sistemlerini gösterir, sözde dosya sistemleri dahil
-l: Sadece yerel dosya sistemlerini listeler, NFS gibi uzak sistemleri dahil etmez
–total: Tüm satırların toplamını en alta ekler
-x TYPE: Belirtilen dosya sistemi tipini dışarıda bırakır
-t TYPE: Sadece belirtilen tipe ait dosya sistemlerini gösterir
–output=FIELD: Gösterilecek sütunları seçer (source, size, used, avail, pcent, target gibi)
Pratik Kullanım Örnekleri
İnsan Tarafından Okunabilir Format
Günlük kullanımda en çok bu komutu kullanırsınız:
df -h
Çıktı artık çok daha anlaşılır olacaktır:
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 0 3.8G 0% /dev
tmpfs 785M 1.9M 783M 1% /run
/dev/sda1 50G 7.9G 39G 17% /
tmpfs 3.8G 142M 3.7G 4% /dev/shm
/dev/sdb1 99G 73G 22G 78% /data
Dosya Sistemi Tipini Görmek
Özellikle karışık ortamlarda (ext4, xfs, btrfs, nfs hepsi bir arada) çalışıyorsanız:
df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 3.8G 0 3.8G 0% /dev
/dev/sda1 ext4 50G 7.9G 39G 17% /
/dev/sdb1 xfs 99G 73G 22G 78% /data
nfs-server:/backup nfs 500G 320G 180G 65% /mnt/backup
Belirli Bir Dizini Kontrol Etmek
Bir uygulamanın hangi dosya sisteminde çalıştığını öğrenmek için:
df -h /var/log
Bu komut sadece /var/log dizininin bulunduğu bölümü gösterir. Özellikle log şişmesinden şüphelendiğinizde hızlıca kontrol için kullanışlıdır.
df -h /home /var /tmp /opt
Birden fazla dizini aynı anda kontrol edebilirsiniz. Farklı bölümlerde mount edilmiş dizinleri tek hamlede görmek için idealdir.
Toplam Kullanımı Görmek
df -h --total
En alta eklenen “total” satırı tüm dosya sistemlerinin toplamını verir. Kapasite planlaması yaparken işe yarar.
İnode Kullanımını Kontrol Etmek
Disk dolu görünmese bile sistem “no space left on device” hatası veriyorsa, inode tükenmiş olabilir. Bu durumda:
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 287432 2989368 9% /
/dev/sdb1 13107200 9845234 3261966 76% /data
Yüksek inode kullanımı genellikle çok sayıda küçük dosyadan kaynaklanır. Mail sunucuları, cache sistemleri, PHP session dosyaları bu durumun baş sorumlularıdır.
Gerçek Dünya Senaryoları
Senaryo 1: Production Sunucusu Alarm Verdi
Gece 2’de alarm geliyor, uygulama loglarına yazamıyor. SSH ile bağlanıyorsunuz ve ilk çalıştırdığınız komut:
df -h
Çıktıda /var bölümünün %99 dolu olduğunu görüyorsunuz. Hangi dizinin yer kapladığını bulmak için du komutuyla kombinliyorsunuz ama önce hangi bölümün sorunlu olduğunu df ile tespit ettiniz. Bu, kritik dakikalarda zaman kazandırır.
Senaryo 2: Dosya Sistemi Tipine Göre Filtreleme
Sadece ext4 dosya sistemlerini görmek istiyorsunuz:
df -hT -t ext4
Ya da NFS bağlantılarını hariç tutmak istiyorsunuz, çünkü NFS sunucusu yavaş yanıt veriyor ve komutun çıktısını bekletmesin:
df -hT -x nfs -x nfs4
Senaryo 3: Özelleştirilmiş Çıktı Formatı
Monitoring scriptleri yazarken ya da başka bir araçla parse etmek için çıktıyı özelleştirmek isteyebilirsiniz:
df --output=source,size,used,avail,pcent,target -h
Sadece doluluk oranı ve bağlantı noktasını görmek için:
df -h --output=pcent,target
Bu çıktıyı bir script’e besleyebilir, yüzde değeri 80’i geçen bölümleri otomatik olarak tespit edebilirsiniz.
df ile Monitoring Script Yazmak
Sistem yöneticilerinin en çok kullandığı pratiklerden biri basit disk kullanım monitör scriptleri yazmaktır. İşte gerçekçi bir örnek:
#!/bin/bash
# Disk kullanimi kontrol scripti
# Crontab ile her saat calistirmak icin uygundur
ESIK=85
EMAIL="[email protected]"
HOSTNAME=$(hostname)
df -h --output=pcent,target | tail -n +2 | while read satir; do
yuzde=$(echo "$satir" | awk '{print $1}' | tr -d '%')
mount_noktasi=$(echo "$satir" | awk '{print $2}')
if [ "$yuzde" -ge "$ESIK" ]; then
echo "UYARI: $HOSTNAME sunucusunda $mount_noktasi bölümü %$yuzde dolu!"
| mail -s "Disk Uyarisi - $HOSTNAME" "$EMAIL"
fi
done
Bu scripti crontab’a ekleyerek düzenli aralıklarla çalıştırabilirsiniz:
# Her saat basinda calistir
0 * * * * /usr/local/bin/disk_kontrol.sh
Daha gelişmiş bir versiyon için threshold’ları farklı bölümler için ayrı ayrı ayarlayabilir, Slack webhook’u ile entegre edebilirsiniz.
df Çıktısını Parse Etmek
Bazen df çıktısını işlemek için awk veya grep ile kombinlemeniz gerekir. İşte yaygın kullanılan birkaç kombinasyon:
# Sadece yuzde 80'in uzerindeki bolümleri goster
df -h | awk 'NR==1 || int($5) > 80 {print}'
# Root bölümünün doluluk yuzdesini saf sayi olarak al
df / | tail -1 | awk '{print $5}' | tr -d '%'
# Tüm bölümlerin kullanim yüzdelerini sirala
df -h | tail -n +2 | sort -t'%' -k1 -rn
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
tmpfs ve devtmpfs Kalabalığı
Varsayılan df -h çıktısında çok sayıda tmpfs satırı görürsünüz. Bunlar gerçek disk alanı değil, RAM’de tutulan geçici dosya sistemleridir. Analiz yaparken bunları aklınızda bulundurun. Sadece gerçek disk bölümlerini görmek için:
df -hT -x tmpfs -x devtmpfs -x squashfs
Ubuntu sistemlerde snap paketleri yüzünden onlarca squashfs girişi görürsünüz. Bunları -x squashfs ile temizlediğinizde çıktı çok daha okunabilir hale gelir.
Bind Mount Kargaşası
Docker kullanan sistemlerde ya da bind mount yapılan ortamlarda aynı fiziksel disk alanı birden fazla satırda görünebilir. Bu durum toplam hesabı yanıltıcı hale getirebilir. --total ile elde ettiğiniz rakama körü körüne güvenmeyin.
NFS Zaman Aşımı Sorunu
NFS bağlantısı olan sistemlerde df komutu, NFS sunucusunun yanıt vermesini beklediği için askıya gidebilir. Eğer böyle bir durumda kalırsanız:
df -l
-l parametresi sadece yerel dosya sistemlerini listeler, NFS ve diğer uzak bağlantıları pas geçer. Sorunlu bir NFS bağlantısında bile anında sonuç alırsınız.
Silinen Ama Açık Tutulan Dosyalar
df komutunun gösterdiği kullanılan alan ile du komutunun hesapladığı toplam bazen uyuşmaz. Bunun en yaygın nedeni şudur: Bir dosya silinmiş ama hala çalışan bir process tarafından açık tutulmaktadır. Dosya silindi ama alan serbest bırakılmadı.
Bu durumu tespit etmek için:
# Silindi ama hala acik tutulan dosyalari bul
lsof | grep '(deleted)'
# Ya da daha hedefli arama
lsof +L1
Sorunu çözmek için ilgili process’i yeniden başlatmanız veya durdurup başlatmanız gerekir. Bu klasik bir “disk dolu ama du farkli söylüyor” senaryosunun arkasındaki en yaygın sebeptir.
df ile Kapasite Planlaması
Uzun vadeli kapasite planlaması için df çıktılarını zaman serisi olarak kaydetmek iyi bir alışkanlıktır:
# Her gun disk durumunu log dosyasina kaydet
echo "=== $(date) ===" >> /var/log/disk_kullanim.log
df -h >> /var/log/disk_kullanim.log
echo "" >> /var/log/disk_kullanim.log
Bu basit yaklaşım sayesinde 3 ay önce /data bölümü ne kadardı, bugün ne kadar gibi soruları cevaplayabilirsiniz. Büyük ortamlarda Prometheus + Grafana ile node_exporter‘ın zaten bu verileri topladığını biliyorsunuzdur ama küçük ortamlarda bu basit log yaklaşımı kurtarıcı olabilir.
df vs du: Hangisi Ne Zaman?
Bu iki komut sıkça karıştırılır. Kısaca fark şudur:
df dosya sistemi düzeyinde çalışır. Bölümün toplam boyutu, kullanılan alan, boş alan gibi meta verileri dosya sisteminin kendisinden okur. Bu yüzden çok hızlıdır.
du ise dizin ve dosya düzeyinde çalışır. Gerçekten her dosyayı gezip boyutunu toplar. Bu yüzden yavaştır ama “bu dizin ne kadar yer kaplıyor” sorusunu cevaplar.
Pratikte her ikisini birlikte kullanırsınız. df ile hangi bölümün dolduğunu tespit edersiniz, du ile o bölümde hangi dizinin şiştiğini bulursunuz:
# Önce hangi bölüm dolu?
df -h
# /data doluysa, içinde ne var?
du -sh /data/* | sort -rh | head -20
Alias ve Fonksiyonlarla Hızlandırma
Günde onlarca kez kullandığınız komutlar için alias tanımlamak verimliliği artırır. .bashrc veya .bash_profile dosyanıza ekleyebilecekleriniz:
# Okunabilir, squashfs ve tmpfs olmadan
alias dff='df -hT -x tmpfs -x devtmpfs -x squashfs'
# Sadece gercek diskler, toplam ile
alias dfft='df -hT -x tmpfs -x devtmpfs -x squashfs --total'
# Inode kullanimi
alias dfi='df -i -x tmpfs -x devtmpfs'
Bu alias’ları tanımladıktan sonra source ~/.bashrc ile aktif hale getirmeyi unutmayın.
Renklendirme ve Okunabilirliği Artırma
Standart df çıktısı düz metin olarak gelir. Yüksek doluluk oranlarını renklendirmek için awk ile birleştirme yapabilirsiniz:
df -h | awk '
NR==1 {print; next}
{
yuzde = int($5)
if (yuzde >= 90)
printf "33[0;31m" $0 "33[0mn"
else if (yuzde >= 75)
printf "33[0;33m" $0 "33[0mn"
else
print
}'
Bu script %90 ve üzerini kırmızı, %75-89 arasını sarı, altını ise normal renkte gösterir. Terminalde çalışırken kritik bölümleri anında görürsünüz.
Sonuç
df komutu basit görünür ama doğru parametrelerle ve doğru senaryolarda kullanıldığında sistem yöneticisinin en güvenilir arkadaşlarından biri haline gelir. Günlük rutin kontrollerde, acil müdahalelerde, kapasite planlamasında ve otomatik izleme scriptlerinde sürekli karşınıza çıkacak.
Şunu aklınızda tutun: df size hızlı bir genel bakış sunar. Ne zaman boş kalana bakarsınız, ne zaman inode’lara bakarsınız, ne zaman -x ile gereksiz satırları temizlersiniz, bunu öğrendikçe kullanım alışkanlıklarınız oturur.
Bir sonraki adım olarak du komutunu öğrenmek, ardından lsof ile silinen ama açık dosya sorunlarını çözmeyi pratiklemek mantıklı olur. Bu üçlü birlikte öğrenildiğinde disk sorunlarını kör olmadan, paniklemeden yönetebilirsiniz. Sabah kahvenizi alın, df -hT -x tmpfs -x devtmpfs -x squashfs --total komutunu bir kenara not edin ve günlük rutininize ekleyin.