Linux'ta rsync ile yedek alma: sunucudan sunucuya ve zamanlanmış

Linux Sunucu (SSH) 71 görüntülenme Markdown

rsync, iki yer arasında dosyaları eşitleyen, yalnızca değişenleri aktaran bir araçtır. Bu yüzden ilk yedek uzun sürse de sonrakiler saniyeler alır. Yedek stratejinizin temel taşı olabilir: sunucudaki önemli klasörleri her gece başka bir yere kopyalar.

Temel kullanım

rsync -avz /var/www/ [email protected]:/yedekler/www/

Bayraklar: -a izinleri, sahipleri ve zamanları korur, -v yaptığını yazar, -z aktarım sırasında sıkıştırır. Kaynak yoldaki sondaki eğik çizgi önemlidir: /var/www/ klasörün içindekileri, /var/www ise klasörün kendisini de kopyalar. Karışırsa hedefte bir iç içe klasör oluşur.

Önce deneme çalıştırması

Ne yapacağını görmek için -n (dry run) ekleyin; hiçbir dosyaya dokunmaz:

rsync -avzn /var/www/ [email protected]:/yedekler/www/

Silinen dosyaları da eşitlemek: --delete

Kaynakta sildiğiniz dosyanın hedefte de silinmesini isterseniz --delete ekleyin. Dikkat: bu bayrak hedefte kaynakta olmayan her şeyi siler. Yanlış yola yazarsanız hedefteki verilerinizi kaybedersiniz. Önce -n ile deneyin. Ayrıca bu bir "ayna"dır, yedek değildir: kaynakta yanlışlıkla silinen dosya bir sonraki eşitlemede yedekten de silinir. Geçmiş sürümler için tarih klasörlü yedek kullanın (aşağıda).

Parolasız çalıştırma (SSH anahtarı)

Otomatik çalışması için hedef sunucuya anahtarla bağlanmanız gerekir:

ssh-keygen -t ed25519 -f ~/.ssh/yedek_anahtar -N ""
ssh-copy-id -i ~/.ssh/yedek_anahtar.pub [email protected]
rsync -avz -e "ssh -i ~/.ssh/yedek_anahtar" /var/www/ [email protected]:/yedekler/www/

Anahtar parolasız olduğundan dosyayı yalnızca kendi kullanıcınız okuyabilmeli ve hedef sunucudaki kullanıcı yalnızca yedek klasörüne yazabilmelidir. Anahtar ayrıntıları: SSH anahtarı.

Geçmiş sürümleri saklamak

Her gün ayrı klasör oluşturup, değişmeyen dosyaları önceki günle bağlantılı (hardlink) tutmak, az yer harcayarak geçmiş sürümler verir:

BUGUN=$(date +%F)
rsync -az --link-dest=../son -e "ssh -i ~/.ssh/yedek_anahtar" /var/www/ [email protected]:/yedekler/$BUGUN/
ssh -i ~/.ssh/yedek_anahtar [email protected] "ln -sfn /yedekler/$BUGUN /yedekler/son"

Eski günleri periyodik silmeyi unutmayın, aksi halde yedek diski dolar.

Veritabanını ayrıca dökün

Çalışan bir veritabanının dosyalarını rsync ile kopyalamayın; tutarsız çıkar. Önce döküm alın, sonra rsync ile gönderin:

mysqldump --single-transaction --all-databases | gzip > /yedekler/db-$(date +%F).sql.gz

Zamanlamak

Yukarıdaki komutları bir betiğe koyup her gece çalıştırın: cron görevi ekleme. Örneğin her gece 03:30: 30 3 * * * /usr/local/bin/yedek.sh >> /var/log/yedek.log 2>&1. Günlüğe bakıp çalışıp çalışmadığını zaman zaman kontrol edin.

Geri yükleme

Yönü tersine çevirmeniz yeterlidir: rsync -avz [email protected]:/yedekler/www/ /var/www/. Geri yüklemeyi bir kez deneyin; çalışmayan yedek yedek değildir. Daha geniş strateji için 3-2-1 kuralına, panel seçenekleri için yedek makalesine bakın.

Sık sorulanlar

Windows'tan Linux'a rsync yapabilir miyim?

WSL ya da Git Bash içinde rsync çalışır. Windows sunucuda dosya yedeği için ise robocopy kullanabilirsiniz.

rsync çok yavaş.

İlk çalıştırma tüm dosyaları kopyalar. Küçük çok sayıda dosya yavaştır; ağ hızınıza da bağlıdır. --progress ile ilerlemeyi izleyin, sonraki çalışmalar çok daha hızlı olur.

Hedef sunucu kim olabilir?

Başka bir sunucunuz, evdeki bir bilgisayar ya da bir depolama hizmeti. Önemli olan yedeğin kaynakla aynı sunucuda ya da aynı diskte durmamasıdır.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.