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.