Rclone Nedir: Bulut Depolama ile Yedekleme Rehberi
Yedekleme deyince aklınıza ne geliyor? Muhtemelen bir harici disk, belki bir NAS cihazı ya da en fazla FTP sunucusuna atılan birkaç dosya. Ama işler büyüdükçe, sunucu sayısı arttıkça ve veriler kritikleştikçe bu yöntemler yetersiz kalmaya başlıyor. İşte tam bu noktada Rclone devreye giriyor. Rclone, bulut depolama servislerini yerel dosya sistemi gibi kullanmanızı sağlayan, açık kaynaklı ve son derece güçlü bir komut satırı aracı. AWS S3’ten Google Drive’a, Backblaze B2’den SFTP sunucularına kadar 70’ten fazla farklı depolama servisini destekliyor. Bu yazıda Rclone’u sıfırdan kurup yapılandıracak, gerçek dünya senaryolarıyla yedekleme stratejileri oluşturacağız.
Rclone Neden Bu Kadar Popüler?
Sistem yöneticileri arasında Rclone’un bu kadar benimsenmesinin birkaç temel nedeni var.
Evrensel bulut desteği: Tek bir araçla AWS S3, Google Cloud Storage, Azure Blob Storage, Backblaze B2, Dropbox, OneDrive, SFTP, FTP, WebDAV ve daha onlarca servisi yönetebilirsiniz. Farklı araçlar öğrenmek zorunda kalmıyorsunuz.
Performans odaklı tasarım: Rclone, çok iş parçacıklı yükleme ve indirme yapabiliyor. Büyük dosyaları parçalara bölerek paralel transfer ediyor. Bu özellik özellikle büyük veritabanı yedeklerinde ciddi fark yaratıyor.
Akıllı senkronizasyon: Sadece değişen dosyaları transfer eden delta senkronizasyonu sayesinde bant genişliğini verimli kullanıyor. Her seferinde tüm veriyi yüklemek zorunda kalmıyorsunuz.
Şifreleme desteği: Hassas verileri buluta göndermeden önce istemci taraflı şifreleyebiliyorsunuz. Bulut sağlayıcısı dahil kimse verilerinize ulaşamıyor.
Cron ile mükemmel uyum: Daemon olarak çalışmak zorunda değil, cron job’larla kolayca entegre oluyor.
Kurulum
Rclone kurulumu son derece basit. Resmi kurulum scripti hemen hemen her Linux dağıtımında çalışıyor.
# Resmi kurulum scripti
curl https://rclone.org/install.sh | sudo bash
# Ya da paket yöneticisiyle (Ubuntu/Debian)
sudo apt update && sudo apt install rclone
# CentOS/RHEL/Rocky Linux için
sudo dnf install rclone
# macOS için
brew install rclone
# Versiyonu kontrol et
rclone version
Kurulumdan sonra yapılandırma dosyası ~/.config/rclone/rclone.conf konumunda oluşacak. Bu dosyayı elle de düzenleyebilirsiniz ama ilk kurulumda interaktif yapılandırma sihirbazını kullanmak çok daha pratik.
İlk Remote Bağlantısını Yapılandırma
Rclone’da her bulut depolama bağlantısına “remote” deniyor. Bir remote oluşturmak için rclone config komutunu kullanıyoruz.
Backblaze B2 Yapılandırması
Backblaze B2, GB başına ücretlendirmesi ve ücretsiz çıkış trafiği politikasıyla yedekleme için en popüler seçeneklerden biri.
rclone config
# Interaktif menü açılır:
# n) New remote
# s) Set configuration password
# q) Quit config
# e/n/d/r/c/s/q> n
# Name> backblaze-backup
# Type of storage> (b2 yazın veya numarasını seçin)
# account> YOUR_ACCOUNT_ID
# key> YOUR_APPLICATION_KEY
# hard_delete> false
Yapılandırma tamamlandıktan sonra bağlantıyı test edin:
# Remote'un çalışıp çalışmadığını test et
rclone lsd backblaze-backup:
# Bir bucket içindeki dosyaları listele
rclone ls backblaze-backup:my-backup-bucket
# Bağlantı testi
rclone about backblaze-backup:
AWS S3 Yapılandırması
Kurumsal ortamlarda en sık karşılaşılan senaryo S3 kullanımı. IAM rolü olan bir EC2 instance üzerinde çalışıyorsanız credential girmenize bile gerek yok.
# S3 remote yapılandırması
rclone config
# Name> aws-s3-backup
# Type> s3
# Provider> AWS
# env_auth> true (EC2 IAM rolü kullanmak için)
# region> eu-west-1
# location_constraint> eu-west-1
# Yapılandırmayı doğrula
rclone lsd aws-s3-backup:
# Belirli bir bucket'ı listele
rclone ls aws-s3-backup:company-backups/
Eğer IAM rolü yerine access key kullanıyorsanız, key bilgilerini env_auth> false seçerek girmeniz gerekiyor. Ama prodüksiyon ortamlarında her zaman IAM rolleri tercih edin, key yönetimi baş ağrısıdır.
Temel Rclone Komutları
Günlük kullanımda en çok ihtiyaç duyacağınız komutları öğrenelim.
# Yerel dizini S3'e kopyala (tek yönlü, kaynak değişmez)
rclone copy /var/backups/mysql aws-s3-backup:company-backups/mysql/
# Senkronize et (hedef kaynakla birebir aynı olur, fazla dosyalar silinir)
rclone sync /var/www/html backblaze-backup:web-backup/html/
# Sadece ne yapılacağını göster, gerçekten yapma
rclone sync --dry-run /var/backups aws-s3-backup:company-backups/
# İlerleme durumunu göster
rclone copy --progress /data/large-files aws-s3-backup:company-backups/data/
# Paralel transfer sayısını artır (varsayılan 4)
rclone copy --transfers 16 /var/backups aws-s3-backup:company-backups/
# Bant genişliği limiti koy (MB/s cinsinden)
rclone copy --bwlimit 10M /var/backups aws-s3-backup:company-backups/
copy ile sync arasındaki farka dikkat edin. copy, kaynaktaki dosyaları hedefe ekler ama hedefte fazladan olan dosyalara dokunmaz. sync ise hedefi kaynakla birebir eşleştirir, yani kaynakta olmayan dosyalar hedeften silinir. Yanlış kullanırsanız veri kaybedebilirsiniz.
Gerçek Dünya Senaryosu 1: MySQL Veritabanı Yedekleme
En yaygın ihtiyaç: MySQL/MariaDB veritabanlarını düzenli aralıklarla buluta yedekleme. İşte production’da kullandığım script:
#!/bin/bash
# /usr/local/bin/mysql-backup.sh
set -euo pipefail
# Değişkenler
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
S3_BUCKET="aws-s3-backup:company-backups/mysql"
LOG_FILE="/var/log/mysql-backup.log"
# Log fonksiyonu
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "Yedekleme başladı"
# Backup dizini oluştur
mkdir -p "$BACKUP_DIR"
# Tüm veritabanlarını yedekle
mysqldump
--all-databases
--single-transaction
--routines
--triggers
--flush-logs
--master-data=2
| gzip > "$BACKUP_DIR/all-databases_${DATE}.sql.gz"
log "Dump tamamlandı: all-databases_${DATE}.sql.gz"
# S3'e yükle
rclone copy
--progress
--log-file="$LOG_FILE"
--log-level INFO
"$BACKUP_DIR/all-databases_${DATE}.sql.gz"
"$S3_BUCKET/"
log "S3'e yükleme tamamlandı"
# Eski yerel yedekleri temizle
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
log "Eski yerel yedekler temizlendi ($RETENTION_DAYS günden eski)"
# S3'teki eski yedekleri de temizle
rclone delete
--min-age "${RETENTION_DAYS}d"
"$S3_BUCKET/"
log "Yedekleme tamamlandı"
Bu scripti cron’a ekleyin:
# Her gece 02:00'de çalıştır
crontab -e
0 2 * * * /usr/local/bin/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1
Gerçek Dünya Senaryosu 2: Şifreli Yedekleme (Crypt Remote)
Kişisel veriler, müşteri bilgileri veya hassas belgeler içeren yedekler için şifreleme zorunlu. Rclone’un crypt özelliği, dosyaları buluta göndermeden önce AES-256 ile şifreli. Bulut sağlayıcınız bile dosyalarınızın içeriğini göremez.
# Önce normal bir remote yapılandırın (örneğin backblaze-backup)
# Sonra onun üzerine crypt remote ekleyin
rclone config
# n) New remote
# Name> backblaze-encrypted
# Type> crypt
# remote> backblaze-backup:encrypted-vault
# filename_encryption> standard
# directory_name_encryption> true
# password> (güçlü bir şifre girin)
# password2> (salt için ikinci şifre girin - önemli!)
Şifreli remote’u kullanmak normal remote’dan hiç farklı değil:
# Şifreli bucket'a dosya yükle
rclone copy /home/sensitive-documents backblaze-encrypted:
# Şifreli bucket'tan dosya indir
rclone copy backblaze-encrypted: /tmp/restore/
# Şifreli içeriği listele (şifresi çözülmüş halde görünür)
rclone ls backblaze-encrypted:
Önemli uyarı: Şifrenizi ve salt değerini mutlaka güvenli bir yerde saklayın. rclone.conf dosyasını da yedekleyin. Bu bilgileri kaybederseniz verilerinize bir daha erişemezsiniz.
Rclone Mount ile Sanal Dosya Sistemi
Rclone’un belki de en etkileyici özelliklerinden biri, bulut depolama alanını yerel dizin olarak mount edebilmesi. Bu sayede herhangi bir uygulama, bulut storage’a sanki yerel diskmiş gibi yazıp okuyabiliyor.
# FUSE kurulumu gerekli
sudo apt install fuse3 # Ubuntu/Debian
sudo dnf install fuse3 # CentOS/RHEL
# S3 bucket'ı mount et
mkdir -p /mnt/s3-backup
rclone mount aws-s3-backup:company-backups /mnt/s3-backup
--daemon
--allow-other
--vfs-cache-mode writes
--log-file /var/log/rclone-mount.log
# Mount'u kontrol et
df -h /mnt/s3-backup
ls -la /mnt/s3-backup/
# Unmount
fusermount -u /mnt/s3-backup
Bu özelliği systemd servis olarak ayarlarsanız sunucu yeniden başladığında otomatik mount alırsınız:
# /etc/systemd/system/rclone-mount.service
[Unit]
Description=Rclone S3 Mount
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/rclone mount
aws-s3-backup:company-backups
/mnt/s3-backup
--allow-other
--vfs-cache-mode writes
--log-file /var/log/rclone-mount.log
ExecStop=/bin/fusermount -u /mnt/s3-backup
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Rclone ile Çoklu Bulut Stratejisi
3-2-1 yedekleme kuralını hatırlıyor musunuz? En az 3 kopya, 2 farklı medyada, 1 tanesi offsite. Rclone ile bunu iki farklı bulut sağlayıcısına yedekleyerek kolayca uygulayabilirsiniz.
#!/bin/bash
# /usr/local/bin/multi-cloud-backup.sh
# 3-2-1 kuralı için çoklu bulut yedekleme
set -euo pipefail
SOURCE="/var/backups/daily"
DATE=$(date +%Y%m%d)
LOG="/var/log/multi-cloud-backup.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG"; }
# Birincil yedek: AWS S3 (ana sağlayıcı)
log "AWS S3'e yedekleniyor..."
rclone sync "$SOURCE"
"aws-s3-backup:company-backups/daily/"
--log-file "$LOG"
--log-level INFO
--transfers 8
--checksum
# İkincil yedek: Backblaze B2 (farklı sağlayıcı)
log "Backblaze B2'ye yedekleniyor..."
rclone sync "$SOURCE"
"backblaze-backup:company-b2-backups/daily/"
--log-file "$LOG"
--log-level INFO
--transfers 8
--checksum
# İki remote arasında senkronizasyon (kopyadan kopyaya)
log "S3'ten Backblaze'e çapraz senkronizasyon kontrol ediliyor..."
rclone check
"aws-s3-backup:company-backups/daily/"
"backblaze-backup:company-b2-backups/daily/"
--log-file "$LOG"
log "Çoklu bulut yedekleme tamamlandı"
Rclone Bisect ve Veri Doğrulama
Yedeklediniz, süper. Ama ya yedek bozuksa? rclone check komutu, kaynak ve hedefi karşılaştırarak veri bütünlüğünü doğruluyor.
# Kaynak ile hedefi karşılaştır (checksum bazlı)
rclone check /var/backups/ aws-s3-backup:company-backups/
--checksum
--log-file /var/log/rclone-check.log
# Sadece boyut ve tarih karşılaştırması (daha hızlı)
rclone check /var/backups/ aws-s3-backup:company-backups/
--size-only
# Eksik veya farklı dosyaları göster
rclone check /var/backups/ aws-s3-backup:company-backups/
--missing-on-dst /tmp/missing-files.txt
--differ /tmp/different-files.txt
cat /tmp/missing-files.txt
cat /tmp/different-files.txt
Haftalık otomatik doğrulama yapmanızı şiddetle tavsiye ederim. Yedeklerin çalıştığını varsaymak, gerçekten çalıştığını bilmekten çok farklı.
Bandwidth Yönetimi ve Performans Ayarları
Yedekleme sürecinin prodüksiyon trafiğini etkilememesi kritik. Rclone’un bu konuda birçok seçeneği var:
# Bant genişliği zamanlaması: Gündüz 1MB/s, gece 10MB/s
rclone copy /var/backups aws-s3-backup:company-backups/
--bwlimit "08:00,1M 20:00,10M"
# Paralel transfer sayısı
# --transfers: Aynı anda kaç dosya transfer edilsin (varsayılan 4)
# --checkers: Kaç dosya aynı anda kontrol edilsin (varsayılan 8)
rclone sync /var/backups aws-s3-backup:company-backups/
--transfers 16
--checkers 32
# Büyük dosyalar için chunk boyutu (S3 multipart upload)
# --s3-chunk-size: Her parçanın boyutu (varsayılan 5Mi)
# --s3-upload-concurrency: Paralel parça yükleme sayısı
rclone copy /var/backups/large-db.tar.gz aws-s3-backup:company-backups/
--s3-chunk-size 64M
--s3-upload-concurrency 8
Hata Ayıklama ve Loglama
Prodüksiyonda bir şeyler ters gittiğinde ne yapacağınızı bilmek gerekiyor.
# Verbose mod - ne olduğunu adım adım görün
rclone copy /tmp/test aws-s3-backup:test-bucket/ -v
# Daha da ayrıntılı
rclone copy /tmp/test aws-s3-backup:test-bucket/ -vv
# Log seviyelerini ayarla
# --log-level: DEBUG, INFO, NOTICE, ERROR
rclone sync /var/backups aws-s3-backup:company-backups/
--log-level INFO
--log-file /var/log/rclone.log
# Son hataları filtrele
grep "ERROR" /var/log/rclone.log | tail -20
# Rclone'un API çağrılarını debug et
rclone copy /tmp/test aws-s3-backup:test/
--dump headers
--dump bodies 2>&1 | head -100
Prodüksiyon ortamında log rotasyonu da ayarlayın:
# /etc/logrotate.d/rclone
/var/log/rclone*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 root adm
}
Sık Karşılaşılan Sorunlar ve Çözümleri
“Failed to create file system” hatası: Çoğunlukla yanlış remote adı veya yapılandırma sorunu. rclone config show ile yapılandırmayı doğrulayın.
Yükleme çok yavaş: --transfers değerini artırın, --bwlimit sınırı olmadığından emin olun. Ayrıca coğrafi uzaklık da gecikmeye yol açıyor; mümkünse aynı bölgedeki S3 endpoint’ini kullanın.
“AccessDenied” hatası S3’te: IAM politikanızı kontrol edin. s3:PutObject, s3:GetObject, s3:ListBucket, s3:DeleteObject izinlerinin olması gerekiyor.
Crypt remote sonrası dosyalar görünmüyor: Salt değerini yanlış girmişsinizdir. rclone config show remote-name ile şifre bilgilerini doğrulayın.
Mount sonrası dosya yazılamıyor: --vfs-cache-mode writes veya --vfs-cache-mode full ekleyin. Bazı uygulamalar seekable write gerektiriyor.
Güvenlik En İyi Uygulamaları
# rclone.conf dosyasının izinlerini kısıtla
chmod 600 ~/.config/rclone/rclone.conf
# Yapılandırma dosyasını şifrele
rclone config
# s) Set configuration password seçin
# Artık rclone her çalıştığında şifre sorar
# CI/CD ortamlarında ortam değişkeni kullan
export RCLONE_CONFIG_PASS="supersecret"
# S3 için IAM politikası (en az yetki prensibi)
# Sadece yedekleme için gereken izinler:
# - s3:PutObject
# - s3:GetObject
# - s3:DeleteObject
# - s3:ListBucket
# - s3:GetBucketLocation
Service account veya IAM rolü kullanırken yedekleme bucket’ı dışındaki kaynaklara erişim vermeyin. Bir yedekleme scripti ele geçirilirse verebileceği zarar minimumda kalsın.
Sonuç
Rclone, sistem yöneticilerinin araç kutusunda olması gereken nadir yazılımlardan biri. Kurulumu kolay, öğrenmesi nispeten hızlı ve gerçekten her ortamda çalışıyor. AWS S3, Backblaze B2 veya herhangi bir bulut sağlayıcısıyla entegrasyon, cron job’larla otomatizasyon, şifreleme ve veri doğrulama gibi özellikleriyle enterprise seviyesi yedekleme altyapısı kurabiliyorsunuz.
Bu yazıda öğrendiklerinizi özetleyecek olursak: Rclone’u kurup yapılandırdınız, temel komutları öğrendiniz, MySQL yedekleme scripti yazdınız, şifreli yedekleme ayarladınız ve çoklu bulut stratejisi oluşturdunuz. Bir sonraki adım olarak Restic ile Rclone’u birlikte kullanmayı incelemenizi öneririm. Restic, değişiklik bazlı (incremental) yedekleme ve snapshot yönetimi için mükemmel bir tamamlayıcı. İkisini birlikte kullandığınızda gerçekten kurumsal kalitede bir yedekleme sistemi elde ediyorsunuz.
Son olarak şunu hatırlatayım: En iyi yedekleme sistemi, hiç test edilmemiş olanı değil, düzenli olarak test edilmiş olandır. Ayda en az bir kere yedekten restore yapın ve her şeyin beklendiği gibi çalıştığını doğrulayın. Felaket anında “umarım çalışır” demek yerine “çalıştığını biliyorum” demek çok daha rahatlatıcı.
