Linux’ta Kullanıcı Başına Disk Kotası Tanımlama

Disk alanı yönetimi, sistem yöneticilerinin günlük hayatında en sık karşılaştığı sorunların başında gelir. Özellikle çok kullanıcılı sistemlerde, bir kullanıcının kontrolsüzce disk doldurması tüm sistemi çökertebilir. Bunu önlemenin en etkili yolu disk kotası tanımlamaktır. Bu yazıda Linux üzerinde kullanıcı başına disk kotası nasıl kurulur, yapılandırılır ve yönetilir, bütün detaylarıyla ele alacağız.

Disk Kotası Nedir ve Neden Gereklidir?

Disk kotası, bir kullanıcının veya grubun belirli bir dosya sisteminde kullanabileceği maksimum disk alanını ve dosya sayısını sınırlandıran bir mekanizmadır. Örneğin bir web hosting sunucunuz var ve her müşteriye 5 GB alan vaat ettiniz. Kota tanımlamazsanız, bir müşteri 50 GB doldurup diğer herkesin sitesini çökertebilir. Ya da şirket içi bir dosya sunucusunda bir kullanıcı kişisel videolarını yükleyip disk alanını tüketebilir.

Disk kotası iki temel ölçüt üzerinden çalışır:

  • Block quota: Kullanıcının kaplayabileceği toplam disk bloğu miktarı (yani kaç MB/GB kullanabileceği)
  • Inode quota: Kullanıcının oluşturabileceği maksimum dosya sayısı

Her iki ölçüt için de iki eşik değeri tanımlanır:

  • Soft limit: Kullanıcının geçici olarak aşabildiği limit. Grace period (tolerans süresi) dolana kadar bu aşım tolere edilir.
  • Hard limit: Kesinlikle geçilemez. Sistem bu sınıra ulaşıldığında yazma işlemini reddeder.

Gerekli Paketlerin Kurulumu

Quota araçları çoğu dağıtımda varsayılan olarak gelmez, önce kurmanız gerekir.

Debian/Ubuntu için:

sudo apt update
sudo apt install quota quotatool

RHEL/CentOS/AlmaLinux için:

sudo dnf install quota

Arch Linux için:

sudo pacman -S quota-tools

Dosya Sistemini Kota Destekli Hale Getirme

Kota çalışması için ilgili dosya sisteminin usrquota veya grpquota seçenekleriyle mount edilmesi gerekir. /etc/fstab dosyasını düzenleyelim.

Önce mevcut mount noktalarına bakalım:

cat /etc/fstab

Tipik bir satır şöyle görünür:

/dev/sdb1  /home  ext4  defaults  0  2

Bunu aşağıdaki gibi düzenleyin:

/dev/sdb1  /home  ext4  defaults,usrquota,grpquota  0  2

Eğer XFS kullanıyorsanız biraz farklıdır:

/dev/sdb1  /home  xfs  defaults,usrquota,grpquota  0  2

Değişikliği aktif etmek için dosya sistemini yeniden mount edin:

sudo mount -o remount /home

Mount seçeneklerinin aktif olduğunu doğrulayın:

mount | grep /home

Çıktıda usrquota ve grpquota seçeneklerini görmelisiniz.

Quota Veritabanı Dosyalarının Oluşturulması (ext4)

ext4 dosya sistemlerinde quota bilgileri aquota.user ve aquota.group adlı dosyalarda tutulur. Bu dosyaları oluşturmak için:

sudo quotacheck -cug /home

Parametrelerin anlamları:

  • -c: Quota dosyalarını oluştur
  • -u: Kullanıcı kotası için
  • -g: Grup kotası için

Sonra quota servisini etkinleştirin:

sudo quotaon -v /home

Çıktı şöyle bir şey olmalı:

/dev/sdb1 [/home]: group quotas turned on
/dev/sdb1 [/home]: user quotas turned on

XFS Dosya Sisteminde Quota

XFS biraz farklı davranır. XFS, quota verilerini ayrı dosyalarda değil doğrudan dosya sistemi içinde tutar. quotacheck komutuna gerek yoktur, mount seçenekleri yeterlidir. Ancak quota işlemlerini aktif etmek için sistemi yeniden başlatmanız veya şu komutu çalıştırmanız gerekebilir:

sudo xfs_quota -x -c 'state' /home

Kullanıcıya Kota Tanımlama

Şimdi asıl işe gelelim. edquota komutu ile kullanıcıya kota tanımlayabiliriz:

sudo edquota -u ahmet

Bu komut aşağıdaki gibi bir metin editörü açar (varsayılan olarak vi):

Disk quotas for user ahmet (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                      1024          0          0         50        0        0

Buradaki alanlar:

  • blocks: Kullanıcının şu an kullandığı blok miktarı (KB cinsinden)
  • soft (blok için): Yumuşak limit, KB cinsinden
  • hard (blok için): Sert limit, KB cinsinden
  • inodes: Mevcut dosya sayısı
  • soft (inode için): Dosya sayısı yumuşak limiti
  • hard (inode için): Dosya sayısı sert limiti

Kullanıcıya 5 GB soft, 6 GB hard limit verelim:

Disk quotas for user ahmet (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                      1024    5242880    6291456         50    10000    12000

Hesaplama: 5 GB = 5 1024 1024 = 5242880 KB, 6 GB = 6291456 KB.

Kaydetmek için :wq ile çıkın.

Kota Bilgilerini Kontrol Etme

Tanımladığınız kotaları doğrulamak için:

sudo quota -v ahmet

Tüm kullanıcıların kotalarını görmek için:

sudo repquota -a

Bu komut şöyle bir çıktı verir:

*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  102400       0       0             45     0     0
ahmet     --    1024 5242880 6291456             50 10000 12000
mehmet    --   20480 5242880 6291456            210 10000 12000

Grace Period (Tolerans Süresi) Ayarlama

Soft limit aşıldığında kullanıcıya kaç günlük ek süre tanınacağını belirlemek için:

sudo edquota -t

Bu komut şöyle bir ekran açar:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sdb1                     7days                  7days

Bunu istediğiniz değere değiştirebilirsiniz. Örneğin 3 gün yapmak için 7days yerine 3days yazıp kaydedin. Grace period dolduğunda sistem soft limiti hard limit gibi davranmaya başlar ve yeni yazma işlemlerine izin vermez.

Bir Kullanıcının Kotasını Başka Kullanıcıya Kopyalama

Onlarca kullanıcıya aynı kota ayarlarını tek tek uygulamak zahmetlidir. edquota -p seçeneği ile bir kullanıcının kota profilini diğerlerine kopyalayabilirsiniz:

sudo edquota -p ahmet mehmet

Bu komut ahmet kullanıcısının kota ayarlarını mehmete kopyalar.

Birden fazla kullanıcıya aynı anda uygulamak için:

sudo edquota -p ahmet ali veli ayse fatma

Hatta sistemdeki belirli bir UID aralığındaki tüm kullanıcılara uygulamak istiyorsanız, bunu bir döngüyle yapabilirsiniz:

for user in $(awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd); do
    sudo edquota -p ahmet $user
done

Bu script /etc/passwd dosyasından UID’si 1000-65534 arasındaki (yani normal kullanıcıların) listesini çeker ve hepsine ahmetin kota profilini uygular.

Kota Uyarı Maili Gönderme

Kullanıcılar kotalarını aştığında otomatik uyarı maili gönderebilirsiniz. Bunun için warnquota komutu kullanılır. Yapılandırma dosyası /etc/warnquota.conf‘tur.

sudo nano /etc/warnquota.conf

Temel ayarlar şunlardır:

MAIL_CMD        = "/usr/lib/sendmail -t"
FROM            = "[email protected]"
SUBJECT         = "Disk Kotasi Uyarisi"
CC_TO           = "[email protected]"
SUPPORT         = "[email protected]"
PHONE           = "0212 xxx xx xx"

Uyarıları göndermek için:

sudo warnquota

Bunu bir cron job haline getirin:

sudo crontab -e

Şu satırı ekleyin (her gün sabah 8’de çalışır):

0 8 * * * /usr/sbin/warnquota

XFS Üzerinde Kota Yönetimi

XFS dosya sistemi kullanıyorsanız xfs_quota aracını kullanmanız gerekir. Temel kullanım:

sudo xfs_quota -x -c 'limit bsoft=5g bhard=6g ahmet' /home

Parametreler:

  • -x: Expert mod, yazma işlemleri için gerekli
  • -c: Komut
  • bsoft: Block soft limit
  • bhard: Block hard limit

Inode limiti de ekleyelim:

sudo xfs_quota -x -c 'limit bsoft=5g bhard=6g isoft=10000 ihard=12000 ahmet' /home

Mevcut kotaları görüntülemek için:

sudo xfs_quota -x -c 'report -uh' /home

Grace period ayarlamak için:

sudo xfs_quota -x -c 'timer -b 3days' /home

Gerçek Dünya Senaryosu: Web Hosting Sunucusu

Diyelim ki 50 müşterili bir paylaşımlı hosting sunucunuz var. Her müşteri bir Linux kullanıcısına karşılık geliyor ve /home/musteri_adi dizinini kullanıyor. Hepsine standart bir paket uygulamak için şu yaklaşımı kullanabilirsiniz.

Önce bir “template” kullanıcısına kota ayarlayın:

sudo edquota -u template_user

Şu değerleri girin (10 GB soft, 11 GB hard):

/dev/sdb1  0  10485760  11534336  0  50000  55000

Sonra tüm hosting kullanıcılarını bir dosyaya listeleyin:

grep "^musteri" /etc/passwd | cut -d: -f1 > /tmp/hosting_users.txt

Tüm kullanıcılara uygulayın:

while read user; do
    sudo edquota -p template_user $user
    echo "$user icin kota ayarlandi"
done < /tmp/hosting_users.txt

Ve mevcut durumu raporlayın:

sudo repquota -as /home

Buradaki -s seçeneği boyutları insan okunabilir formatta (GB, MB) gösterir.

Gerçek Dünya Senaryosu: Kurumsal Dosya Sunucusu

Bir kurumda farklı departmanlar farklı kota haklarına sahip olabilir. Örneğin muhasebe departmanı 20 GB, yazılım ekibi 50 GB kullanabilsin. Bunu grup kotaları ile yönetebilirsiniz.

sudo edquota -g muhasebe
Disk quotas for group muhasebe (gid 1010):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                    102400   20971520   23068672        500    50000    60000
sudo edquota -g yazilim
Disk quotas for group yazilim (gid 1011):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                    204800   52428800   57671680       1200    100000   120000

Grup kotası raporunu görmek için:

sudo repquota -ag

Not: Hem kullanıcı hem de grup kotası tanımlandığında, kullanıcı her iki limitin de en düşüğüne tabi olur. Yani kullanıcı 50 GB hakkı olsa bile grubu 20 GB ile sınırlıysa, 20 GB’ı doldurduğunda yazma engellenir.

Kota Sorunlarını Giderme

Quota aktif değil hatası: quotaon çalıştırıldığında “No such process” hatası alıyorsanız kernel modülünü kontrol edin:

lsmod | grep quota

Modülü yükleyin:

sudo modprobe quota_v2

Quota dosyaları bozuldu: quotacheck ile yeniden oluşturun. Önce quota’yı kapatın:

sudo quotaoff /home
sudo quotacheck -avug
sudo quotaon /home

Kullanıcı hata alıyor ama kota dolmadı: Grace period dolmuş olabilir. Şu komutla kontrol edin:

sudo quota -v kullanici_adi

Çıktıda grace sütununda bir süre görüyorsanız, soft limit aşılmış ve süre dolmuştur. Kullanıcıdan eski dosyaları silmesini isteyin veya grace period’u sıfırlayın:

sudo setquota -u kullanici_adi 0 0 0 0 /home
sudo edquota -u kullanici_adi

Quota Durumunu İzleme Scripti

Kota doluluk oranlarını takip etmek için basit bir monitoring scripti:

#!/bin/bash
# quota_monitor.sh
# Kotasinin %80'ini dolduran kullanicilari raporlar

THRESHOLD=80
FILESYSTEM="/home"
ADMIN_MAIL="[email protected]"
REPORT_FILE="/tmp/quota_report_$(date +%Y%m%d).txt"

echo "Kota Raporu - $(date)" > $REPORT_FILE
echo "================================" >> $REPORT_FILE

repquota -au $FILESYSTEM | awk -v threshold=$THRESHOLD '
NR > 5 && $1 != "root" && $4 > 0 {
    kullanim = $2
    limit = $4
    if (limit > 0) {
        yuzde = (kullanim * 100) / limit
        if (yuzde >= threshold) {
            printf "UYARI: Kullanici: %-15s Kullanim: %d KB / %d KB (%%%d)n", $1, kullanim, limit, yuzde
        }
    }
}' >> $REPORT_FILE

if grep -q "UYARI" $REPORT_FILE; then
    mail -s "Disk Kota Uyarisi" $ADMIN_MAIL < $REPORT_FILE
    echo "Uyari maili gonderildi."
else
    echo "Tum kullanicilar normal sinirlar icerisinde."
fi

cat $REPORT_FILE

Scripti çalıştırılabilir yapın ve cron’a ekleyin:

chmod +x /usr/local/bin/quota_monitor.sh
echo "0 9 * * 1-5 /usr/local/bin/quota_monitor.sh" | sudo tee -a /etc/crontab

Sık Yapılan Hatalar

  • fstab düzenlemeden kota etkinleştirmeye çalışmak: En yaygın hatadır. Mount seçenekleri olmadan quotaon çalışmaz.
  • Root partition’a kota uygulamaya çalışmak: Root dosya sistemi üzerinde kota tanımlamak önerilmez, sorunlara yol açabilir.
  • quotacheck’i açık sistemde çalıştırmak: Mümkünse single-user modda veya dosya sistemi unmount edilmişken çalıştırın, yoksa yanlış veriler elde edebilirsiniz.
  • Hard limit’i soft limitten düşük ayarlamak: Mantıksal olarak hard limit her zaman soft limitten yüksek olmalıdır.
  • Grace period’u çok uzun tutmak: 7 günden fazla grace period vermek, soft limitin anlamını ortadan kaldırır.

Sonuç

Disk kotası tanımlamak, çok kullanıcılı Linux sistemlerinde disk yönetiminin temel taşlarından biridir. Kurulumu biraz zahmetli görünse de, bir kez doğru yapılandırıldığında sistemin istikrarını büyük ölçüde artırır. Özellikle hard limit ve soft limit arasındaki farkı kavramak, grace period mantığını anlamak ve düzenli repquota çıktılarını takip etmek, sisteminizi kontrolsüz disk dolmasından koruyacaktır.

Hangi dosya sistemi kullandığınıza bağlı olarak ext4 için geleneksel quota araçlarını, XFS için xfs_quota komutunu tercih etmelisiniz. Her iki yaklaşım da pratikte benzer sonuçlar verir, ancak komut seti ve yapılandırma adımları farklılık gösterir.

Son olarak, kota yönetimini bir kez kurup unutmayın. Düzenli raporlama, uyarı mailleri ve monitoring scriptleri ile proaktif bir yaklaşım benimseyin. Disk dolduğunda panik yapmak yerine, dolmadan önce haberdar olmak her zaman daha iyidir.

Yorum yapın