Skip to content
Back to blog
Teknoloji disk yönetimi sistem yönetimi logrotate disk analizi Linux sistem izleme veri kurtarma disk temizleme Mistral

Disk Doluluk Problemlerini Analiz Etmek: Sistem Yöneticisinin Kılavuzu

Disk doluluk problemlerini derinlemesine analiz etmek, nedenlerini tespit etmek ve kalıcı çözümler üretmek için izlenmesi gereken adımları ve araçları detaylı bir şekilde ele alan teknik rehber.

Caner Serbest

Sistem ve Altyapı

10 min read

Disk Doluluk Problemlerini Analiz Etmek: Sistem Yöneticisinin Kılavuzu

Sistem yöneticiliğinde karşılaşılan en yaygın ve kritik sorunlardan biri disk doluluk problemleridir. Bir sunucuda disk alanının tükenmesi, hizmetlerin durmasına, veritabanı hatalarına ve hatta sistem çökmesine yol açabilir. Bu durum sadece teknik bir sorun değil, aynı zamanda iş sürekliliğini doğrudan etkileyen bir risk faktörüdür.

Bu rehberde, disk doluluk problemlerini sistematik bir şekilde analiz etmek, kök nedenleri belirlemek ve kalıcı çözümler üretmek için izlenmesi gereken adımları detaylı olarak ele alacağız. Hem Linux hem de Windows tabanlı sistemlerde uygulanabilir yöntemlere odaklanacağız.


🔍 Disk Doluluk Problemlerinin Nedenleri

Disk doluluğunun arkasında birçok farklı neden olabilir. Bu nedenleri öncelikle kategorize etmek ve ardından veri toplama yoluyla tespit etmek, sorunun çözümünde ilk adımdır.

1. Geçici Dosyalar ve Loglar

En yaygın nedenlerden biri, sistemin veya uygulamaların oluşturduğu geçici dosyalar ve log kayıtlarıdır. Örneğin:

  • /var/log/ dizinindeki log dosyaları
  • /tmp/ dizinindeki geçici dosyalar
  • Uygulamaların cache dizinleri (örn. /var/cache/)
  • Kullanıcıların oluşturduğu .cache, .thumbnails gibi gizli dizinler

Örnek: Bir web sunucusunda çalışan Apache veya Nginx, her istek için log dosyalarına kayıt ekler. Zamanla bu log dosyaları büyüyerek disk alanını tüketebilir.

2. Veritabanı Büyümesi

Veritabanları, özellikle MySQL, PostgreSQL veya MongoDB gibi sistemlerde zamanla büyür. Eski kayıtlar, log tabloları ve gereksiz indeksler disk alanını hızla tüketebilir.

Örnek: Bir e-ticaret sitesinin veritabanında yıllık satış kayıtları biriktiğinde, tabloların boyutu gigabaytlarca artabilir.

3. Kullanıcı Dosyaları ve Yedekler

Kullanıcıların kişisel dosyaları, yedekler ve arşivler de disk doluluğuna neden olabilir. Özellikle:

  • /home/ dizinindeki kullanıcı dosyaları
  • /backup/ dizinindeki yedekler
  • Bulut depolama hizmetlerine yüklenen dosyalar

4. Uygulama ve Hizmetlerin Yanlış Yapılandırılması

Bazı uygulamalar, örneğin Docker, Elasticsearch veya Prometheus, varsayılan ayarlarla çalıştığında disk alanını hızla tüketebilir. Örneğin:

  • Docker konteynerlerinin katmanlı dosya sistemi
  • Elasticsearch’in indeks dosyaları
  • Prometheus’un zaman serisi veritabanı (TSDB)

5. Dosya Sistemi Bozulmaları ve Kötü Bloklar

Nadir de olsa, dosya sistemi bozulmaları veya bad block’lar disk alanının yanlış şekilde işaretlenmesine neden olabilir. Bu durumda sistem, aslında boş olan alanları dolu olarak gösterebilir.

6. Yanlış Disk Bölümleme ve Mount Noktaları

Disk bölümleme ve mount noktalarının yanlış yapılandırılması da disk doluluğuna yol açabilir. Örneğin:

  • Ana disk bölümünün (/) çok küçük olması
  • /var veya /home gibi kritik dizinlerin ayrı bir diskte olmaması

🛠️ Disk Doluluk Problemlerini Analiz Etmek İçin Adım Adım Rehber

Disk doluluğunu analiz etmek için aşağıdaki adımları izleyin. Her adımda, ilgili komutları ve araçları kullanarak verileri toplamanız ve değerlendirmeniz gerekir.

Adım 1: Disk Kullanımını Kontrol Etmek

İlk olarak, hangi disklerin dolu olduğunu ve hangi dizinlerin en fazla alanı tükettiğini belirleyin.

Linux Sistemlerinde

# Tüm disklerin kullanımını listele
df -h

# Belirli bir dizindeki dosyaların boyutunu görüntüle (örn. /var/log)
du -sh /var/log/*

# En büyük dosyaları ve dizinleri listele (en büyük 10 dosya)
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 10

# Belirli bir dizindeki en büyük dosyaları bul (örn. /home)
ncdu /home

Windows Sistemlerinde

# Disk kullanımını görüntüle
Get-PSDrive | Where-Object {$_.Provider -like "*FileSystem*"} | Select-Object Name, Used, Free, @{Name="PercentFree";Expression={[math]::Round(($_.Free / ($_.Used + $_.Free)) * 100, 2)}} | Format-Table -AutoSize

# Belirli bir dizindeki dosyaların boyutunu görüntüle
Get-ChildItem -Path "C:\Users" -Recurse | Sort-Object Length -Descending | Select-Object -First 10 Name, @{Name="Size(MB)";Expression={[math]::Round($_.Length / 1MB, 2)}}

Araç Önerileri:

  • Linux: ncdu, baobab, glances
  • Windows: WinDirStat, TreeSize

Adım 2: Kritik Dizinleri ve Dosyaları Belirlemek

Disk doluluğunun en büyük nedenlerini bulmak için, sistemdeki kritik dizinleri ve dosyaları analiz edin.

Linux Örnekleri

# /var dizinindeki en büyük dosyaları bul
sudo du -sh /var/*

# /var/log dizinindeki log dosyalarının boyutunu görüntüle
sudo du -sh /var/log/*

# /tmp dizinindeki geçici dosyaları temizle (dikkatli olun!)
sudo rm -rf /tmp/*

Windows Örnekleri

# Windows Log dizinindeki en büyük dosyaları bul
Get-ChildItem -Path "C:\Windows\Logs" -Recurse | Sort-Object Length -Descending | Select-Object -First 10 Name, @{Name="Size(MB)";Expression={[math]::Round($_.Length / 1MB, 2)}}

Adım 3: Log Dosyalarını Analiz Etmek ve Temizlemek

Log dosyaları, disk doluluğunun en yaygın nedenlerinden biridir. Log dosyalarını analiz etmek ve gereksiz olanları temizlemek önemlidir.

Linux Log Yönetimi

# /var/log dizinindeki log dosyalarını listele
ls -lh /var/log/

# Belirli bir log dosyasının boyutunu görüntüle (örn. syslog)
sudo du -sh /var/log/syslog

# Logrotate yapılandırmasını kontrol et
cat /etc/logrotate.conf

# Belirli bir log dosyasını temizle (örn. auth.log)
sudo truncate -s 0 /var/log/auth.log

Logrotate ile Otomatik Log Yönetimi

Logrotate, log dosyalarını otomatik olarak sıkıştırmak, arşivlemek ve silmek için kullanılan bir araçtır. Örnek bir yapılandırma:

# /etc/logrotate.d/syslog
/var/log/syslog {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 syslog adm
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Logrotate Komutları:

# Logrotate'u manuel olarak çalıştır
sudo logrotate -vf /etc/logrotate.conf

# Logrotate'un gelecekteki çalışmalarını test et
sudo logrotate -d /etc/logrotate.conf

Adım 4: Veritabanı Büyümesini Kontrol Etmek

Veritabanları, özellikle büyük tablolar ve indeksler nedeniyle disk alanını hızla tüketebilir. Veritabanı büyümesini analiz etmek ve optimize etmek önemlidir.

MySQL/MariaDB Örnekleri

-- Tüm veritabanlarının boyutunu listele
SELECT 
    table_schema AS "Database",
    SUM(data_length + index_length) / 1024 / 1024 AS "Size (MB)"
FROM information_schema.tables
GROUP BY table_schema
ORDER BY "Size (MB)" DESC;

-- Belirli bir veritabanındaki tabloların boyutunu görüntüle
SELECT 
    table_name AS "Table",
    ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
FROM information_schema.tables
WHERE table_schema = "veritabanı_adı"
ORDER BY (data_length + index_length) DESC;

PostgreSQL Örnekleri

-- Tüm veritabanlarının boyutunu listele
SELECT 
    datname AS "Database",
    pg_size_pretty(pg_database_size(datname)) AS "Size"
FROM pg_database
ORDER BY pg_database_size(datname) DESC;

-- Belirli bir tablonun boyutunu görüntüle
SELECT 
    table_name,
    pg_size_pretty(pg_total_relation_size(table_name)) AS "Size"
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY pg_total_relation_size(table_name) DESC;

Veritabanı Optimizasyonu

  • Eski kayıtları silmek: Örneğin, 1 yıldan eski log kayıtlarını silmek.
  • Tabloları sıkıştırmak: OPTIMIZE TABLE komutunu kullanmak.
  • Veritabanı yedeklerini yönetmek: Gereksiz yedekleri silmek.

Adım 5: Kullanıcı Dosyalarını ve Yedekleri Temizlemek

Kullanıcıların kişisel dosyaları ve yedekler de disk alanını tüketebilir. Bu dosyaları analiz etmek ve gereksiz olanları temizlemek önemlidir.

Linux Kullanıcı Dosyalarını Temizlemek

# Kullanıcıların .cache dizinlerini temizle
sudo find /home -type d -name ".cache" -exec rm -rf {} + 2>/dev/null

# Kullanıcıların .thumbnails dizinlerini temizle
sudo find /home -type d -name ".thumbnails" -exec rm -rf {} + 2>/dev/null

# Kullanıcıların indirdiği dosyaları temizle (örn. /home/user/Downloads)
find /home -type f -path "*/Downloads/*" -mtime +30 -delete

Windows Kullanıcı Dosyalarını Temizlemek

# Kullanıcıların Downloads dizinindeki 30 günden eski dosyaları sil
Get-ChildItem -Path "C:\Users\*\Downloads" -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force

Adım 6: Docker ve Diğer Uygulamaların Disk Kullanımını Kontrol Etmek

Docker konteynerleri, Elasticsearch indeksleri ve diğer uygulamalar disk alanını hızla tüketebilir. Bu uygulamaların disk kullanımını analiz etmek ve optimize etmek önemlidir.

Docker Disk Kullanımını Kontrol Etmek

# Docker'ın disk kullanımını görüntüle
docker system df

# Docker konteynerlerinin katmanlı dosya sistemini temizle
docker system prune -a --volumes

# Belirli bir konteynerin disk kullanımını görüntüle
docker inspect <konteyner_id> | grep -i "SizeRw"

Elasticsearch Disk Kullanımını Kontrol Etmek

# Elasticsearch'in indeks boyutunu görüntüle
curl -XGET 'http://localhost:9200/_cat/indices?v&h=index,store.size,store.size&s=store.size:desc'

# Belirli bir indeksi silmek
curl -XDELETE 'http://localhost:9200/indeks_adı'

Adım 7: Dosya Sistemi Bozulmalarını Kontrol Etmek

Nadir de olsa, dosya sistemi bozulmaları disk alanının yanlış şekilde işaretlenmesine neden olabilir. Bu durumda, dosya sistemini kontrol etmek ve gerekiyorsa onarmak önemlidir.

Linux Dosya Sistemi Kontrolü

# Dosya sistemini kontrol et (örn. /dev/sda1)
sudo fsck -f /dev/sda1

# Dosya sisteminin durumunu görüntüle
df -hT

Windows Dosya Sistemi Kontrolü

# Dosya sistemini kontrol et
chkdsk C: /f /r

Adım 8: Disk Bölümleme ve Mount Noktalarını Yeniden Düzenlemek

Eğer disk bölümleme ve mount noktaları yanlış yapılandırılmışsa, disk alanını yeniden düzenlemek gerekebilir. Bu işlem genellikle LVM (Logical Volume Manager) kullanılarak yapılır.

LVM ile Disk Alanını Yeniden Düzenlemek

# Mevcut LVM yapısını görüntüle
sudo vgdisplay
sudo lvdisplay

# Yeni bir fiziksel volume ekle (örn. /dev/sdb1)
sudo pvcreate /dev/sdb1

# Volume group'a ekle
sudo vgextend ubuntu-vg /dev/sdb1

# Logical volume'u genişlet
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# Dosya sistemini yeniden boyutlandır (örn. ext4)
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

📊 Disk Doluluk Problemlerini Önlemek İçin En İyi Uygulamalar

Disk doluluk problemlerini önlemek, tespit etmekten çok daha önemlidir. Aşağıdaki en iyi uygulamaları izleyerek disk doluluk problemlerini minimize edebilirsiniz:

1. Düzenli Disk Kullanımını İzlemek

  • Prometheus + Grafana kullanarak disk kullanımını grafiksel olarak izleyin.
  • Zabbix veya Nagios gibi izleme araçlarıyla disk doluluğunu anında tespit edin.

Örnek Prometheus Yapılandırması:

# prometheus.yml
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

2. Logrotate ve Log Yönetimini Otomatikleştirmek

  • Tüm log dosyalarını Logrotate ile otomatik olarak sıkıştırın, arşivleyin ve silin.
  • Kritik log dosyalarını ayrı bir disk bölümüne mount edin.

3. Veritabanı Yönetimini Optimize Etmek

  • Veritabanı yedeklerini otomatik olarak silin (örn. 30 günden eski yedekler).
  • Veritabanı tablolarını periyodik olarak optimize edin (örn. OPTIMIZE TABLE).
  • Veritabanı loglarını sınırlandırın (örn. MySQL için expire_logs_days).

4. Kullanıcı Dosyalarını ve Yedekleri Yönetmek

  • Kullanıcıların kişisel dosyalarını temizleme politikaları oluşturun (örn. 90 günden eski dosyaları silin).
  • Yedekleme sistemlerini optimize edin (örn. sadece gerekli verileri yedekleyin).

5. Docker ve Uygulama Disk Kullanımını Kontrol Etmek

  • Docker konteynerlerini düzenli olarak temizleyin (docker system prune).
  • Uygulama cache’lerini sınırlandırın (örn. Redis için maxmemory-policy).
  • Elasticsearch indekslerini periyodik olarak silin (örn. eski indeksleri otomatik olarak silin).

6. Disk Bölümleme ve Mount Noktalarını Doğru Yapılandırmak

  • Ana disk bölümünü (/) yeterince büyük yapın (örn. en az 50GB).
  • Kritik dizinleri (/var, /home, /opt) ayrı disk bölümlerine mount edin.
  • LVM kullanarak disk alanını esnek bir şekilde yönetin.

7. Disk Doluluk Problemlerine Karşı Hazırlıklı Olmak

  • Disk doluluğu uyarıları oluşturun (örn. df -h çıktısını izleyerek e-posta gönderin).
  • Acil durum senaryoları hazırlayın (örn. disk doluluğu durumunda hangi hizmetler durdurulmalı).
  • Disk genişletme planları oluşturun (örn. bulut ortamlarında disk genişletme).

🚨 Acil Durum Senaryoları: Disk Doluluğu Anında Müdahale

Disk doluluğu acil bir durumdur ve hızlı müdahale gerektirir. Aşağıdaki adımları izleyerek disk doluluğunun etkilerini minimize edebilirsiniz:

1. Hangi Hizmetlerin Durdurulacağına Karar Vermek

Disk doluluğu nedeniyle hizmetlerin durması kaçınılmaz olabilir. Öncelikle, kritik olmayan hizmetleri durdurun:

  • Geliştirme ortamları
  • Test sunucuları
  • Log toplama hizmetleri
  • Non-kritik uygulamalar

2. Geçici Disk Alanı Temin Etmek

Eğer mümkünse, geçici olarak ek disk alanı temin edin:

  • Bulut ortamlarında: Disk genişletme yapın.
  • Fiziksel sunucularda: Yeni bir disk ekleyin ve LVM ile genişletin.
  • Harici depolama: Kritik verileri geçici olarak harici depolamaya aktarın.

3. Kritik Verileri Kurtarmak

Disk doluluğu nedeniyle hizmetler durmuşsa, öncelikle kritik verileri kurtarın:

  • Veritabanı yedeklerini geri yükleyin.
  • Kritik log dosyalarını yedekleyin.
  • Uygulama verilerini kurtarın.

4. Disk Doluluğunu Gidermek

Disk doluluğunu gidermek için aşağıdaki adımları izleyin:

  1. Geçici dosyaları temizleyin (/tmp, /var/tmp).
  2. Log dosyalarını temizleyin (Logrotate ile).
  3. Kullanıcı dosyalarını silin (önceden belirlenmiş temizleme politikalarına göre).
  4. Veritabanı tablolarını optimize edin (OPTIMIZE TABLE).
  5. Docker konteynerlerini temizleyin (docker system prune).

5. Hizmetleri Yeniden Başlatmak

Disk doluluğunu giderdikten sonra, hizmetleri sırayla yeniden başlatın:

# Kritik hizmetleri yeniden başlat
sudo systemctl restart nginx
sudo systemctl restart mysql
sudo systemctl restart docker

📈 Disk Doluluk Problemlerini Ölçmek ve Raporlamak

Disk doluluk problemlerini ölçmek ve raporlamak, gelecekteki problemleri önlemek için kritik öneme sahiptir. Aşağıdaki yöntemleri kullanarak disk kullanımını izleyin ve raporlayın:

1. Manuel Raporlama

# Disk kullanımını görüntüle
df -h

# Belirli bir dizindeki dosyaların boyutunu görüntüle
du -sh /var/log

# En büyük dosyaları listele
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 10

2. Otomatik Raporlama (Bash Script)

#!/bin/bash

# Disk kullanımını kontrol et
DISK_USAGE=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }')

# Kritik eşik (örn. %90)
THRESHOLD=90

# E-posta göndermek için fonksiyon
echo "Disk Kullanımı Raporu - $(date)" > /tmp/disk_report.txt
echo "================================" >> /tmp/disk_report.txt
echo "$DISK_USAGE" >> /tmp/disk_report.txt

# Kritik eşiği aşan diskleri bul
CRITICAL_DISKS=$(echo "$DISK_USAGE" | awk -v threshold="$THRESHOLD" '$1 > threshold {print $2}')

if [ -n "$CRITICAL_DISKS" ]; then
    echo "Kritik Diskler: $CRITICAL_DISKS" >> /tmp/disk_report.txt
    mail -s "Disk Doluluk Uyarısı!" [email protected] < /tmp/disk_report.txt
fi

3. Prometheus ve Grafana ile İzleme

Prometheus ve Grafana kullanarak disk kullanımını grafiksel olarak izleyin:

Prometheus Yapılandırması:

# node_exporter.yml
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

Grafana Dashboard Örneği:

  • Node Exporter Full Dashboard (ID: 1860)
  • Disk I/O Dashboard

4. Zabbix ile İzleme

Zabbix kullanarak disk kullanımını izleyin ve uyarılar oluşturun:

Zabbix Örnek Triggers:

  • vfs.fs.size[/,free] < 10G (Ana disk bölümünde 10GB’dan az alan kaldığında uyarı)
  • vfs.fs.size[/var,free] < 5G (Var dizininde 5GB’dan az alan kaldığında uyarı)

🔚 Sonuç: Disk Doluluk Problemlerini Kalıcı Olarak Çözmek

Disk doluluk problemleri, sistem yöneticilerinin karşılaştığı en yaygın ve kritik sorunlardan biridir. Bu problemleri sistematik bir şekilde analiz etmek, kök nedenleri belirlemek ve kalıcı çözümler üretmek önemlidir.

Bu rehberde ele aldığımız adımları izleyerek: ✅ Disk doluluk problemlerini hızlı bir şekilde tespit edebilirsiniz. ✅ Disk doluluğunun kök nedenlerini belirleyebilirsiniz. ✅ Disk doluluğunu önlemek için en iyi uygulamaları uygulayabilirsiniz. ✅ Disk doluluğu durumunda acil müdahale planları oluşturabilirsiniz. ✅ Disk kullanımını otomatik olarak izleyebilir ve raporlayabilirsiniz.

Unutmayın: Disk doluluk problemleri sadece bir teknik sorun değil, aynı zamanda iş sürekliliğini doğrudan etkileyen bir risk faktörüdür. Bu nedenle, disk kullanımını düzenli olarak izlemek ve gerekli önlemleri almak, sistem yöneticisinin en önemli görevlerinden biridir.

Eğer disk doluluk problemleriyle karşılaşırsanız, bu rehberdeki adımları izleyerek sorunu kalıcı olarak çözebilirsiniz. İyi şanslar! 🚀


Bu yazı Mistral ile otomatik oluşturulmuştur.