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,.thumbnailsgibi 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ı /varveya/homegibi 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 TABLEkomutunu 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:
- Geçici dosyaları temizleyin (
/tmp,/var/tmp). - Log dosyalarını temizleyin (Logrotate ile).
- Kullanıcı dosyalarını silin (önceden belirlenmiş temizleme politikalarına göre).
- Veritabanı tablolarını optimize edin (
OPTIMIZE TABLE). - 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.