Çok kullanıcılı bir Linux sisteminde disk alanı yönetimi, sysadmin’in en klasik baş ağrılarından biridir. Bir kullanıcı /home dizinini doldurduğunda tüm sistem etkilenebilir, diğer kullanıcıların işlemleri aksamaya başlar, hatta bazı sistem servisleri log yazamaz hale gelir. İşte tam bu noktada quota sistemi devreye giriyor. Linux’un yerleşik disk kotası mekanizması sayesinde her kullanıcıya ve gruba depolama limiti tanımlayabilir, sisteminizin dengeli çalışmasını garanti altına alabilirsiniz.
Disk Kotası Nedir ve Neden Gereklidir?
Disk kotası, belirli bir dosya sistemi üzerinde kullanıcı veya grup bazında depolama limitlerini zorunlu kılan bir mekanizmadır. Üniversite sunucuları, hosting ortamları, paylaşımlı NFS sistemleri ve kurumsal iş istasyonları gibi birden fazla kullanıcının aynı sistemi paylaştığı her senaryoda kota yönetimi kritik önem taşır.
Somut bir örnek düşünelim: 50 kişilik bir geliştirici ekibiniz var ve hepsi aynı Linux sunucusunda çalışıyor. Birisi makine öğrenmesi modelleri için büyük veri setleri indirmeye başladığında, ya da birinin home dizinine yanlışlıkla büyük dosyalar kopyalandığında, 500 GB’lık /home bölümü saatler içinde dolabilir. Kota olmadan bunu ancak sonradan fark edersiniz.
Quota sisteminin temel kavramları şunlardır:
- Soft Limit: Kullanıcının geçebileceği esnek üst sınır. Aşılması hemen engellenmez, grace period süresince uyarı verilir.
- Hard Limit: Kesinlikle aşılamayan mutlak üst sınır. Bu noktada yeni dosya yazımı engellenir.
- Grace Period: Soft limit aşıldıktan sonra kullanıcıya tanınan süre (varsayılan 7 gün). Bu süre içinde hard limit’e çekilmezse soft limit hard limit gibi davranmaya başlar.
- Inode Kotası: Disk bloğu yerine dosya sayısını sınırlar. Büyük sayıda küçük dosya oluşturan kullanıcılara karşı etkilidir.
Gerekli Paketlerin Kurulumu
Başlamadan önce quota araçlarının sisteminizde kurulu olduğunu doğrulayın.
Debian/Ubuntu tabanlı sistemler için:
sudo apt update
sudo apt install quota quotatool
RHEL/CentOS/AlmaLinux tabanlı sistemler için:
sudo dnf install quota
Kurulumun ardından quota araçlarının kullanılabilir olduğunu kontrol edin:
quota --version
quotacheck --version
Dosya Sistemini Kota Desteğiyle Hazırlamak
Quota’nın çalışabilmesi için ilgili dosya sisteminin mount seçeneklerinde kota desteğinin aktif edilmesi gerekir. /etc/fstab dosyasını düzenleyeceğiz.
Önce mevcut mount noktanızı görmek için kontrol edin:
cat /etc/fstab | grep home
Tipik bir çıktı şöyle görünebilir:
/dev/sdb1 /home ext4 defaults 0 2
Bu satırı kullanıcı ve grup kotası için düzenliyoruz:
sudo nano /etc/fstab
Düzenlenmiş hali şöyle olmalı:
/dev/sdb1 /home ext4 defaults,usrquota,grpquota 0 2
XFS dosya sistemi kullanıyorsanız seçenekler biraz farklıdır:
/dev/sdb1 /home xfs defaults,uquota,gquota 0 2
Önemli not: XFS dosya sistemi kota desteğini kernel düzeyinde farklı işler ve ayrıca quotacheck/quotaon adımlarına ihtiyaç duymaz. Bu yazıda ext4 üzerinde ilerliyoruz, XFS farkları gerektiğinde belirteceğim.
Değişiklikleri uygulamak için dosya sistemini yeniden mount edin:
sudo mount -o remount /home
Mount seçeneklerinin uygulandığını doğrulayın:
mount | grep /home
Çıktıda usrquota,grpquota ibarelerini görmelisiniz.
Kota Veritabanlarını Oluşturmak
ext4 üzerinde kota için önce kota veritabanı dosyalarını oluşturmanız gerekir. quotacheck komutu bu işi yapar:
sudo quotacheck -cugm /home
Kullanılan parametreler:
- -c: Yeni kota dosyası oluştur (create)
- -u: Kullanıcı kotası için tarama yap
- -g: Grup kotası için tarama yap
- -m: Dosya sistemini read-only yapmadan çalıştır (mount edilmiş sistemlerde gerekli)
Bu komut /home dizininde aquota.user ve aquota.group dosyalarını oluşturur:
ls -la /home/aquota*
Şöyle bir çıktı beklenir:
-rw------- 1 root root 8192 Oca 15 14:23 /home/aquota.group
-rw------- 1 root root 8192 Oca 15 14:23 /home/aquota.user
Şimdi kota sistemini aktif edelim:
sudo quotaon -ugv /home
-v parametresi verbose (ayrıntılı) çıktı verir, aktifleştirme sürecini görebilirsiniz.
Kota sisteminin aktif olup olmadığını kontrol etmek için:
sudo quotaon -p /home
Kullanıcıya Kota Tanımlamak
Artık kullanıcılara kota atayabiliriz. edquota komutu varsayılan text editörü açarak kota düzenlememizi sağlar:
sudo edquota -u ahmet
Açılan editörde şuna benzer bir görünüm karşınıza çıkar:
Disk quotas for user ahmet (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
Buradaki alanları dolduralım. Örneğin ahmet kullanıcısına 5 GB soft, 6 GB hard limit ve 10.000 dosya soft, 12.000 dosya hard limit tanımlayalım:
Disk quotas for user ahmet (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 5120000 6144000 0 10000 12000
Blok değerleri kilobayt cinsindendir. 5 GB = 5.242.880 KB olmakla birlikte quota sistemi 1024 blok = 1 MB hesaplar. 5 GB için 5.000.000, 6 GB için 6.000.000 yazabilirsiniz ya da tam değerleri kullanabilirsiniz.
Editörü kaydedip kapatın. Kota hemen aktif olur.
Komut Satırından Direkt Kota Atama
edquota editör yerine doğrudan komut satırından da kota atayabilirsiniz. Bu özellikle betiklerle toplu işlem yaparken kullanışlıdır:
sudo setquota -u ahmet 5000000 6000000 10000 12000 /home
Parametrelerin sırası: kullanıcı adı, block soft, block hard, inode soft, inode hard, dosya sistemi.
Kota tanımını doğrulamak için:
sudo quota -vs ahmet
Çıktı şöyle görünür:
Disk quotas for user ahmet (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 0K 4883M 5722M 0 10000 12000
Grace Period Ayarlamak
Varsayılan grace period 7 gündür. Bunu sisteminizin ihtiyacına göre değiştirebilirsiniz:
sudo edquota -t
Açılan editörde şunu görürsünüz:
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 örneğin 3 güne indirip kaydedebilirsiniz:
/dev/sdb1 3days 3days
Grup grace period için:
sudo edquota -tg
Grup Kotası Tanımlamak
Kullanıcı bazlı kota yanında grup bazlı kota da çok işe yarar. Özellikle proje bazlı disk kullanımını sınırlamak istediğinizde idealdir.
Örneğin developers grubuna 50 GB soft, 60 GB hard limit tanımlayalım:
sudo edquota -g developers
Ya da komut satırından:
sudo setquota -g developers 50000000 60000000 0 0 /home
İkinci örnekte inode limiti 0 bıraktık, bu sınırsız demektir.
Toplu Kota Atama: Şablon Kullanımı
Onlarca kullanıcıya tek tek kota atamak yerine bir kullanıcıyı şablon olarak kullanabilirsiniz. Önce bir kullanıcı için kota tanımlayın, ardından diğerlerine kopyalayın:
# Önce şablon kullanıcı olarak "template_user"a kota tanımla
sudo setquota -u template_user 5000000 6000000 10000 12000 /home
# Diğer kullanıcılara bu kota şablonunu uygula
sudo edquota -p template_user ali veli ayse mehmet zeynep
Bu yöntem özellikle toplu kullanıcı oluşturma betiklerinde çok işe yarar.
Daha ileri gidip tüm mevcut kullanıcılara toplu uygulama yapmak isterseniz:
#!/bin/bash
# /home dizinindeki tüm kullanıcılara şablon kotasını uygula
for user in $(ls /home); do
if id "$user" &>/dev/null; then
sudo edquota -p template_user "$user"
echo "Kota uygulandı: $user"
fi
done
Kota Durumunu İzlemek
Tek Kullanıcı Kontrolü
# Belirli bir kullanıcının kotasını görüntüle
sudo quota -vs ahmet
# Kullanıcının kendisi kendi kotasını görebilir
quota -s
Tüm Sistemin Kota Raporu
sudo repquota -as /home
Bu komut tüm kullanıcılar için detaylı kota raporu üretir. Çıktı şöyle görünür:
*** Report for user quotas on device /dev/sdb1
Block grace time: 3days; Inode grace time: 3days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 2 0 0
ahmet -- 512000 5000000 6000000 234 10000 12000
ali -- 234500 5000000 6000000 89 10000 12000
veli -+ 5100000 5000000 6000000 2days 567 10000 12000
Burada -- normal durumu, -+ soft limit’in aşıldığını gösterir.
Otomatik Raporlama Scripti
Günlük kota raporu için cron job oluşturabilirsiniz:
# /usr/local/bin/quota-report.sh
#!/bin/bash
ADMIN_EMAIL="[email protected]"
HOSTNAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M')
REPORT=$(sudo repquota -as /home)
# Limit aşımı var mı kontrol et
if echo "$REPORT" | grep -q "-+"; then
echo "UYARI: $HOSTNAME sisteminde kota aşımı tespit edildi ($DATE)" |
mail -s "[$HOSTNAME] Disk Kota Uyarısı" "$ADMIN_EMAIL" <<< "$REPORT"
fi
Bu scripti cron’a ekleyin:
sudo crontab -e
# Şu satırı ekleyin:
0 8 * * * /usr/local/bin/quota-report.sh
Kullanıcıya Kota Uyarısı Göndermek
warnquota komutu, kotasını aşan ya da sınıra yaklaşan kullanıcılara otomatik e-posta uyarısı gönderir:
sudo warnquota -u /home
warnquota konfigürasyon dosyası /etc/warnquota.conf üzerinden özelleştirilebilir. Uyarı mesajının içeriğini Türkçe yazmak için:
sudo nano /etc/warnquota.conf
İlgili kısmı şöyle düzenleyebilirsiniz:
MESSAGE = nMerhaba,nnDisk kota limitinizi aşıyorsunuz veya limitinize yaklaştınız.nLütfen gereksiz dosyalarınızı temizleyin.nnSistem Yöneticisin
SUBJECT = Disk Kota Uyarısı - %s Kullanıcısı
warnquota’yı da cron’a ekleyip günlük çalıştırabilirsiniz.
Kotayı Devre Dışı Bırakmak ve Kaldırmak
Geçici olarak kota sistemini durdurmak için:
sudo quotaoff -ugv /home
Belirli bir kullanıcının kotasını sıfırlamak (limitleri kaldırmak) için:
sudo setquota -u ahmet 0 0 0 0 /home
Tüm kota altyapısını tamamen kaldırmak istiyorsanız:
# Önce quota'yı kapat
sudo quotaoff -ugv /home
# fstab'dan kota seçeneklerini kaldır
sudo nano /etc/fstab
# usrquota ve grpquota seçeneklerini sil
# Dosya sistemini yeniden mount et
sudo mount -o remount /home
# Kota veritabanı dosyalarını sil
sudo rm /home/aquota.user /home/aquota.group
XFS Dosya Sisteminde Quota
XFS kullanıyorsanız süreç biraz farklıdır ve bazı adımları atlar. XFS quota bilgilerini dosya sistemi içinde metadata olarak saklar, ayrı dosyalar gerektirmez.
fstab’da uquota,gquota veya usrquota,grpquota seçeneklerini ekleyip mount ettikten sonra doğrudan xfs_quota komutu ile çalışırsınız:
# XFS kota durumunu kontrol et
sudo xfs_quota -x -c 'state' /home
# Kullanıcı limiti tanımla
sudo xfs_quota -x -c 'limit -u bsoft=5g bhard=6g isoft=10000 ihard=12000 ahmet' /home
# Tüm kullanıcıların raporunu al
sudo xfs_quota -x -c 'report -ubih' /home
XFS’te quotacheck veya quotaon komutlarına gerek yoktur, bu açıdan daha temiz bir deneyim sunar.
Gerçek Dünya Senaryosu: Hosting Ortamı
Diyelim ki küçük ölçekli bir web hosting sunucusu yönetiyorsunuz. Her müşteriye farklı planlarda farklı disk alanı satıyorsunuz. Bu yapıyı otomatize etmek için şöyle bir betik yazabilirsiniz:
#!/bin/bash
# Yeni hosting hesabı oluştur ve kota ata
# Kullanım: ./create_hosting.sh kullanici_adi plan (basic|pro|enterprise)
USERNAME=$1
PLAN=$2
if [ -z "$USERNAME" ] || [ -z "$PLAN" ]; then
echo "Kullanim: $0 kullanici_adi plan"
exit 1
fi
# Plan bazlı limitler (KB cinsinden)
case $PLAN in
basic)
SOFT=5000000 # ~5 GB
HARD=5500000 # ~5.5 GB
ISOFT=50000
IHARD=55000
;;
pro)
SOFT=20000000 # ~20 GB
HARD=22000000 # ~22 GB
ISOFT=200000
IHARD=220000
;;
enterprise)
SOFT=100000000 # ~100 GB
HARD=110000000 # ~110 GB
ISOFT=0
IHARD=0
;;
*)
echo "Gecersiz plan: $PLAN"
exit 1
;;
esac
# Kullaniciyi oluştur
sudo useradd -m -d /home/$USERNAME -s /bin/bash $USERNAME
# Kota ata
sudo setquota -u $USERNAME $SOFT $HARD $ISOFT $IHARD /home
echo "Kullanici $USERNAME olusturuldu. Plan: $PLAN"
echo "Disk limiti: Soft=$(($SOFT/1000))MB Hard=$(($HARD/1000))MB"
sudo quota -vs $USERNAME
Bu betik sayesinde yeni müşteri eklemek tek komuta indirgeniyor.
Sık Karşılaşılan Sorunlar ve Çözümleri
Quota bilgileri güncel değil:
quotacheck komutunu manuel çalıştırarak veritabanını yeniden tarayabilirsiniz. Bunu yapmadan önce quotaoff ile sistemi durdurun:
sudo quotaoff /home
sudo quotacheck -ugm /home
sudo quotaon /home
edquota değişiklikleri kaybolmuş görünüyor:
Bu genellikle kota veritabanı dosyalarının izin sorunlarından kaynaklanır. Kontrol edin:
ls -la /home/aquota.*
# Her ikisi de root'a ait ve 600 izinli olmalı
sudo chmod 600 /home/aquota.*
Sistem açılışında quota otomatik aktif olmuyor:
/etc/fstab değişikliklerinin doğru uygulandığını ve systemd servisinin çalıştığını kontrol edin:
sudo systemctl status quota
sudo systemctl enable quota
Bazı dağıtımlarda bu servis bulunmaz ve quotaon komutunu rc.local ya da bir systemd unit dosyasıyla başlangıca eklemeniz gerekebilir.
Sonuç
Disk kotası yönetimi, görünürde basit bir araç gibi görünse de doğru konfigüre edildiğinde sistemin uzun vadeli stabilitesini ciddi ölçüde artırır. Kullanıcıların birbirini ezmesini önler, sistem diskinin dolmasından kaynaklanan kritik servis kesintilerini engeller ve kaynak kullanımını şeffaf hale getirir.
Pratikte en çok işe yarayan yaklaşım şudur: önce inode limitleri olmadan yalnızca blok limitleriyle başlayın, bir süre repquota raporlarıyla gerçek kullanım alışkanlıklarını izleyin, ardından inode limitlerini de ekleyin. Bunun yanı sıra soft/hard limit arasındaki farkı %10-20 düzeyinde tutmak makul bir esneklik sağlar.
XFS üzerindeyseniz xfs_quota‘nın sunduğu proje kotası özelliğini de araştırmanızı öneririm. Dizin bazlı kota tanımlamak, özellikle /var/www altındaki farklı projeleri sınırlamak için kullanıcı kotasından çok daha temiz bir çözüm sunar. Her araç gibi quota da doğru yerde kullanıldığında hayatı kolaylaştırır.