Belge

Ubuntu Sunucusunda ‘Cihazda Yer Kalmadı’ Sorunu Nasıl Onarılır

Bir Ubuntu sunucusundaki ‘Cihazda yer kalmadı’ hatası, disk veya dosya sistemi dolduğunda ortaya çıkan ve sistemin yeni dosyalar yazmasını veya oluşturmasını engelleyen yaygın bir sorundur.

Bir Ubuntu sunucusundaki “Cihazda yer kalmadı” hatası, disk veya dosya sistemi dolduğunda ortaya çıkan ve sistemin yeni dosyalar yazmasını veya oluşturmasını engelleyen yaygın bir sorundur. Bu sorun, özellikle düzgün çalışması için disk alanı gerektiren uygulamaları veya hizmetleri çalıştırırken sunucu performansını ve kararlılığını etkileyebilir. Bu kılavuzda, bu sorunu teşhis etmek ve düzeltmek için çeşitli yöntemleri inceleyeceğiz.

# 1. df Komutu ile Disk Kullanımını Kontrol Edin

“Cihazda yer kalmadı” sorununu çözmenin ilk adımı, kullanılabilir disk alanını kontrol etmektir. Bu işlemi disk kullanım istatistiklerini gösteren df komutu ile yapabiliriz.

Tüm bağlı dosya sistemleri için disk kullanımını görüntülemek için aşağıdaki komutu çalıştırın:

df -h
  • -h, çıktıyı insan tarafından okunabilir hale getirir (örneğin, GB veya MB cinsinden).
  • Çıktı, dosya sistemini, boyutu, kullanılan alanı, kullanılabilir alanı ve bağlama noktasını gösterecektir.

Örnek çıktı:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       20G  19G   1G  95% /
/dev/sdb1       50G  10G  40G  20% /data

Bu durumda, /dev/sda1 (kök dosya sistemi) %95 doludur, yani yalnızca 1 GB boş alan kalmıştır. Hatanın nedeni bu olabilir.

# 2. Büyük dosyaları ve dizinleri tanımlayın

Disk neredeyse doluysa, hangi dosyaların veya dizinlerin en fazla alanı tükettiğini belirlemek çok önemlidir. Büyük dosya ve dizinleri bulmak için DU (Disk Kullanımı) komutunu kullanabiliriz.

Kök dosya sistemindeki dizine göre disk kullanımının bir özetini almak için:

sudo du -h --max-depth=1 /
  • -h, insan tarafından okunabilir bir biçim verir.
  • --max-depth=1, listeyi dizinlerin ilk düzeyiyle sınırlar.

Bu bize hangi dizinlerin en fazla yer kapladığına dair bir genel bakış sağlayacaktır.

Belirli bir dizini daha fazla keşfetmemiz gerekirse, örneğin, /var, şunu çalıştırabiliriz:

sudo du -h --max-depth=1 /var

# 3. Büyük günlük dosyalarını kontrol edin

Günlük dosyaları genellikle hızlı bir şekilde büyür ve doğru yönetilmezse önemli miktarda yer kaplayabilir. Günlükler için ortak bir konum /var/log dizinidir.

/var/log içindeki dosyaların disk kullanımını kontrol etmek için şunu çalıştırın:

sudo du -sh /var/log/*

syslog, kern.log veya nginx/*.log gibi büyük günlük dosyalarını arayın.

Günlük dosyalarını keserek güvenli bir şekilde temizleyebiliriz. Mesela:

sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log

Alternatif olarak, günlük dosyası boyutlarını otomatik olarak yönetmek için logrotate gibi günlük döndürme araçlarını kullanabiliriz.

# 4. Gereksiz dosyaları sil

Kaldırılabilecek gereksiz dosyaları kontrol edin. Bunlar şunlar olabilir:

  • Eski yedeklemeler
  • Geçici dosyalar
  • Kullanılmayan yazılım paketleri

Eski paket dosyalarını ve önbelleğe alınmış verileri temizlemek için aşağıdaki komutları kullanabiliriz:

  • APT önbelleğini temizleyin:
    sudo apt-get clean
    
  • Kullanılmayan paketleri kaldırın:
    sudo apt-get autoremove
    
  • Artık paketleri kaldırın:
    sudo apt-get autoclean
    
  • Geçici dosyaları temizleyin: Geçici dosyaları /tmp dizininden aşağıdakilerle silebiliriz:
    sudo rm -rf /tmp/*
    

# 5. Dosya Sistemi Sorunlarını İnceleyin ve Düzeltin

Eğer disk kullanımı normal görünüyor ancak hala “Cihazda yer kalmadı” hatasını görüyorsak, dosya sisteminin kendisinde dosya sistemi bozulması veya düğüm tükenmesi gibi sorunlar olabilir.

# Inode Kullanımını Kontrol Edin

Inode’lar, dosyalarla ilgili meta verileri depolayan veri yapılarıdır ve düğümler tükenirse, boş alan olsa bile sistem yeni dosyalar oluşturamaz. DF -I komutu ile inode kullanımını kontrol edebiliriz:

df -i

Örnek çıktı:

Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1       1M     1M      0    100% /

Düğümlerin% 100 kullanıldığını görürsek, birçok küçük dosya içeren dosyaları veya dizinleri silerek yer açmamız gerekecektir.

# Dosya Sistemini Kontrol Edin ve Onarın

Dosya sistemini kontrol etmek ve onarmak için fsck (dosya sistemi kontrolü) aracını kullanın. İlk olarak, dosya sisteminin bağlantısını kesin:

sudo umount /dev/sda1

Ardından bölümdeki fsck aracını çalıştırın:

sudo fsck /dev/sda1

Diskte bulunan hataları onarmak için istemleri izleyin.

# 6. Dosya sistemini yeniden boyutlandırın veya daha fazla disk alanı ekleyin

Disk gerçekten doluysa ve yeterli alan boşaltamıyorsak, dosya sistemini yeniden boyutlandırmayı veya daha fazla disk alanı eklemeyi düşünün. Bir sanal makine kullanıyorsak, sanal diski wer hypervisor’da yeniden boyutlandırabilir ve ardından gparted veya resize2fs kullanarak bölümü genişletebiliriz.

Örneğin, kök bölümü yeniden boyutlandırmak için resize2fs’yi kullanabiliriz:

sudo resize2fs /dev/sda1

# 7. Disk Alanı Kullanımını İzleyin

Bu sorunun gelecekte oluşmasını önlemek için disk kullanımını düzenli olarak izlemek çok önemlidir. Aşağıdakiler de dahil olmak üzere çeşitli izleme araçları mevcuttur:

  • df and du commands (Manuel kontroller)
  • dstat or sysstat (Ayrıntılı disk etkinliği için)

# 8. Logrotate kullanarak büyük günlük dosyalarını düzeltin

Günlük dosyaları, özellikle /var/log içindekiler, düzgün yönetilmezse hızla büyüyebilir. Bunun “Cihazda yer kalmadı” sorununa neden olmasını önlemek için Logrotate’i yapılandırabiliriz.

  • Logrotate’i yükleyin
sudo apt-get install logrotate
  • Logrotate Yapılandırması
    • Global Configuration: /etc/logrotate.conf dosyasında bulunan bu dosya, tüm günlükler için geçerli olan genel ayarları içerir.
    • Individual Log Configurations: /etc/logrotate.d/ dizininde bulunan bu dizin, belirli günlük dosyaları veya hizmetler (örneğin, Apache, Nginx, MySQL, vb.) için ayrı yapılandırma dosyaları içerir.
    • Logrotate, günlükleri dosya boyutu, yaş veya zaman gibi önceden tanımlanmış kriterlere göre döndürerek çalışır. Ayrıca yerden tasarruf etmek için günlükleri sıkıştırabilir.
  • Belirli Günlük Dosyaları için Logrotate’i Yapılandırma
    • Belirli günlük dosyaları için çok büyüdüklerinde otomatik olarak döndürmek için bir yapılandırma dosyası oluşturabilir veya değiştirebiliriz. /var/log/syslog gibi büyük bir günlük dosyası için günlük döndürmeyi yapılandıralım.
  • Belirli Günlük Dosyaları için Logrotate’i Yapılandırma
    • Belirli günlük dosyaları için çok büyüdüklerinde otomatik olarak döndürmek için bir yapılandırma dosyası oluşturabilir veya değiştirebiliriz. /var/log/syslog gibi büyük bir günlük dosyası için günlük döndürmeyi yapılandıralım.
    • Özel Bir Günlük Döndürme Dosyası Oluşturun: Belirli bir günlük dosyası için döndürmeyi yapılandırmak için /etc/logrotate.d/ içinde yeni bir dosya oluşturabiliriz.
      sudo vim /etc/logrotate.d/syslog
    
    • Logrotate Yapılandırması: Syslog dosyasını döndürmek için örnek bir yapılandırma aşağıda verilmiştir
      /var/log/syslog {
          daily               # Rotate logs every day
          missingok           # Ignore errors if the log file is missing
          rotate 7            # Keep 7 days of log files
          compress            # Compress old logs to save space
          delaycompress       # Delay compression until the second rotation
          notifempty          # Do not rotate if the log file is empty
          create 0640 root root # Create new log with specified permissions and ownership
          size 50M            # Rotate the log file when it reaches 50MB in size
      }
      
      • daily: Rotates the log file every day.
      • rotate 7: Keeps the last 7 log files and removes older ones.
      • compress: Compresses old log files to save space.
      • delaycompress: Delays the compression of old logs until the second rotation.
      • size 50M: Rotates the log file when it reaches 50MB.
      • notifempty: Does not rotate the log if it’s empty.
      • create 0640 root root: Creates a new log file with specific permissions and ownership.
    • Logrotate yapılandırmasını test edin
      • Büyük günlük dosyaları için logrotate’i yapılandırdıktan sonra, beklendiği gibi çalıştığından emin olmak için yapılandırmayı test edebiliriz
      sudo logrotate -d /etc/logrotate.conf
      
      • -d seçeneği, logrotate’e hata ayıklama modunda çalışmasını söyler ve döndürme işlemini gerçekten gerçekleştirmeden simüle eder. Çıktıda herhangi bir hata veya sorun olup olmadığını kontrol edin.
      • Her şey yolunda görünüyorsa, logrotate’i günlükleri hemen çalıştırmaya ve döndürmeye zorlayabiliriz:
      sudo logrotate -f /etc/logrotate.conf
      
    • Logrotate için cron’u kurma:
      • Logrotate genellikle bir cron işi aracılığıyla otomatik olarak çalışacak şekilde yapılandırılır. Cron dizinini inceleyerek logrotate’in önceden planlanıp programlanmadığını kontrol edin
      sudo vim /etc/cron.daily/logrotate
      
      • Bu dosya zaten mevcut olmalıdır ve logrotate günde bir kez otomatik olarak çalıştırılacaktır.
      • Logrotate’in ne sıklıkta çalıştığını ayarlamak istiyorsak, daha sık rotasyonlar için özel cron işleri oluşturabiliriz. Örneğin, gerekirse her saat logrotate çalıştıran bir cron işi oluşturabiliriz:
      sudo vim /etc/cron.hourly/logrotate
      

      Bu dosyanın içine şunu ekleyin:

      #!/bin/sh
      /usr/sbin/logrotate /etc/logrotate.conf
      
      • Dosyayı yürütülebilir hale getirme
      sudo chmod +x /etc/cron.hourly/logrotate
      
    • Döndürme ayarlarını izleyin ve ayarlayın
      • Logrotate’i kurduktan sonra, log rotation’ın düzgün çalıştığından emin olmak için sistemin disk kullanımını izlemek önemlidir. Sıklığı, boyut sınırlarını ve tutulan günlük dosyalarının sayısını gerektiği gibi ayarlayabiliriz.
      • Ayrıca, eski günlüklerin beklendiği gibi sıkıştırıldığından ve kaldırıldığından emin olmak için /var/log dizinini düzenli aralıklarla denetlemek isteyebiliriz.

        Yazının orijinalini buradan okuyabilirsiniz.