Rclone Mount ile Bulut Depolamayı Disk Olarak Bağlama

Bulut depolama alanlarını doğrudan bir disk gibi bağlamak, özellikle yedekleme ve felaket kurtarma senaryolarında hayat kurtarıcı bir özellik. Rclone’un mount komutu sayesinde S3, Google Drive, Backblaze B2, OneDrive ve daha onlarca bulut sağlayıcısını sanki yerel bir dizinmiş gibi kullanabiliyorsunuz. Bu yazıda rclone mount’ı derinlemesine inceleyeceğiz, production ortamlarında karşılaşılan tuzaklardan bahsedeceğiz ve gerçek dünya senaryolarında nasıl kullanacağınızı göstereceğiz.

Rclone Mount Nedir ve Ne İşe Yarar?

Rclone, FUSE (Filesystem in Userspace) teknolojisini kullanarak bulut depolama alanlarını Linux/macOS’ta yerel bir dosya sistemi olarak bağlar. Windows’ta ise WinFsp veya Dokany driver’ı kullanır. Temel mantık şu: rclone bir aracı katman oluşturur, yazdığınız veya okuduğunuz her dosya istei bu katman üzerinden bulut API’sine iletilir.

Yedekleme senaryolarında bu özelliğin gücü şuradan geliyor: Rsync, tar, cp gibi klasik araçlarınız bulut depolama hakkında hiçbir şey bilmek zorunda kalmıyor. Onlar sadece bir dizine yazıyor, rclone gerisini hallediyor.

Kurulum ve Ön Gereksinimler

Linux’ta Kurulum

# Resmi kurulum scripti ile
curl https://rclone.org/install.sh | sudo bash

# Veya paket yöneticisi ile (Ubuntu/Debian)
sudo apt-get install rclone

# FUSE kurulumu (mount için zorunlu)
sudo apt-get install fuse3

# fuse.conf ayarı - diğer kullanıcıların mount'a erişmesi için
echo "user_allow_other" | sudo tee -a /etc/fuse.conf

Remote Yapılandırması

Bir S3 uyumlu depolama alanı yapılandıralım. Backblaze B2 örneği üzerinden gidiyoruz çünkü hem uygun fiyatlı hem de yaygın kullanılıyor:

rclone config

# Interaktif yapılandırma sırasında:
# n (new remote)
# İsim: backblaze-backup
# Storage tipi: b2 (Backblaze B2)
# account: xxxxxxxxxxxx (Account ID)
# key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (Application Key)
# Diğer seçenekleri default bırakın

Yapılandırmayı test etmek için:

rclone lsd backblaze-backup:
rclone ls backblaze-backup:yedek-bucket

Temel Mount Kullanımı

İlk Mount Deneyin

# Mount noktası oluştur
mkdir -p /mnt/bulut-yedek

# Basit mount
rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek

# Arka planda çalıştırmak için
rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek --daemon

# Mount'u test et
ls -la /mnt/bulut-yedek
df -h /mnt/bulut-yedek

Bu kadar. Artık /mnt/bulut-yedek dizinine yazdığınız her şey Backblaze B2’ye gidiyor. Ama işin içine girdiğinizde, varsayılan ayarlarla production’da ciddi sorunlar yaşayabilirsiniz.

Kritik Mount Parametreleri

–vfs-cache-mode: En önemli parametre bu. VFS (Virtual File System) önbellek modunu belirler.

  • off: Önbellek yok, doğrudan akış. Sadece sequential okuma için uygun.
  • minimal: Sadece açık dosyaları önbellekler.
  • writes: Yazma işlemlerini önbellekler, okuma önbelleği yok.
  • full: Hem okuma hem yazma önbelleklenir. Production için önerilen.

–vfs-cache-max-size: Önbellek için kullanılacak maksimum disk alanı. Örneğin --vfs-cache-max-size 10G

–vfs-cache-max-age: Önbellekteki dosyaların maksimum yaşı. --vfs-cache-max-age 24h

–transfers: Eş zamanlı transfer sayısı. Default 4, network durumuna göre artırılabilir.

–buffer-size: Okuma tamponu boyutu. --buffer-size 256M ile büyük dosyaları daha hızlı okuyabilirsiniz.

–allow-other: Diğer kullanıcıların ve süreçlerin mount’a erişmesine izin verir. Servis hesaplarıyla çalışırken zorunlu.

–dir-cache-time: Dizin listesinin önbellekte tutulma süresi. --dir-cache-time 5m

–poll-interval: Uzak değişikliklerin ne sıklıkta kontrol edileceği. 0 ile devre dışı bırakılabilir.

Production İçin Optimize Edilmiş Mount Komutu

Aşağıdaki komut gerçek bir production ortamında kullandığım, ayarlanmış bir yapılandırmadır:

rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek 
  --vfs-cache-mode full 
  --vfs-cache-max-size 20G 
  --vfs-cache-max-age 24h 
  --vfs-read-chunk-size 128M 
  --vfs-read-chunk-size-limit 2G 
  --buffer-size 256M 
  --transfers 8 
  --checkers 16 
  --dir-cache-time 10m 
  --poll-interval 0 
  --allow-other 
  --log-level INFO 
  --log-file /var/log/rclone-mount.log 
  --daemon 
  --daemon-wait 60

--daemon-wait 60 parametresi önemli: rclone’un mount hazır olana kadar 60 saniye beklemesini sağlar. Bu özellikle systemd servislerinde boot sırasında yarış koşullarını önler.

Systemd Servis Olarak Yapılandırma

Canlı sistemlerde mount’ın her yeniden başlatmada otomatik devreye girmesi gerekir. Bunun için systemd servis dosyası oluşturuyoruz:

# /etc/systemd/system/rclone-mount.service

[Unit]
Description=Rclone Mount - Backblaze Backup
After=network-online.target
Wants=network-online.target
AssertPathIsDirectory=/mnt/bulut-yedek

[Service]
Type=notify
ExecStart=/usr/bin/rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek 
  --vfs-cache-mode full 
  --vfs-cache-max-size 20G 
  --vfs-cache-max-age 24h 
  --vfs-read-chunk-size 128M 
  --buffer-size 256M 
  --transfers 8 
  --dir-cache-time 10m 
  --poll-interval 0 
  --allow-other 
  --log-level INFO 
  --log-file /var/log/rclone-mount.log
ExecStop=/bin/fusermount3 -u /mnt/bulut-yedek
Restart=on-failure
RestartSec=10
User=root
Group=root

[Install]
WantedBy=multi-user.target

Servisi aktifleştirip başlatmak için:

sudo systemctl daemon-reload
sudo systemctl enable rclone-mount.service
sudo systemctl start rclone-mount.service
sudo systemctl status rclone-mount.service

Servisin durumunu ve logları takip etmek:

journalctl -u rclone-mount.service -f
tail -f /var/log/rclone-mount.log

Gerçek Dünya Senaryosu: PostgreSQL Yedeklerini Buluta Göndermek

Diyelim ki bir e-ticaret platformunuz var, günlük PostgreSQL dump’larınızı Backblaze B2’ye atmak istiyorsunuz. Rclone mount sayesinde standart pg_dump komutunuzu hiç değiştirmeden buluta yazabilirsiniz:

#!/bin/bash
# /usr/local/bin/pg-backup-bulut.sh

TARIH=$(date +%Y%m%d_%H%M%S)
MOUNT_NOKTASI="/mnt/bulut-yedek"
YEDEK_DIZIN="${MOUNT_NOKTASI}/postgresql/${TARIH}"
DB_ADI="eticaret_db"
BEKLETME_GUN=30

# Mount'un aktif olduğunu kontrol et
if ! mountpoint -q "${MOUNT_NOKTASI}"; then
    echo "HATA: ${MOUNT_NOKTASI} bağlı değil!" >&2
    exit 1
fi

# Yedek dizini oluştur
mkdir -p "${YEDEK_DIZIN}"

# PostgreSQL dump al
echo "[$(date)] Yedek başlıyor: ${DB_ADI}"
pg_dump -U postgres -Fc "${DB_ADI}" | gzip > "${YEDEK_DIZIN}/${DB_ADI}.dump.gz"

if [ $? -eq 0 ]; then
    echo "[$(date)] Yedek başarıyla tamamlandı: ${YEDEK_DIZIN}"
else
    echo "[$(date)] HATA: Yedek alınamadı!" >&2
    exit 1
fi

# Eski yedekleri temizle (30 günden eski)
find "${MOUNT_NOKTASI}/postgresql" -maxdepth 1 -type d -mtime +${BEKLETME_GUN} -exec rm -rf {} ;
echo "[$(date)] Eski yedekler temizlendi."

Bu script cron’a eklendiğinde yedekler doğrudan buluta yazılıyor:

# Crontab
0 2 * * * /usr/local/bin/pg-backup-bulut.sh >> /var/log/pg-backup.log 2>&1

Gerçek Dünya Senaryosu: Web Sitesi Dosyalarını Senkronize Etmek

Çok sunuculu bir yapıda medya dosyalarınızı (resimler, videolar) merkezi bir bulut depolama alanında tutmak isteyebilirsiniz. Her web sunucusu aynı bucket’ı mount eder ve dosyalar paylaşılır:

# /etc/systemd/system/web-medya-mount.service için ExecStart kısmı
/usr/bin/rclone mount s3-depolama:medya-bucket /var/www/html/uploads 
  --vfs-cache-mode full 
  --vfs-cache-max-size 50G 
  --vfs-cache-max-age 1h 
  --read-only 
  --allow-other 
  --uid 33 
  --gid 33

--read-only flag’i burada önemli. Upload işlemi için ayrı bir mekanizma (doğrudan API çağrısı veya rclone copy) kullanıyorsanız, mount’u salt okunur bağlamak hem performansı artırır hem de yanlışlıkla silme riskini ortadan kaldırır.

Performans Sorunları ve Çözümleri

Mount’u kurduktan sonra “neden bu kadar yavaş?” sorusuyla karşılaşmak çok yaygın. Sorunun kaynağını bulmak için:

# Mount üzerinde gerçek zamanlı istatistikleri görmek
rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek 
  --vfs-cache-mode full 
  --stats 30s 
  --stats-log-level NOTICE 
  --log-level NOTICE

# Ayrı bir terminalde bant genişliği kullanımını izle
watch -n 2 'cat /proc/net/dev | grep eth0'

Küçük dosya sorunu: Binlerce küçük dosya yazıyorsanız, her dosya için ayrı bir API çağrısı yapılır ve bu inanılmaz derecede yavaşlar. Çözüm: Dosyaları tar ile paketleyip tek bir büyük dosya olarak yazın.

Çok fazla API çağrısı: Rate limiting ile karşılaşabilirsiniz. --tpslimit parametresi ile saniyedeki işlem sayısını sınırlayın:

rclone mount backblaze-backup:yedek-bucket /mnt/bulut-yedek 
  --vfs-cache-mode full 
  --tpslimit 10 
  --tpslimit-burst 20

Önbellek dolması: VFS önbelleği dolunca rclone otomatik temizlik yapar ama bu anlık yavaşlamalara neden olabilir. Önbellek kullanımını izlemek için:

# Önbellek dizinini kontrol et
du -sh ~/.cache/rclone/vfs/
ls -la ~/.cache/rclone/vfs/

Mount’u Unmount Etmek

Sistemi kapatmadan veya disk değişikliği yapmadan önce mount’u düzgün kapatmak önemli:

# Normal unmount
fusermount3 -u /mnt/bulut-yedek

# Systemd servisi varsa
sudo systemctl stop rclone-mount.service

# Lazy unmount (süreç kullanıyorsa bile bekle)
fusermount3 -uz /mnt/bulut-yedek

# Mount noktasının meşgul olup olmadığını kontrol et
fuser -m /mnt/bulut-yedek
lsof +D /mnt/bulut-yedek

Güvenlik Konuları

Yapılandırma Dosyasını Korumak

Rclone yapılandırma dosyası (~/.config/rclone/rclone.conf) API anahtarlarınızı düz metin olarak içerir. Bunu korumak için:

# Dosya izinlerini kısıtla
chmod 600 ~/.config/rclone/rclone.conf

# Şifreli yapılandırma için
rclone config

# Menüden 's' (Set configuration password) seçin
# Bu şifreyi ortam değişkeniyle otomatik girebilirsiniz:
export RCLONE_CONFIG_PASS="gizli-sifreniz"

Servis Hesabı Kullanımı

Root yerine özel bir servis hesabıyla çalışmak her zaman daha güvenli:

# Rclone için özel kullanıcı oluştur
sudo useradd -r -s /bin/false -d /var/lib/rclone rclone-svc
sudo mkdir -p /var/lib/rclone/.config/rclone
sudo cp ~/.config/rclone/rclone.conf /var/lib/rclone/.config/rclone/
sudo chown -R rclone-svc:rclone-svc /var/lib/rclone
sudo chmod 700 /var/lib/rclone/.config
sudo chmod 600 /var/lib/rclone/.config/rclone/rclone.conf

# Mount noktası sahipliği
sudo chown rclone-svc:rclone-svc /mnt/bulut-yedek

Mount Kontrolü ve Monitoring

Production ortamlarında mount’ın hala aktif olup olmadığını düzenli kontrol etmek kritik:

#!/bin/bash
# /usr/local/bin/mount-kontrol.sh

MOUNT_NOKTASI="/mnt/bulut-yedek"
SERVIS_ADI="rclone-mount"
LOG_DOSYA="/var/log/mount-kontrol.log"

check_mount() {
    if mountpoint -q "${MOUNT_NOKTASI}"; then
        # Gerçekten çalışıyor mu test et
        if timeout 10 ls "${MOUNT_NOKTASI}" > /dev/null 2>&1; then
            echo "[$(date)] OK: Mount aktif ve erişilebilir."
            return 0
        else
            echo "[$(date)] UYARI: Mount var ama erişilemiyor, yeniden başlatılıyor..." | tee -a "${LOG_DOSYA}"
            fusermount3 -uz "${MOUNT_NOKTASI}"
            systemctl restart "${SERVIS_ADI}"
            return 1
        fi
    else
        echo "[$(date)] HATA: Mount aktif değil, başlatılıyor..." | tee -a "${LOG_DOSYA}"
        systemctl start "${SERVIS_ADI}"
        return 1
    fi
}

check_mount

Bu scripti cron’a ekleyin, 5 dakikada bir çalışsın:

*/5 * * * * /usr/local/bin/mount-kontrol.sh >> /var/log/mount-kontrol.log 2>&1

Windows’ta Rclone Mount

Windows sunucularında rclone mount için önce WinFsp kurmanız gerekiyor. Kurulumdan sonra:

# WinFsp indirme ve kurma
# https://winfsp.dev/rel/ adresinden indirin

# Mount komutu (Powershell)
rclone mount backblaze-backup:yedek-bucket X: `
  --vfs-cache-mode full `
  --vfs-cache-max-size 20G `
  --network-mode

# Windows servis olarak kaydetmek için NSSM kullanın
nssm install RcloneMount "C:Program Filesrclonerclone.exe" "mount backblaze-backup:yedek-bucket X: --vfs-cache-mode full"
nssm start RcloneMount

--network-mode parametresi Windows’ta sürücüyü ağ sürücüsü olarak gösterir, bu özellikle Explorer ile uyum açısından tercih edilir.

Sık Karşılaşılan Hatalar

“Transport endpoint is not connected” hatası: Mount süreç çökmüş ama bağlantı noktası hala kayıtlı. Çözüm:

fusermount3 -uz /mnt/bulut-yedek
# Sonra tekrar mount edin

“Input/output error” hatası büyük dosyalarda: VFS önbellek alanı yetersiz. --vfs-cache-max-size değerini artırın.

Yavaş dizin listeleme: --dir-cache-time değerini artırarak API çağrı sayısını azaltın. --dir-cache-time 1h ile uzun süre önbelleğe alabilirsiniz.

Mount sonrası yazılan dosyalar görünmüyor: Başka bir uygulama veya rclone örneğinin aynı bucket’a yazdığı dosyalar, --dir-cache-time süresi dolana kadar görünmeyebilir. rclone rc vfs/refresh komutu ile cache’i manuel temizleyebilirsiniz.

Sonuç

Rclone mount, yedekleme ve felaket kurtarma altyapınıza bulut depolamayı entegre etmenin en şeffaf yolu. Mevcut araçlarınızı değiştirmeden, sadece bir dizine yazmak yerine buluta yazıyorsunuz. Ama bu kolaylık, altında yatan karmaşıklığı gizliyor: VFS önbellek yönetimi, network kesintileri, API rate limiting ve performans optimizasyonu konularına hakim olmadan production’da sürprizlerle karşılaşabilirsiniz.

En kritik hatırlatmalar şunlar: --vfs-cache-mode full olmadan gerçek bir uygulama ile çalışmayı denemeyin, systemd servisinizde After=network-online.target satırını unutmayın ve mount’ın çalışıp çalışmadığını periyodik olarak izleyen bir kontrol mekanizması mutlaka kurun.

Rclone mount’ı bir yedekleme çözümünün ilk katmanı olarak kullanın. Üzerine restic veya borgbackup gibi deduplication ve şifreleme desteği olan araçlar eklerseniz, hem maliyet açısından hem de güvenlik açısından çok daha sağlam bir yapıya kavuşursunuz.

Bir yanıt yazın

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