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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir