Google Drive Yedekleme Kurulumu: Rclone ile Adım Adım Rehber
Sunucunuzda bir şeyler ters gidip de yedeği olmadığını fark ettiğiniz o an, sysadmin olarak yaşayabileceğiniz en kötü deneyimlerden biridir. Google Drive, kurumsal ve kişisel kullanım için oldukça erişilebilir ve güvenilir bir depolama platformu olduğundan, rclone ile birleştirildiğinde ciddi bir yedekleme altyapısı kurmanız mümkün. Bu yazıda, rclone kullanarak Google Drive’a nasıl otomatik ve güvenli yedekleme yapacağınızı adım adım anlatacağım.
Rclone Nedir ve Neden Kullanmalıyız?
Rclone, 40’tan fazla bulut depolama sağlayıcısını destekleyen açık kaynaklı bir komut satırı aracıdır. AWS S3, Backblaze B2, Dropbox, OneDrive ve tabii ki Google Drive ile sorunsuz çalışır. Rsync’in bulut versiyonu olarak düşünebilirsiniz ama çok daha yetenekli.
Neden rclone tercih ediyorum:
- Çapraz platform desteği: Linux, Windows ve macOS üzerinde çalışır
- Şifreleme desteği: Verilerinizi buluta göndermeden önce şifreleyebilirsiniz
- Bandwidth sınırlama: Sunucu kaynaklarını yönetmek için kritik
- Dry-run modu: Gerçek işlem yapmadan ne olacağını görebilirsiniz
- Delta senkronizasyon: Sadece değişen dosyaları aktarır
- Kapsamlı loglama: Neyin ne zaman yedeklendiğini takip edebilirsiniz
Kurulum
Linux Üzerinde Kurulum
Rclone’u kurmanın en kolay yolu resmi kurulum scriptidir:
curl https://rclone.org/install.sh | sudo bash
Alternatif olarak paket yöneticinizi kullanabilirsiniz:
# Debian/Ubuntu
sudo apt update && sudo apt install rclone
# RHEL/CentOS/AlmaLinux
sudo dnf install rclone
# Arch Linux
sudo pacman -S rclone
Kurulumu doğrulayın:
rclone version
Windows Üzerinde Kurulum
Windows’ta Chocolatey kullanıyorsanız:
choco install rclone
Ya da doğrudan rclone.org adresinden zip dosyasını indirip PATH’e ekleyebilirsiniz.
Google Drive API Yapılandırması
Bu adım biraz sabır gerektiriyor ama bir kere yapınca bir daha uğraşmanız gerekmiyor. Google Drive’ı rclone ile kullanmak için OAuth kimlik doğrulaması yapmanız gerekiyor.
Google Cloud Console’da Proje Oluşturma
- console.cloud.google.com adresine gidin
- Yeni bir proje oluşturun, örneğin “rclone-backup”
- Sol menüden APIs & Services > Library bölümüne gidin
- “Google Drive API” aratın ve etkinleştirin
- APIs & Services > Credentials bölümüne gidin
- Create Credentials > OAuth client ID seçin
- Application type olarak Desktop app seçin
- Client ID ve Client Secret bilgilerini not alın
Bu bilgileri güvenli bir yerde saklayın. Özellikle sunucu ortamlarında bu değerleri bir secrets yöneticisinde tutmanızı öneririm.
Rclone Remote Yapılandırması
Şimdi rclone’a Google Drive bağlantısını tanıtalım. Eğer grafiksel arayüzünüz varsa (yerel makinenizde yapılandırıyorsanız):
rclone config
Bu komut sizi interaktif bir menüye götürecek. Adımlar şöyle:
- n ile yeni remote ekleyin
- İsim verin, örneğin:
gdrive - Storage tipi olarak
drive(Google Drive) seçin - Client ID ve Client Secret bilgilerini girin
- Scope olarak
drive(tam erişim) veyadrive.file(sadece rclone’un oluşturduğu dosyalar) seçin - Tarayıcı açılacak, Google hesabınıza giriş yapın ve yetkilendirin
Headless Sunucu Yapılandırması
Uzak sunucularda tarayıcı olmadığı için farklı bir yaklaşım gerekiyor. Önce yerel makinenizde token alıp sonra sunucuya kopyalayacaksınız.
Yerel makinenizde:
rclone authorize "drive" "CLIENT_ID" "CLIENT_SECRET"
Bu komut tarayıcı açar ve yetkilendirme tamamlandığında bir token JSON çıktısı verir. Bu çıktıyı kopyalayın.
Sunucuda konfigürasyonu elle oluşturun:
mkdir -p ~/.config/rclone
nano ~/.config/rclone/rclone.conf
Dosya içeriği şöyle olmalı:
[gdrive]
type = drive
client_id = SIZIN_CLIENT_ID_BURAYA
client_secret = SIZIN_CLIENT_SECRET_BURAYA
scope = drive
token = {"access_token":"...","token_type":"Bearer","refresh_token":"...","expiry":"..."}
Token alanına yerel makineden aldığınız JSON değerini yapıştırın.
Bağlantıyı test edin:
rclone lsd gdrive:
Bu komut Google Drive’ınızdaki klasörleri listelemeli. Eğer çalışıyorsa yapılandırma başarılı demektir.
Temel Rclone Komutları
Yedekleme scriptleri yazmadan önce temel komutları öğrenmek önemli.
Dosya ve Klasör Listeleme
# Klasörleri listele
rclone lsd gdrive:
# Tüm dosyaları listele
rclone ls gdrive:Backups
# İnsan okunabilir boyutlarla
rclone ls --human-readable gdrive:Backups
Kopyalama ve Senkronizasyon
copy: Kaynak dosyaları hedefe kopyalar, hedefte fazladan dosyalar olsa bile dokunmaz.
sync: Kaynağı hedefle birebir eşler, hedefte fazladan dosyalar varsa siler.
move: Dosyaları taşır, kaynaktan siler.
# Klasörü Google Drive'a kopyala
rclone copy /var/backups gdrive:Backups --progress
# Senkronize et (DİKKAT: hedefteki fazla dosyaları siler)
rclone sync /var/backups gdrive:Backups --progress
# Sadece ne yapacağını göster, gerçek işlem yapma
rclone sync /var/backups gdrive:Backups --dry-run --verbose
Gerçek Dünya Senaryo 1: Web Sunucusu Yedekleme
Diyelim ki bir VPS’de birkaç web sitesi çalıştırıyorsunuz. Web dosyalarını ve veritabanlarını düzenli olarak Google Drive’a yedeklemek istiyorsunuz.
Yedekleme Scripti Oluşturma
#!/bin/bash
# /usr/local/bin/backup-webserver.sh
# Değişkenler
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/var/backups/web-backup-${DATE}"
LOG_FILE="/var/log/rclone-backup.log"
GDRIVE_PATH="gdrive:Backups/webserver"
RETENTION_DAYS=30
# Log fonksiyonu
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "Yedekleme başladı: ${DATE}"
# Backup dizini oluştur
mkdir -p "$BACKUP_DIR"
# Web dosyalarını sıkıştır
log "Web dosyaları yedekleniyor..."
tar -czf "${BACKUP_DIR}/webroot.tar.gz" /var/www/html/ 2>/dev/null
# MySQL veritabanlarını yedekle
log "Veritabanları yedekleniyor..."
mysqldump --all-databases --single-transaction
-u root -p"${MYSQL_ROOT_PASSWORD}"
| gzip > "${BACKUP_DIR}/databases.sql.gz"
# Nginx/Apache konfigürasyonlarını yedekle
tar -czf "${BACKUP_DIR}/nginx-conf.tar.gz" /etc/nginx/ 2>/dev/null
tar -czf "${BACKUP_DIR}/apache-conf.tar.gz" /etc/apache2/ 2>/dev/null
# Google Drive'a yükle
log "Google Drive'a yükleniyor..."
rclone copy "$BACKUP_DIR" "${GDRIVE_PATH}/${DATE}"
--log-file="$LOG_FILE"
--log-level INFO
--stats 30s
--bwlimit 10M
# Yükleme başarılı mı kontrol et
if [ $? -eq 0 ]; then
log "Yükleme başarılı"
# Lokal geçici dosyaları temizle
rm -rf "$BACKUP_DIR"
else
log "HATA: Yükleme başarısız oldu"
exit 1
fi
# Eski yedekleri temizle (Google Drive'da)
log "Eski yedekler temizleniyor (${RETENTION_DAYS} günden eski)..."
rclone delete "${GDRIVE_PATH}"
--min-age "${RETENTION_DAYS}d"
--log-file="$LOG_FILE"
log "Yedekleme tamamlandı"
Scripti çalıştırılabilir yapın:
chmod +x /usr/local/bin/backup-webserver.sh
Cron ile Otomatikleştirme
crontab -e
Her gece saat 02:00’de çalışması için:
0 2 * * * MYSQL_ROOT_PASSWORD="sifreniz" /usr/local/bin/backup-webserver.sh >> /var/log/rclone-backup.log 2>&1
Daha güvenli bir yaklaşım için şifreyi ortam değişkeninden değil, bir dosyadan okuyun:
0 2 * * * source /etc/backup-credentials && /usr/local/bin/backup-webserver.sh
Gerçek Dünya Senaryo 2: Şifreli Yedekleme
Hassas veriler içeren sunucularda verilerinizi Google Drive’a göndermeden önce şifrelemek şart. Rclone’un built-in crypt özelliği bunu halleder.
Crypt Remote Oluşturma
rclone config
- Yeni remote ekleyin, isim:
gdrive-encrypted - Storage tipi:
crypt - Remote path:
gdrive:Backups/encrypted - Filename encryption:
standard(dosya isimlerini de şifreler) - Password: Güçlü bir şifre girin ve unutmayın!
Artık şifreli remote’a yazdığınızda rclone otomatik olarak şifreleyip yükleyecek:
rclone copy /etc/sensitive-configs gdrive-encrypted:configs --progress
Google Drive’a baktığınızda dosya isimlerinin de anlamsız karakterlere dönüştüğünü göreceksiniz. Sadece doğru şifreyle okunabilirler.
Gerçek Dünya Senaryo 3: PostgreSQL Yedekleme
PostgreSQL kullanan uygulamalar için özelleştirilmiş bir yedekleme akışı:
#!/bin/bash
# /usr/local/bin/backup-postgres.sh
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/tmp/pg_backups"
GDRIVE_DEST="gdrive:Backups/postgresql"
mkdir -p "$BACKUP_DIR"
# Tüm veritabanlarını listele ve ayrı ayrı yedekle
for DB in $(sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'postgres');"); do
DB=$(echo $DB | tr -d ' ')
if [ -n "$DB" ]; then
echo "Veritabanı yedekleniyor: $DB"
sudo -u postgres pg_dump "$DB" | gzip > "${BACKUP_DIR}/${DB}_${TIMESTAMP}.sql.gz"
fi
done
# Google Drive'a yükle
rclone copy "$BACKUP_DIR" "${GDRIVE_DEST}"
--include "*.gz"
--log-level INFO
--stats-one-line
# Temizlik
rm -f "${BACKUP_DIR}"/*.gz
# 14 günden eski yedekleri Google Drive'da da temizle
rclone delete "$GDRIVE_DEST" --min-age 14d
echo "PostgreSQL yedekleme tamamlandı: $(date)"
Bant Genişliği ve Performans Yönetimi
Production sunucularda yedekleme trafiğinin normal işlemleri etkilememesi için bandwidth sınırlaması kritik.
# Maksimum 5MB/s hızla yükle
rclone copy /var/backups gdrive:Backups --bwlimit 5M
# Gün içi ve gece farklı limitler (07:00-23:00 arası 2M, gece 50M)
rclone copy /var/backups gdrive:Backups --bwlimit "07:00,2M 23:00,50M"
# Paralel transfer sayısını ayarla
rclone copy /var/backups gdrive:Backups
--transfers 4
--checkers 8
--bwlimit 10M
--progress
Yedekleme Doğrulama
Yedek almak kadar yedeklerin çalışıp çalışmadığını kontrol etmek de önemli. Rclone’un check komutu bunu yapmanızı sağlar:
# Kaynak ve hedef arasındaki farkları kontrol et
rclone check /var/backups gdrive:Backups
# Sadece eksik dosyaları göster
rclone check /var/backups gdrive:Backups --missing-on-dst
# Hash doğrulaması ile kontrol et
rclone check /var/backups gdrive:Backups --download
Düzenli doğrulama için haftalık çalışan bir script ekleyin:
#!/bin/bash
# /usr/local/bin/verify-backup.sh
RESULT=$(rclone check /var/backups gdrive:Backups 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "UYARI: Yedekleme doğrulama başarısız!" | mail -s "Backup Verify Hatası" [email protected]
echo "$RESULT" | mail -s "Backup Verify Detayı" [email protected]
fi
Rclone Mount ile Google Drive’ı Dosya Sistemi Olarak Bağlama
Bazen Google Drive’a doğrudan bir klasör gibi erişmek isteyebilirsiniz:
# FUSE gerekli
sudo apt install fuse
# Mount noktası oluştur
mkdir -p /mnt/gdrive
# Mount et
rclone mount gdrive: /mnt/gdrive
--daemon
--vfs-cache-mode full
--vfs-cache-max-size 10G
--log-file /var/log/rclone-mount.log
# Unmount için
fusermount -u /mnt/gdrive
Systemd ile mount işlemini otomatikleştirmek için /etc/systemd/system/rclone-gdrive.service dosyası oluşturun:
[Unit]
Description=RClone Google Drive Mount
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=www-data
ExecStart=/usr/bin/rclone mount gdrive: /mnt/gdrive
--config=/home/www-data/.config/rclone/rclone.conf
--vfs-cache-mode full
--vfs-cache-max-size 5G
--log-file /var/log/rclone-mount.log
--log-level INFO
ExecStop=/bin/fusermount -u /mnt/gdrive
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl enable rclone-gdrive
sudo systemctl start rclone-gdrive
Sık Yapılan Hatalar ve Çözümleri
Google API rate limiting: Çok sayıda küçük dosyayı aynı anda yüklemeye çalışırsanız Google API limitlerine takılabilirsiniz. --tpslimit 10 parametresi saniyedeki işlem sayısını sınırlar.
Token süresi dolması: Uzun süre kullanılmayan tokenlar geçersiz olabilir. Rclone genellikle bunu otomatik yeniler ama refresh token da expire olursa yeniden yetkilendirme gerekir.
Büyük dosyalar için chunk boyutu: Google Drive 5TB’a kadar tek dosya destekler ama büyük dosyaları parçalara bölerek yüklemek daha güvenilirdir:
rclone copy buyuk-dosya.tar.gz gdrive:Backups
--drive-chunk-size 256M
--transfers 1
İzin sorunları: Cron ile çalıştırılan scriptlerde rclone config dosyasını bulamazsa:
rclone --config /root/.config/rclone/rclone.conf copy /var/backups gdrive:Backups
Monitoring ve Alerting
Yedekleme işlemlerini izlemek için basit bir yaklaşım:
#!/bin/bash
# backup-with-monitoring.sh
START_TIME=$(date +%s)
rclone sync /var/backups gdrive:Backups
--log-file /var/log/rclone.log
--log-level INFO
--stats 60s
--stats-log-level NOTICE
EXIT_CODE=$?
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
if [ $EXIT_CODE -eq 0 ]; then
# Healthchecks.io veya benzeri bir servis kullanıyorsanız
curl -fsS "https://hc-ping.com/SIZIN-UUID-BURAYA" > /dev/null
echo "Yedekleme başarılı. Süre: ${DURATION} saniye" >> /var/log/rclone.log
else
# Slack webhook ile bildirim
curl -X POST -H 'Content-type: application/json'
--data "{"text":"HATA: $(hostname) yedekleme başarısız! Süre: ${DURATION}s"}"
"https://hooks.slack.com/services/SIZIN/WEBHOOK/URL"
fi
Sonuç
Rclone ile Google Drive entegrasyonu, nispeten düşük maliyetle sağlam bir yedekleme altyapısı kurmanızı sağlıyor. Özellikle küçük ve orta ölçekli yapılar için ideal bir çözüm. Şu ana kadar anlattıklarımı özetlersek:
- Google Cloud Console’da OAuth kimlik bilgilerini alın ve rclone’u yapılandırın
- Headless sunucularda token işlemini yerel makinede yapıp sunucuya kopyalayın
- Hassas veriler için mutlaka crypt remote kullanın
- Bandwidth limitlemesini ihmal etmeyin, production trafiğini etkileyebilir
- Sadece yedek almayın,
rclone checkile düzenli doğrulama yapın - Cron joblarınızın çalışıp çalışmadığını healthcheck servisleri ile izleyin
Yedekleme altyapısı “bir kez kurar unutursunuz” türünden bir şey değil. Ay da bir geri yükleme testi yapın, logları gözden geçirin ve retention politikalarınızın düzgün işlediğini kontrol edin. Felaket anında yedeğin var olduğunu değil, yedeğin çalıştığını bilmek istersiniz.
