Zimbra’da Posta Kutusu Kotası ve Depolama Yönetimi
Zimbra’yı yönetiyorsanız, er ya da geç kota ve depolama meselesiyle ciddi şekilde yüzleşmek zorunda kalırsınız. “Neden disk doldu?”, “Kimin posta kutusu şişmiş?”, “Bu kullanıcı neden mail alamıyor?” sorularıyla uğraşmak günlük rutinin parçası haline gelir. Bu yazıda, Zimbra’da kota yönetimini gerçekten işe yarar şekilde nasıl yapacağınızı, hangi araçları kullanacağınızı ve kritik senaryolarda nasıl davranacağınızı konuşacağız.
Zimbra’da Kota Mantığını Anlamak
Zimbra’da kota sistemi iki katmanlı çalışır: kullanıcı bazlı kota ve sunucu genelindeki depolama yönetimi. Kullanıcıya atanan kota, o kullanıcının posta kutusunun alabileceği maksimum boyutu ifade eder. Ancak burada dikkat edilmesi gereken ince bir nokta var: Zimbra’nın kota hesaplaması, sadece gelen kutusunu değil, tüm klasörleri, taslakları, gönderilen öğeleri, çöp kutusunu ve Junk klasörünü de kapsar.
Yani bir kullanıcının 1 GB kotası varsa ve çöp kutusunda 800 MB veri birikmişse, o kullanıcı aslında kotasının büyük çoğunluğunu dolduruş demektir. Bu durumu fark etmeden “kullanıcı neden mail alamıyor” diye saatlerce uğraşan sysadminleri bizzat gördüm.
Zimbra, kota dolduğunda kullanıcıya mail alamaz duruma getirir ama mail gönderme işlemi varsayılan olarak devam eder. Bu davranışı değiştirmek için ayrıca yapılandırma yapmanız gerekir.
Mevcut Kota Durumunu Görüntüleme
İlk adım, mevcut durumu anlamaktır. Aşağıdaki komutları zmprov ile çalıştırmak için zimbra kullanıcısına geçmeniz gerekir.
su - zimbra
Tek bir kullanıcının kota bilgisini görmek için:
zmprov ga [email protected] zimbraMailQuota
Bu komut size o kullanıcıya atanmış kotayı byte cinsinden döndürür. 0 değeri, kota sınırı olmadığı anlamına gelir, sınırsız kota verilmiş demektir.
Tüm kullanıcıların kota ve kullanım bilgisini toplu görmek istiyorsanız daha güçlü bir araç olan zmprov ile birlikte getAllAccounts kullanabilirsiniz:
zmprov -l gqu domain.com
Bu komut çıktısında her satır için şu format gelir: kullanıcı adı, kullanılan alan (byte), kota (byte). Çıktıyı daha okunabilir hale getirmek için biraz bash işi yapmak gerekir:
zmprov -l gqu domain.com | awk '{printf "%-40s Kullanilan: %10.2f MB Kota: %10.2f MBn", $1, $2/1024/1024, $3/1024/1024}'
Bu çıktıyı büyükten küçüğe sıralamak da oldukça işe yarar. Özellikle “kim en çok yer kaplıyor” sorusuna hızlıca cevap vermek istediğinizde:
zmprov -l gqu domain.com | sort -k2 -rn | head -20
Kullanıcıya Kota Atama ve Güncelleme
Tek bir kullanıcıya kota atamak zmprov ile son derece basittir. Boyutu byte cinsinden vermeniz gerekir:
# 2 GB kota atama (2147483648 byte)
zmprov ma [email protected] zimbraMailQuota 2147483648
# 5 GB kota atama
zmprov ma [email protected] zimbraMailQuota 5368709120
# Kotayı kaldırma (sınırsız)
zmprov ma [email protected] zimbraMailQuota 0
Byte hesaplamalarıyla uğraşmamak için bir yardımcı fonksiyon yazabilirsiniz:
# GB'yi byte'a çevirme fonksiyonu
gb_to_bytes() {
echo $(( $1 * 1024 * 1024 * 1024 ))
}
# Kullanımı
zmprov ma [email protected] zimbraMailQuota $(gb_to_bytes 3)
Toplu kota atama senaryolarında, örneğin bir departmanın tüm kullanıcılarına aynı anda kota belirlemek istediğinizde, şöyle bir script işinizi görür:
#!/bin/bash
# Bir dosyadaki kullanıcı listesine kota atama
# kullanicilar.txt dosyasinda her satira bir email adresi
KOTA_BYTE=2147483648 # 2 GB
KULLANICI_DOSYA="/tmp/kullanicilar.txt"
while IFS= read -r kullanici; do
if [ -n "$kullanici" ]; then
echo "Kota ataniyor: $kullanici"
zmprov ma "$kullanici" zimbraMailQuota "$KOTA_BYTE"
if [ $? -eq 0 ]; then
echo " Basarili: $kullanici -> 2GB"
else
echo " HATA: $kullanici icin kota atanamadi"
fi
fi
done < "$KULLANICI_DOSYA"
Sınıf (COS) Üzerinden Kota Yönetimi
Zimbra’nın en güçlü kota yönetim mekanizmalarından biri Class of Service (COS) sistemidir. Her kullanıcıyı tek tek yönetmek yerine, kullanıcıları belirli sınıflara atarsınız ve o sınıfın ayarları otomatik olarak uygulanır.
Örneğin şirketinizde “standart çalışan” için 2 GB, “yönetici” için 10 GB, “arşiv hesabı” için 50 GB kotası olan üç farklı COS oluşturabilirsiniz.
# Mevcut COS'ları listeleme
zmprov gac
# Yeni COS oluşturma
zmprov cc "Standart_Calisan" zimbraMailQuota 2147483648
# COS'u bir kullanıcıya atama
# Önce COS ID'sini öğrenin
zmprov gc "Standart_Calisan" | grep zimbraId
# Sonra kullanıcıya atayın
zmprov ma [email protected] zimbraCOSId <cos-id-buraya>
COS kullanmanın bir başka avantajı, kota dışındaki onlarca ayarı (ek boyutu limiti, oturum süresi, özellik erişimleri vb.) merkezi olarak yönetebilmenizdir. Bir COS’u değiştirdiğinizde, o sınıfa dahil tüm kullanıcılar otomatik olarak güncellenir.
Kota Uyarı Mekanizmaları
Kullanıcıların kotaları dolmadan önce uyarılması, sysadminlerin hayatını kolaylaştırır. Zimbra’da iki aşamalı uyarı mekanizması vardır:
zimbraQuotaWarnPercent: Bu eşiği geçince kullanıcıya uyarı maili gönderilir. Varsayılan değer %90’dır.
zimbraQuotaWarnInterval: Uyarı maillerinin ne sıklıkta gönderileceğini belirler. Varsayılan 1 gündür.
# Uyarı eşiğini %80'e çekme (COS üzerinden)
zmprov mc "Standart_Calisan" zimbraQuotaWarnPercent 80
# Uyarı interval'ini 7 güne çıkarma
zmprov mc "Standart_Calisan" zimbraQuotaWarnInterval 7d
# Tek kullanıcı için ayarlama
zmprov ma [email protected] zimbraQuotaWarnPercent 75
Uyarı maillerini tetiklemek için Zimbra’nın zmquotawarn komutunu cron’a ekleyebilirsiniz:
# Zimbra kullanıcısının crontab'ına ekleyin
crontab -e -u zimbra
# Her gün sabah 8'de çalıştır
0 8 * * * /opt/zimbra/bin/zmquotawarn
Kotayı Aşan Kullanıcıları Tespit Etme
Günlük operasyonlarda en sık ihtiyaç duyulan şeylerden biri, kotasını aşmış veya kotasının %X’ini doldurmuş kullanıcıları hızlıca listelemektir.
#!/bin/bash
# Kota doluluk oranını hesaplayarak uyarı veren script
# zimbra kullanıcısı olarak çalıştırın
ESIK=80 # Yüzde cinsinden uyarı eşiği
DOMAIN="domain.com"
echo "=== Kota Kullanim Raporu - $(date '+%Y-%m-%d %H:%M') ==="
echo "Esik: %$ESIK ve uzeri kullanicilar gosteriliyor"
echo ""
zmprov -l gqu $DOMAIN | while read email kullanilan kota; do
# Kota 0 ise sınırsız, atla
if [ "$kota" -eq 0 ] 2>/dev/null; then
continue
fi
if [ "$kota" -gt 0 ] && [ "$kullanilan" -gt 0 ]; then
oran=$(echo "scale=2; $kullanilan * 100 / $kota" | bc)
oran_int=$(echo "$oran" | cut -d. -f1)
if [ "$oran_int" -ge "$ESIK" ]; then
kullanilan_mb=$(echo "scale=1; $kullanilan / 1048576" | bc)
kota_mb=$(echo "scale=1; $kota / 1048576" | bc)
echo "[$oran%] $email - ${kullanilan_mb}MB / ${kota_mb}MB"
fi
fi
done | sort -rn
Bu scripti günlük çalıştırıp çıktısını mail olarak alabilirsiniz. Özellikle 50+ kullanıcılı ortamlarda bu tür proaktif izleme, problemlerin büyümeden önlenmesini sağlar.
Depolama Konumlarını Anlama ve Yönetme
Zimbra’da posta kutuları varsayılan olarak /opt/zimbra/store altında tutulur. Her hesabın kendine ait bir dizini vardır ve bu dizinlerin büyümesini takip etmek, disk yönetiminin temelini oluşturur.
# Zimbra store dizininin toplam boyutunu görme
du -sh /opt/zimbra/store/
# En çok yer kaplayan posta kutularını bulma
du -s /opt/zimbra/store/0/* | sort -rn | head -20 |
awk '{print $1/1024/1024 " MB -> " $2}'
Posta kutusu dizin adı ile kullanıcı adı arasındaki eşleşmeyi bulmak için mailboxd loglarından veya doğrudan veritabanından yararlanabilirsiniz. Ancak daha pratik yol şudur:
# Belirli bir kullanıcının posta kutusunu bulma
zmprov ga [email protected] zimbraMailHost zimbraId
Dönen zimbraId değeri, o kullanıcının store dizinindeki klasör adıyla bire bir eşleşmez ama mailbox ID üzerinden eşleştirebilirsiniz. Gerçek dünyada bu detaydan çok, zmprov gqu çıktısıyla çalışmak daha verimlidir.
Çöp Kutusu ve Junk Klasörü Temizliği
Kullanıcıların kota sorunlarının büyük bir kısmı, boşaltılmamış çöp kutularından kaynaklanır. Zimbra’da çöp kutusu ve junk klasörlerinin otomatik temizlenmesi için aşağıdaki ayarlar kullanılır:
# Çöp kutusundaki öğelerin kaç gün sonra silineceğini ayarlama
# COS üzerinden (30 gün)
zmprov mc "Standart_Calisan" zimbraMailTrashLifetime 30d
# Junk klasörü için (15 gün)
zmprov mc "Standart_Calisan" zimbraMailSpamLifetime 15d
# Tüm domain için varsayılanı değiştirme
zmprov md domain.com zimbraMailTrashLifetime 30d
Belirli bir kullanıcının çöp kutusunu manuel olarak temizlemek için:
# Zimbra CLI üzerinden posta kutusu temizliği
zmprov -z -m [email protected] emptyDumpster
# Tüm domain kullanıcılarının dumpster'ını temizleme (dikkatli kullanın!)
for user in $(zmprov -l gaa domain.com); do
echo "Temizleniyor: $user"
zmprov -z -m "$user" emptyDumpster 2>/dev/null
done
HSM ve Mesaj Arşivleme Stratejileri
Büyük Zimbra kurulumlarında, eski mesajları daha ucuz depolama ortamına taşımak (Hierarchical Storage Management) önemli bir tasarruf sağlar. Zimbra OSE’de (açık kaynak sürüm) native HSM desteği sınırlı olsa da, bazı yaklaşımlarla benzer sonuçlar elde edilebilir.
Belirli bir tarihten eski mesajları tespit etmek ve raporlamak için:
#!/bin/bash
# 1 yıldan eski mesajları olan kullanıcıları raporlama
# Bu script, hangi kullanıcıların arşivlenebilecek eski mesajları olduğunu gösterir
DOMAIN="domain.com"
BIR_YIL_ONCE=$(date -d "1 year ago" '+%m/%d/%Y')
echo "Arşivleme Adayı Kullanicilar - $(date '+%Y-%m-%d')"
echo "Kriter: $BIR_YIL_ONCE tarihinden eski mesajlar iceren hesaplar"
echo "---"
for user in $(zmprov -l gaa $DOMAIN 2>/dev/null); do
# Her kullanıcı için posta kutusu boyutunu kontrol et
boyut=$(zmprov ga "$user" zimbraMailboxQuotaUsed 2>/dev/null | grep zimbraMailboxQuotaUsed | awk '{print $2}')
if [ -n "$boyut" ] && [ "$boyut" -gt 524288000 ]; then # 500MB üzeri
boyut_gb=$(echo "scale=2; $boyut / 1073741824" | bc)
echo "$user : ${boyut_gb} GB"
fi
done
Zimbra’da Disk Dolunca Ne Olur ve Kriz Anında Ne Yapmalı
Bu konuyu atlamak olmaz, çünkü gerçek acil durumlar her ortamda yaşanır. Disk dolduğunda Zimbra’nın davranışı şöyledir: Yeni mail kabul edilemez, LMTP hataları üretilir, kullanıcılar “452 insufficient system storage” gibi hatalar alır.
Kriz anında yapılacak ilk şey, hızlıca alan açmaktır:
# Zimbra log dosyalarının boyutunu kontrol et
du -sh /opt/zimbra/log/
ls -lhS /opt/zimbra/log/
# Eski log dosyalarını temizle (zimbra logrotate yapıyor ama manuel müdahale gerekebilir)
find /opt/zimbra/log/ -name "*.log.*" -mtime +7 -delete
# tmp dizinini kontrol et
du -sh /opt/zimbra/data/tmp/
find /opt/zimbra/data/tmp/ -mtime +1 -delete 2>/dev/null
# Backup dizinini kontrol et
du -sh /opt/zimbra/backup/
Geçici alan açtıktan sonra servisleri yeniden başlatın ve kalıcı çözümü planlayın:
zmcontrol restart
Düzenli Bakım için Otomasyon
Sürdürülebilir Zimbra yönetimi için bazı bakım görevlerini otomatize etmek şart. İşte haftalık çalıştırabileceğiniz kapsamlı bir bakım scripti:
#!/bin/bash
# Zimbra Haftalık Depolama Bakim Scripti
# /etc/cron.weekly/zimbra-storage-maintenance olarak kaydedin
# chmod +x yapmayi unutmayin
LOG_DOSYA="/var/log/zimbra-storage-maintenance.log"
DOMAIN="domain.com"
RAPOR_EMAIL="[email protected]"
TARIH=$(date '+%Y-%m-%d %H:%M:%S')
log() {
echo "[$TARIH] $1" | tee -a "$LOG_DOSYA"
}
log "=== Zimbra Depolama Bakimi Basliyor ==="
# Zimbra servisi çalışıyor mu kontrol et
su - zimbra -c "zmcontrol status" | grep -q "Running" || {
log "HATA: Zimbra servisleri calismiyor!"
exit 1
}
# Disk kullanim durumunu kaydet
log "Disk durumu:"
df -h /opt/zimbra | tee -a "$LOG_DOSYA"
# Kotası dolu kullanıcıları tespit et
log "Kota %90 ve uzeri kullanicilar:"
su - zimbra -c "zmprov -l gqu $DOMAIN" | while read email kullanilan kota; do
if [ "$kota" -gt 0 ] && [ "$kullanilan" -gt 0 ]; then
oran=$(( kullanilan * 100 / kota ))
if [ "$oran" -ge 90 ]; then
log " UYARI: $email - %$oran dolu"
fi
fi
done
# Zimbra index bakımı
log "Index bakimi yapiliyor..."
su - zimbra -c "zmdbintegrityreport -r" >> "$LOG_DOSYA" 2>&1
log "=== Bakım Tamamlandi ==="
# Raporu mail olarak gönder
if [ -n "$RAPOR_EMAIL" ]; then
mail -s "Zimbra Haftalik Depolama Raporu - $(date '+%Y-%m-%d')"
"$RAPOR_EMAIL" < "$LOG_DOSYA"
fi
Sonuç
Zimbra’da kota ve depolama yönetimi, düzgün bir strateji olmadan kaotik bir hal alabilir. Ancak yukarıda anlattığımız yaklaşımları sistematik biçimde uygularsanız, işler çok daha kontrollü yürür.
En kritik üç nokta şunlardır: COS tabanlı kota yönetimi ile tekrarlayan işleri azaltın, proaktif izleme scriptleri ile sorunları önceden görün ve otomatik temizlik mekanizmaları ile gereksiz depolama büyümesini önleyin.
Bir de şunu söyleyelim: Kullanıcılarla iletişimi küçümsemeyin. Kota dolmadan önce gönderilen uyarı maili, hem kullanıcının kendi mailini temizlemesine fırsat verir hem de “neden mail alamıyorum” telefon trafiğini önemli ölçüde azaltır. Teknik çözümler kadar bu basit iletişim mekanizması da işe yarar.
Zimbra’nın zmprov aracı, göründüğünden çok daha güçlüdür. Kota yönetiminin ötesinde, hesap özellikleri, güvenlik politikaları ve domain ayarları için de merkezi bir kontrol noktası işlevi görür. Bu aracı iyi öğrenmek, Zimbra yönetiminde size ciddi bir verimlilik kazandırır.
