Linux No Space Left on Device Hatası: Disk Alanını Geri Kazan
Disk alanı veya inode dolduğunda bu hata oluşur. df -h, du -sh ile analiz yapın, log dosyalarını temizleyin.
Linux Disk Dolu Hatası Nedir?
"No space left on device" hatası, Linux sisteminde bir dosya yazmaya veya yeni bir dosya oluşturmaya çalışırken diskin ya da ilgili bölümün tamamen dolduğunu gösteren bir işletim sistemi hatasıdır. Bu hata yalnızca disk alanı bitmişken değil, disk alanı müsait olsa bile inode (dosya sistemi meta verisi) dolduğunda da ortaya çıkabilir.
Üretim ortamındaki Linux sunucularda bu hata kritik sonuçlara yol açar: web sunucusu yeni log yazamaz ve çöker, veritabanı transaction loglarını yazamaz ve hata verir, e-posta sunucusu kuyruk dosyaları oluşturamaz, yeni kullanıcı girişleri başarısız olur. Dahası, root kullanıcısı için genellikle %5 rezerv alan ayrılmış olduğundan root yetkisiz kullanıcılar disk %95 dolduğunda bu hatayla karşılaşmaya başlar.
Terminalde hata mesajı:
bash: cannot create temp file for here-document: No space left on device
# veya
cp: error writing '/var/log/app.log': No space left on device
# veya MySQL için:
[ERROR] Error writing file './mysql/#sql-xxx.MYD' (Errcode: 28 - No space left on device)
Olası Nedenler
- Log dosyaları kontrol edilmeden büyümüş (Apache, Nginx, MySQL, syslog)
- Büyük dosya yüklemeleri /tmp veya /var/tmp dizinini doldurdu
- Eski Linux kernel sürümleri silinmemiş
- MySQL/MariaDB binary log veya slow log çok büyüdü
- Çok sayıda küçük dosya inode limitini aştı
- PHP session dosyaları temizlenmemiş
- Docker container'ları veya imajlar disk dolduruyor
- Mail kuyruğu (Exim/Postfix) doldu
Çözüm Adımları
1. Disk Kullanımını Analiz Etme
İlk adım, hangi bölümün ve hangi dizinin dolduğunu tespit etmektir:
# Tüm bölümlerin doluluk oranı:
df -h
# İnode kullanımı (disk alanı var ama hata alıyorsanız):
df -i
# En büyük dizinleri bul (kök dizinden itibaren):
du -sh /* 2>/dev/null | sort -rh | head -20
# Belirli bir dizin altında:
du -sh /var/* 2>/dev/null | sort -rh | head -10
2. Büyük Log Dosyalarını Temizleme
Log dosyaları genellikle en büyük yer kaplandır:
# En büyük log dosyalarını bul:
find /var/log -type f -name "*.log" -exec ls -lh {} \; | sort -k5 -rh | head -20
# Belirli bir log dosyasını boşalt (silmeden):
> /var/log/apache2/access.log
truncate -s 0 /var/log/nginx/access.log
# Eski log dosyalarını sil:
find /var/log -name "*.log.*" -mtime +7 -delete
find /var/log -name "*.gz" -mtime +30 -delete
MySQL binary log dosyaları çok büyüyebilir:
mysql -u root -p -e "SHOW BINARY LOGS;"
mysql -u root -p -e "PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY);"
3. Eski Kernel ve Paketleri Silme (Ubuntu/Debian)
# Eski kernel'leri otomatik temizle:
sudo apt autoremove --purge
sudo apt clean
# Paket önbelleğini temizle:
sudo apt-get clean
# Hangi kernel'ler kurulu:
dpkg --list | grep linux-image
# Mevcut kernel (silmeyin!):
uname -r
CentOS/RHEL için:
sudo yum autoremove
sudo package-cleanup --oldkernels --count=1
sudo dnf clean all
4. /tmp ve Geçici Dosyaları Temizleme
# /tmp'yi temizle (çalışan processlerin geçici dosyalarına dikkat edin):
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +30 -delete
# PHP session dosyaları:
find /var/lib/php/sessions -type f -mtime +1 -delete
5. İnode Sorununu Çözme
Disk alanı var ama inode dolmuşsa:
df -i
# IUSE% 100% olan bölümü bulun
# En fazla dosya içeren dizini bul:
find / -xdev -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -20
# PHP session dosyaları sık inode dolmasına neden olur:
ls /var/lib/php/sessions | wc -l
find /var/lib/php/sessions -type f -mtime +1 -delete
# Mail kuyruğu:
ls /var/spool/mail/ | wc -l
6. Logrotate Yapılandırması
Log dosyalarının otomatik döndürülmesi için logrotate yapılandırın:
nano /etc/logrotate.d/nginx
# İçerik:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
nginx -s reopen
endscript
}
# Manuel olarak çalıştırın:
sudo logrotate -f /etc/logrotate.conf
7. Docker Temizliği
Docker kullanıyorsanız kullanılmayan kaynakları temizleyin:
docker system prune -a --volumes
docker image prune -a
docker volume prune
Özet ve Önleyici Tedbirler
- Disk doluluk oranını izlemek için Zabbix, Nagios veya Netdata kullanın
- %80 dolulukta uyarı, %90'da kritik alarm kurun
- Logrotate yapılandırmasını tüm servisler için eksiksiz uygulayın
- MySQL binary logları için
expire_logs_days = 7ayarını yapın df -iile inode kullanımını da düzenli olarak takip edin- Büyük log üreten uygulamalar için ayrı disk bölümü oluşturun (
/var/logayrı)
İlgili Makaleler
- cPanel Disk Kotası Dolu: E-posta ve Site Sorunları Nasıl Çözülür?
- AlmaLinux 9 Kurulumu ve İlk Yapılandırma Rehberi
- Ubuntu Server 22.04 LTS Kurulumu ve Güvenli Yapılandırma Rehberi
- Debian 12 Sunucu Kurulumu: Minimal ve Güvenli Başlangıç
- Linux Firewall: firewalld ve UFW ile HTTP, HTTPS ve SSH Kuralları
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!