Rclone ile OneDrive ve Dropbox’a Otomatik Yedekleme

Sunucunuzda biriken kritik verileri bulut depolamaya taşımak artık bir lüks değil, zorunluluk. Özellikle küçük ve orta ölçekli işletmelerde yedekleme altyapısına büyük bütçeler ayırmak mümkün olmadığından, Rclone gibi ücretsiz ve güçlü araçlar hayat kurtarıcı oluyor. Bu yazıda Rclone’u kullanarak OneDrive ve Dropbox üzerine nasıl profesyonel düzeyde yedekleme yapabileceğinizi, otomasyon kurulumunu ve dikkat etmeniz gereken tüm detayları ele alacağız.

Rclone Nedir ve Neden Kullanmalısınız?

Rclone, 40’tan fazla bulut depolama servisini destekleyen, Go diliyle yazılmış açık kaynaklı bir senkronizasyon ve yedekleme aracıdır. rsync’in bulut versiyonu olarak düşünebilirsiniz. Amazon S3, Google Drive, OneDrive, Dropbox, Backblaze B2 ve daha pek çok servisle sorunsuz çalışır.

Rclone’u tercih etmemizin başlıca nedenleri:

  • Ücretsiz ve açık kaynak: Lisans maliyeti yok
  • Çapraz platform: Linux, Windows, macOS üzerinde çalışır
  • Şifreleme desteği: Verilerinizi buluta göndermeden önce şifreleyebilirsiniz
  • Bant genişliği kontrolü: Yedekleme sırasında ağ kullanımını sınırlayabilirsiniz
  • Delta transfer: Sadece değişen dosyaları gönderir, zaman ve bant genişliği tasarrufu sağlar
  • Çoklu backend: Aynı anda birden fazla servise yedekleyebilirsiniz

Kurulum

Linux’ta Kurulum

Ubuntu/Debian sistemlerde kurulum son derece basittir:

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

# Veya paket yöneticisi ile (genellikle eski versiyon gelir)
sudo apt-get install rclone

# Versiyon kontrolü
rclone version

RPM tabanlı sistemler için:

# RHEL/CentOS/Rocky Linux
sudo dnf install rclone

# Veya manuel kurulum
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone

Windows’ta Kurulum

Windows Server ortamlarında Rclone’u şu şekilde kurabilirsiniz:

# Winget ile
winget install Rclone.Rclone

# Veya Chocolatey ile
choco install rclone

# Manuel olarak PATH'e eklemek için
$env:Path += ";C:rclone"

OneDrive Yapılandırması

OneDrive yapılandırması OAuth2 tabanlı olduğu için biraz daha dikkat gerektirir. Eğer yapılandırdığınız sunucunun tarayıcısı yoksa (headless server), işlemi kendi bilgisayarınızda yapmanız gerekir.

Interaktif Yapılandırma

rclone config

Bu komutu çalıştırdıktan sonra sizi adım adım yönlendiren bir menü açılır:

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

name> onedrive-yedek

Type of storage to configure.
Storage> onedrive

# Microsoft hesabınız için boş bırakın
client_id>
client_secret>

# Bölgesel ayar - global hesaplar için 1
Choose national cloud region for OneDrive
1 / Microsoft Cloud Global
region> 1

Bu noktada Rclone size bir URL verecek. Bu URL’yi tarayıcınızda açarak Microsoft hesabınıza giriş yapın ve izin verin. Dönen kodu terminale yapıştırın.

Headless Sunucu için Token Alma

Sunucunuzda tarayıcı yoksa şu yöntemi kullanın:

# Önce yerel makinenizde (tarayıcısı olan bilgisayar)
rclone authorize "onedrive"

# Bu komut size bir token verecek, bunu sunucudaki config'e girin
# Token şu formatta görünür:
# {"access_token":"...","expiry":"..."}

Token aldıktan sonra sunucunuzda yapılandırmaya devam edip bu token’ı ilgili alana yapıştırın.

OneDrive Drive Seçimi

Yapılandırmanın son aşamasında hangi OneDrive’ı kullanacağınızı seçmeniz gerekir:

# Kişisel OneDrive için 1
# SharePoint veya iş hesabı için diğer seçenekler
Choose OneDrive account type
1 / OneDrive Personal or Business
onedrive_type> 1

# Drive listesi gelecek, uygun olanı seçin
Found 1 drives, please select the one you want to use:
0: OneDrive (personal) id=...
Chose drive to use:> 0

Dropbox Yapılandırması

Dropbox yapılandırması OneDrive’a benzer şekilde OAuth2 kullanır ancak biraz daha basittir.

rclone config

# Yeni remote oluştur
n/s/q> n
name> dropbox-yedek

# Storage tipini seç
Storage> dropbox

# App key ve secret boş bırakılabilir (Rclone'un kendi app'ini kullanır)
client_id>
client_secret>

# Tarayıcı açılacak veya URL verilecek
# Dropbox hesabınıza giriş yapıp izin verin

Headless sunucu için aynı yöntemi kullanabilirsiniz:

rclone authorize "dropbox"

Yapılandırmayı Doğrulama

Her iki remote’u da yapılandırdıktan sonra test edin:

# Remote listesini görüntüle
rclone listremotes

# OneDrive içeriğini listele
rclone lsd onedrive-yedek:

# Dropbox kök dizinini listele
rclone lsd dropbox-yedek:

# Bağlantı testi
rclone about onedrive-yedek:
rclone about dropbox-yedek:

Temel Yedekleme Komutları

Rclone’un birkaç farklı çalışma modu vardır ve doğru modu seçmek kritik önem taşır.

Copy vs Sync Farkı

rclone copy: Kaynak dosyaları hedefe kopyalar, hedefte fazladan olan dosyaları silmez.

rclone sync: Kaynağı hedefe tam olarak yansıtır, hedefte fazladan olan dosyaları siler. Dikkatli kullanın!

rclone move: Dosyaları taşır, kaynaktan siler.

Temel Yedekleme Örnekleri

# /var/www dizinini OneDrive'a kopyala
rclone copy /var/www onedrive-yedek:yedekler/www 
  --progress 
  --log-file=/var/log/rclone-onedrive.log 
  --log-level INFO

# MySQL dump'ını Dropbox'a yedekle
rclone copy /backup/mysql dropbox-yedek:sunucu-yedekleri/mysql 
  --progress 
  --transfers 4 
  --checkers 8

# Senkronizasyon (dikkatli kullanın!)
rclone sync /home/kullanici/belgeler onedrive-yedek:belgeler 
  --backup-dir onedrive-yedek:eski-yedekler/$(date +%Y%m%d) 
  --progress

Filtreler ve Hariç Tutma

Gereksiz dosyaları yedeklemek hem zaman hem de depolama alanı israfıdır:

# Belirli uzantıları hariç tut
rclone copy /var/www onedrive-yedek:yedekler/www 
  --exclude "*.log" 
  --exclude "*.tmp" 
  --exclude ".git/**" 
  --exclude "node_modules/**" 
  --exclude "__pycache__/**"

# Sadece belirli dosyaları dahil et
rclone copy /etc onedrive-yedek:yedekler/etc 
  --include "*.conf" 
  --include "*.yaml" 
  --include "*.yml"

# Minimum dosya boyutu filtresi
rclone copy /backup dropbox-yedek:yedekler 
  --min-size 1k 
  --max-size 4G

Şifreli Yedekleme (crypt)

Hassas verileri buluta göndermeden önce şifrelemeniz şiddetle tavsiye edilir. Rclone’un dahili crypt özelliği bu işi mükemmel yapar.

rclone config

# Yeni remote olarak crypt ekle
n/s/q> n
name> onedrive-sifreli

# Storage tipi olarak crypt seç
Storage> crypt

# Hangi remote'un üzerine şifreleme yapılacağını belirt
remote> onedrive-yedek:sifreli-yedekler

# Dosya adlarını da şifrele (daha güvenli ama arama yapılamaz)
filename_encryption> standard

# Dizin adlarını şifrele
directory_name_encryption> true

# Güçlü bir parola gir (bu parolayı kaybetmeyin!)
password> [güçlü parola girin]
password2> [parola doğrulama]

Şifreli remote’u kullanmak normal remote ile aynıdır:

# Şifreli olarak yedekle
rclone copy /etc/nginx onedrive-sifreli: 
  --progress 
  --log-file=/var/log/rclone-sifreli.log

# Şifreli içeriği listele (otomatik çözülür)
rclone ls onedrive-sifreli:

Gerçek Dünya Senaryosu: Web Sunucusu Yedekleme

Bir web ajansında çalıştığınızı ve birden fazla müşteri sitesini yönettiğinizi düşünün. İşte kapsamlı bir yedekleme scripti:

#!/bin/bash
# /usr/local/bin/yedekle.sh

set -euo pipefail

# Değişkenler
TARIH=$(date +%Y-%m-%d)
SAAT=$(date +%H%M)
LOG_DOSYASI="/var/log/rclone/yedek-${TARIH}.log"
GECICI_DIZIN="/tmp/yedekler"
MYSQL_YEDEK_DIZIN="${GECICI_DIZIN}/mysql"
HATA_EMAIL="[email protected]"

# Log dizini oluştur
mkdir -p /var/log/rclone
mkdir -p "${MYSQL_YEDEK_DIZIN}"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_DOSYASI}"
}

hata_bildir() {
    log "HATA: $1"
    echo "Yedekleme hatası: $1" | mail -s "Yedekleme Hatası - ${TARIH}" "${HATA_EMAIL}"
    exit 1
}

log "=== Yedekleme başlıyor: ${TARIH} ${SAAT} ==="

# MySQL veritabanlarını yedekle
log "MySQL yedekleme başlıyor..."
VERITABANLARI=$(mysql -u root -p"${MYSQL_ROOT_SIFRE}" -e "SHOW DATABASES;" 2>/dev/null | grep -Ev "(Database|information_schema|performance_schema|sys)")

for DB in ${VERITABANLARI}; do
    log "  Yedekleniyor: ${DB}"
    mysqldump -u root -p"${MYSQL_ROOT_SIFRE}" 
        --single-transaction 
        --routines 
        --triggers 
        "${DB}" | gzip > "${MYSQL_YEDEK_DIZIN}/${DB}-${TARIH}.sql.gz" || hata_bildir "MySQL yedekleme başarısız: ${DB}"
done

# Web dosyalarını OneDrive'a yedekle
log "Web dosyaları OneDrive'a yükleniyor..."
rclone copy /var/www onedrive-sifreli:yedekler/www-${TARIH} 
    --exclude "*.log" 
    --exclude "*.tmp" 
    --exclude "node_modules/**" 
    --exclude ".git/**" 
    --bwlimit "08:00,512k:10:00,0" 
    --transfers 4 
    --log-file="${LOG_DOSYASI}" 
    --log-level INFO || hata_bildir "Web dosyaları yedekleme başarısız"

# MySQL yedeklerini Dropbox'a yükle (çift yedek)
log "Veritabanı yedekleri Dropbox'a yükleniyor..."
rclone copy "${MYSQL_YEDEK_DIZIN}" dropbox-yedek:yedekler/mysql/${TARIH} 
    --log-file="${LOG_DOSYASI}" 
    --log-level INFO || hata_bildir "Veritabanı yedekleri Dropbox'a gönderilemedi"

# Eski yedekleri temizle (30 günden eski)
log "Eski yedekler temizleniyor..."
rclone delete onedrive-sifreli: 
    --min-age 30d 
    --log-file="${LOG_DOSYASI}"

# Geçici dosyaları temizle
rm -rf "${GECICI_DIZIN}"

log "=== Yedekleme tamamlandı ==="

Bu scripti çalıştırılabilir yapın ve cron’a ekleyin:

chmod +x /usr/local/bin/yedekle.sh

# Crontab düzenle
crontab -e

# Her gece saat 02:00'de çalıştır
0 2 * * * /usr/local/bin/yedekle.sh >> /var/log/rclone/cron.log 2>&1

Bant Genişliği Yönetimi

Yedekleme işlemlerinin üretim trafiğini etkilememesi için bant genişliği kontrolü şarttır:

# Sabit bant genişliği limiti (512 KB/s)
rclone copy /backup onedrive-yedek:yedekler 
  --bwlimit 512k

# Zaman bazlı bant genişliği (mesai saatlerinde yavaş, geceleri hızlı)
rclone copy /backup onedrive-yedek:yedekler 
  --bwlimit "08:00,256k 18:00,0 23:00,10M 07:00,256k"

# Transfer sayısını sınırla
rclone copy /backup dropbox-yedek:yedekler 
  --transfers 2 
  --checkers 4 
  --tpslimit 5

Yedek Doğrulama

Yedek almak kadar önemli olan bir diğer konu, alınan yedeklerin gerçekten kullanılabilir olduğunu doğrulamaktır:

# Kaynak ve hedef arasındaki farkları kontrol et
rclone check /var/www onedrive-yedek:yedekler/www 
  --log-file=/var/log/rclone/check.log

# Checksum tabanlı doğrulama (daha yavaş ama daha güvenilir)
rclone check /var/www onedrive-yedek:yedekler/www 
  --checksum 
  --log-file=/var/log/rclone/check.log

# Sadece boyut farklılıklarını raporla
rclone check /backup dropbox-yedek:yedekler 
  --size-only

# Test geri yükleme
rclone copy onedrive-yedek:yedekler/www /tmp/test-geri-yukleme 
  --progress 
  --dry-run

Geri yükleme testini aylık en az bir kez yapmanızı öneririm. Bir yedekleme sistemi geri yükleme testi yapılmadığı sürece güvenilir sayılmaz.

Performans Optimizasyonu

Büyük veri setlerinde yedekleme süresini kısaltmak için şu ayarları kullanabilirsiniz:

# Paralel transfer sayısını artır
rclone copy /backup onedrive-yedek:yedekler 
  --transfers 8 
  --checkers 16 
  --multi-thread-streams 4 
  --fast-list

# Buffer boyutunu artır (RAM kullanımı artar)
rclone copy /backup dropbox-yedek:yedekler 
  --buffer-size 256M 
  --use-mmap

# OneDrive için özel chunk ayarları
rclone copy /backup onedrive-yedek:yedekler 
  --onedrive-chunk-size 250M

# Dry-run ile önce test et
rclone copy /var/www onedrive-yedek:yedekler/www 
  --dry-run 
  --verbose

Yapılandırma Dosyasını Güvence Altına Alma

Rclone yapılandırma dosyası OAuth token’ları içerdiğinden güvenli tutulması gerekir:

# Yapılandırma dosyasının konumunu bul
rclone config file

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

# Yapılandırma dosyasını şifrele
rclone config

# Menüden 's' ile şifre belirle
s) Set configuration password

Yapılandırma şifrelendiğinde Rclone her çalışmada parola isteyecektir. Otomasyonda kullanmak için:

# Parola environment variable olarak
export RCLONE_CONFIG_PASS="guclu-parola"

# Veya script içinde
RCLONE_CONFIG_PASS="guclu-parola" rclone copy /backup onedrive-yedek:yedekler

Parolayı script içine hardcode yazmak yerine bir secrets management aracı (HashiCorp Vault, AWS Secrets Manager vb.) kullanmanızı öneririm. En azından şifreyi ayrı bir dosyaya yazıp o dosyanın iznini kısıtlayın:

echo "RCLONE_CONFIG_PASS=guclu-parola" > /etc/rclone-secrets
chmod 600 /etc/rclone-secrets
chown root:root /etc/rclone-secrets

# Script'te kullan
source /etc/rclone-secrets

Systemd Timer ile Zamanlama

Cron yerine systemd timer kullanmak daha modern ve yönetilebilir bir yaklaşım sunar:

# /etc/systemd/system/rclone-yedek.service
cat > /etc/systemd/system/rclone-yedek.service << 'EOF'
[Unit]
Description=Rclone Yedekleme Servisi
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/yedekle.sh
User=root
StandardOutput=journal
StandardError=journal
EOF

# /etc/systemd/system/rclone-yedek.timer
cat > /etc/systemd/system/rclone-yedek.timer << 'EOF'
[Unit]
Description=Rclone Yedekleme Zamanlayıcı

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Timer'ı etkinleştir ve başlat
systemctl daemon-reload
systemctl enable rclone-yedek.timer
systemctl start rclone-yedek.timer

# Durumu kontrol et
systemctl status rclone-yedek.timer
systemctl list-timers rclone-yedek.timer

Sık Karşılaşılan Sorunlar ve Çözümleri

Token süresi dolması: OAuth token’lar zaman zaman süresi dolabilir. Bu durumda rclone config reconnect onedrive-yedek: komutuyla token’ı yenileyebilirsiniz.

Rate limiting: OneDrive ve Dropbox API çağrılarını sınırlar. Hata alırsanız --tpslimit 5 ve --tpslimit-burst 10 parametrelerini ekleyin.

Büyük dosyalarda timeout: --timeout 300s ve --retries 5 parametreleri ile bağlantı kopması sorunlarını azaltabilirsiniz.

Hatalı sistem saati: OAuth doğrulaması sisteminizin saatine duyarlıdır. timedatectl status ile NTP senkronizasyonunu kontrol edin.

Yetki hataları: Rclone’un farklı bir kullanıcı ile çalışıyorsa, o kullanıcının yapılandırma dosyasına erişebildiğinden emin olun.

Sonuç

Rclone, doğru yapılandırıldığında kurumsal düzeyde bir yedekleme çözümü sunar. OneDrive ve Dropbox’ı birlikte kullanmak, verileriniz için 3-2-1 yedekleme kuralına uymayı kolaylaştırır: en az 3 kopya, 2 farklı medyada ve 1 offsite lokasyon. Buradaki onsite yedeklerinize ek olarak her iki bulut servisi de birer offsite kopya görevi görür.

Yazıda anlattığımız adımları özetlemek gerekirse: Rclone’u kurun, remote’larınızı yapılandırın, crypt ile şifrelemeyi etkinleştirin, otomatik yedekleme scriptinizi hazırlayın ve düzenli aralıklarla geri yükleme testleri yapın. En kritik nokta düzenli test yapmaktır. Geri yükleyemediğiniz bir yedek, hiç alınmamış yedekten farksızdır.

Sorularınız veya paylaşmak istediğiniz senaryolar varsa yorumlarda buluşalım.

Bir yanıt yazın

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