Linux Sunucularda rsync ile Otomatik ve Güvenilir Yedekleme Kurulumu
Linux sunucularınızda rsync kullanarak otomatik, güvenilir ve verimli yedekleme sistemleri nasıl kurulur? Adım adım rehber ve en iyi uygulamalar.
Caner Serbest
Sistem ve Altyapı
7 min read
Linux Sunucularda rsync ile Otomatik ve Güvenilir Yedekleme Kurulumu
Sistem yöneticileri için en kritik görevlerden biri, sunucuların ve verilerin güvenliğini sağlamaktır. Veri kaybı, donanım arızaları, insan hataları veya siber saldırılar gibi birçok tehditle karşı karşıyayız. Bu nedenle, güvenilir bir yedekleme stratejisi oluşturmak, sadece tavsiye edilen bir uygulama değil, zorunluluktur.
Bu rehberde, rsync aracını kullanarak Linux sunucularınızda otomatik, verimli ve güvenilir yedekleme sistemleri nasıl kuracağınızı adım adım öğreneceksiniz. rsync, yerel ve uzak sistemler arasında dosya senkronizasyonu yapabilen güçlü bir komut satırı aracıdır. Hem küçük hem de büyük ölçekli sistemlerde kullanılabilir ve veri kaybını minimize etmek için ideal bir çözümdür.
📌 Neden rsync?
rsync’in tercih edilme sebeplerini birkaç başlık altında inceleyebiliriz:
| Özellik | Açıklama |
|---|---|
| Verimlilik | Yalnızca değişiklik yapılan dosyaları aktarır (incremental backup). Bu sayede bant genişliği ve zaman tasarrufu sağlar. |
| Güvenlik | SSH üzerinden çalışabilir, böylece veriler şifrelenmiş olarak iletilir. |
| Esneklik | Yerel diskler, uzak sunucular, bulut depolama (AWS S3, Google Cloud Storage vb.) ve hatta USB sürücüler gibi farklı hedeflere yedekleme yapılabilir. |
| Otomatikleştirilebilirlik | Cron gibi zamanlama araçlarıyla otomatik olarak çalıştırılabilir. |
| Veri Bütünlüğü | Aktarım sırasında dosya bütünlüğünü kontrol eder ve hata durumunda uyarı verir. |
Diğer popüler yedekleme araçları olan tar, dd veya BorgBackup ile karşılaştırıldığında, rsync özellikle senkronizasyon odaklı bir araçtır ve veri kaybını önlemek için ideal bir seçenektir.
🔧 rsync Temel Kullanımı
rsync’in temel sözdizimi aşağıdaki gibidir:
rsync [seçenekler] kaynak_dizin hedef_dizin
Temel Seçenekler
| Seçenek | Açıklama |
|---|---|
-a | Arşiv modunu etkinleştirir (sembolik bağlantılar, izinler, sahiplik, tarih bilgilerini korur). |
-v | Ayrıntılı çıktı verir (verbose). |
-z | Aktarım sırasında verileri sıkıştırır. |
-P | Aktarım ilerlemesini ve kısmi aktarılan dosyaları gösterir. |
-h | İnsan tarafından okunabilir formatta çıktı verir. |
--delete | Hedef dizinde kaynakta olmayan dosyaları siler. |
--exclude | Belirli dosya veya dizinleri hariç tutar. |
-e ssh | Aktarımı SSH üzerinden şifreler. |
Örnek Kullanımlar
- Yerel yedekleme (örneğin
/homedizinini/backupdizinine yedeklemek):
rsync -avz --delete /home/ /backup/home_backup/
- Uzak sunucuya yedekleme (SSH üzerinden):
rsync -avz -e ssh /home/ kullanici@uzak_sunucu:/backup/home_backup/
- Belirli dosya türlerini hariç tutarak yedekleme:
rsync -avz --exclude='*.tmp' --exclude='*.log' /home/ /backup/home_backup/
- Sadece değişiklikleri senkronize etmek (incremental backup):
rsync -avz --delete /home/ /backup/home_backup/
🛠️ Otomatik Yedekleme Sistemi Kurulumu
Otomatik yedekleme sistemini kurmak için aşağıdaki adımları izleyebilirsiniz. Bu sistemde, Cron kullanarak belirli aralıklarla yedekleme işlemlerini otomatikleştireceğiz.
1. Yedekleme Dizinini Hazırlama
Öncelikle, yedeklerin saklanacağı dizini oluşturun ve gerekli izinleri ayarlayın:
sudo mkdir -p /backup/server_backups
sudo chown -R root:root /backup/server_backups
sudo chmod -R 700 /backup/server_backups
2. Yedekleme Komutunu Oluşturma
Yedekleme komutunu bir shell script dosyasına kaydedin. Örneğin, /usr/local/bin/backup_script.sh dosyasını oluşturun:
#!/bin/bash
# Yedeklenecek dizinler
SOURCE_DIRS="/home /etc /var/www"
# Hedef dizin
BACKUP_DIR="/backup/server_backups"
# Tarih etiketi (örneğin: 2024-05-20_14-30-00)
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# Yedek dizini oluştur
BACKUP_PATH="$BACKUP_DIR/backup_$DATE"
mkdir -p "$BACKUP_PATH"
# rsync komutu ile yedekleme
rsync -avz --delete --exclude='/var/www/cache/*' --exclude='/var/www/logs/*' $SOURCE_DIRS "$BACKUP_PATH"
# Eski yedekleri temizle (örneğin, 7 günden eski olanları sil)
find "$BACKUP_DIR" -type d -name "backup_*" -mtime +7 -exec rm -rf {} \;
echo "Yedekleme tamamlandı: $BACKUP_PATH"
Bu script:
/home,/etcve/var/wwwdizinlerini yedekler./var/www/cacheve/var/www/logsdizinlerini hariç tutar.- Her yedek için tarih etiketli bir dizin oluşturur.
- 7 günden eski yedekleri otomatik olarak siler.
3. Script’e Çalıştırma İzni Verme
sudo chmod +x /usr/local/bin/backup_script.sh
4. Cron ile Otomatikleştirme
Cron kullanarak script’in belirli aralıklarla çalışmasını sağlayın. Örneğin, her gün saat 02:00’de yedekleme yapılmasını istiyorsanız:
sudo crontab -e
Açılan editörde aşağıdaki satırı ekleyin:
0 2 * * * /usr/local/bin/backup_script.sh >> /var/log/backup.log 2>&1
Bu komut:
- Her gün saat 02:00’de script’i çalıştırır.
- Çıktıları
/var/log/backup.logdosyasına kaydeder.
Cron’un çalışıp çalışmadığını kontrol etmek için:
tail -f /var/log/backup.log
5. Log Dosyalarını Yönetme
Yedekleme loglarını düzenli olarak kontrol etmek önemlidir. Log dosyasının boyutu çok büyürse, logrotate kullanarak yönetebilirsiniz. Örneğin, /etc/logrotate.d/backup dosyasını oluşturun:
/var/log/backup.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 root root
}
Bu ayarlar:
- Her gün log dosyasını sıkıştırır.
- 7 günlük log saklar.
- Log dosyasını yeniden oluşturur.
🔐 Güvenlik Önlemleri
Yedekleme sisteminizin güvenliğini sağlamak için aşağıdaki önlemleri almanız önemlidir:
1. SSH Anahtar Tabanlı Giriş Kullanma
Uzak sunuculara yedekleme yaparken SSH anahtar tabanlı giriş kullanın. Bu, hem güvenliği artırır hem de manuel parola girme ihtiyacını ortadan kaldırır.
Adımlar:
- SSH anahtar çifti oluşturun (henüz yoksa):
ssh-keygen -t ed25519 -C "backup_script"
- Public anahtarı uzak sunucuya kopyalayın:
ssh-copy-id kullanici@uzak_sunucu
- SSH yapılandırmasını düzenleyin (
~/.ssh/config):
Host uzak_sunucu
HostName uzak_sunucu_ip
User kullanici
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
- rsync komutunda
-e sshkullanın:
rsync -avz -e ssh /home/ kullanici@uzak_sunucu:/backup/home_backup/
2. Yedekleme Dizini İçin Ayrı Bir Kullanıcı Oluşturma
Yedekleme dizini için ayrı bir kullanıcı oluşturun ve bu kullanıcıya sadece okuma/yazma yetkisi verin:
sudo adduser backupuser
sudo mkdir -p /backup/server_backups
sudo chown backupuser:backupuser /backup/server_backups
Ardından, script’i bu kullanıcıyla çalıştırın:
sudo -u backupuser /usr/local/bin/backup_script.sh
3. rsync ile --delete Seçeneğini Dikkatli Kullanma
--delete seçeneği, hedef dizinde kaynakta olmayan dosyaları siler. Bu, yanlışlıkla veri kaybına neden olabilir. Önce test edin! Örneğin, sadece --dry-run seçeneğiyle simülasyon yapın:
rsync -avzn --delete /home/ /backup/home_backup/
Eğer sonuçtan memnunsanız, --dry-run kaldırarak gerçek yedeklemeyi yapın.
📊 Yedekleme Stratejileri ve En İyi Uygulamalar
1. 3-2-1 Yedekleme Kuralı
Güvenilir bir yedekleme stratejisi için 3-2-1 kuralını uygulayın:
- 3 kopya veriniz olsun (orijinal + 2 yedek).
- 2 farklı ortamda saklayın (örneğin, yerel disk + uzak sunucu).
- 1 kopya fiziksel olarak farklı bir konumda olsun (örneğin, bulut depolama).
2. Yedekleme Türleri
| Tür | Açıklama | Avantajları | Dezavantajları |
|---|---|---|---|
| Tam Yedekleme | Tüm verilerin kopyası. | Kolay kurtarma. | Depolama alanı ve zaman tüketir. |
| Artımlı Yedekleme | Yalnızca değişiklik yapılan dosyalar. | Hızlı ve verimli. | Kurtarma için tüm artımlı yedeklere ihtiyaç duyulabilir. |
| Fark Yedekleme | Son tam yedekten sonraki tüm değişiklikler. | Artımlı yedeklemeye göre daha az veri. | Kurtarma için en son tam yedek ve en son fark yedeği gereklidir. |
Öneri: Tam yedeklemeyi haftalık, artımlı yedeklemeyi günlük olarak planlayın.
3. Yedekleme Sıklığı
| Veri Türü | Önerilen Sıklık |
|---|---|
| Kritik veriler (örneğin veritabanları) | Günlük |
Kullanıcı verileri (örneğin /home) | Günlük/Haftalık |
Sistem yapılandırmaları (örneğin /etc) | Haftalık |
Geçici dosyalar (örneğin /tmp) | Hariç tutulmalı |
4. Yedekleme Doğrulama
Yedekleme yaptığınızdan emin olmak için doğrulama adımları uygulayın:
- Dosya bütünlüğü kontrolü:
sha256sum /backup/server_backups/backup_2024-05-20_14-30-00/home/user/file.txt
- Yedekten kurtarma testi:
rsync -avz /backup/server_backups/backup_2024-05-20_14-30-00/home/ /tmp/test_recovery/
- Log dosyalarını inceleme:
grep -i "error\|failed" /var/log/backup.log
🚀 Gelişmiş Senaryolar
1. Uzak Sunucuya Yedekleme (Bulut veya Veri Merkezi)
Aşağıdaki komutla, yedekleri AWS S3’e gönderin:
# AWS CLI kurulumu (henüz yoksa)
sudo apt install awscli -y
# AWS CLI yapılandırma
aws configure
# Yedekleme komutu
rsync -avz --delete /home/ /tmp/s3_sync/
aws s3 sync /tmp/s3_sync/ s3://your-bucket-name/backups/server_backups/
2. Veritabanı Yedekleme
Veritabanı yedeklerini de dahil etmek için script’e aşağıdaki satırları ekleyin:
# MySQL veritabanı yedekleme
mysqldump -u root -pPASSWORD --all-databases > /tmp/all_databases.sql
rsync -avz /tmp/all_databases.sql "$BACKUP_PATH/databases/"
3. Docker Konteyner Yedekleme
Docker konteyner verilerini yedeklemek için:
# Konteyner listesini al
CONTAINER_IDS=$(docker ps -aq)
# Her konteynerin verilerini yedekle
for CONTAINER_ID in $CONTAINER_IDS; do
CONTAINER_NAME=$(docker inspect --format '{{.Name}}' $CONTAINER_ID | tr -d '/')
docker export $CONTAINER_ID > "$BACKUP_PATH/docker/$CONTAINER_NAME.tar"
done
⚠️ Yaygın Hatalar ve Çözümleri
| Hata | Nedeni | Çözümü |
|---|---|---|
| Yedekleme başarısız oldu | Disk dolu, izin sorunu, ağ bağlantısı kesildi. | Log dosyalarını kontrol edin, disk alanını temizleyin. |
| Hedef dizinde dosyalar eksik | --delete seçeneğiyle yanlışlıkla silindi. | --dry-run ile test edin, kurtarma script’i oluşturun. |
| Yavaş yedekleme | Ağ bant genişliği sınırlı, çok fazla dosya. | Sıkıştırma kullanın (-z), hariç tutulacak dizinleri belirleyin. |
| Yedekten kurtarma başarısız | Dosya bütünlüğü bozulmuş. | Doğrulama adımlarını uygulayın, checksum kontrolü yapın. |
| Cron çalışmıyor | PATH sorunu, script izinleri eksik. | Cron’a tam yolu kullanın, script’e çalıştırma izni verin. |
📚 Kaynaklar ve İleri Okuma
- rsync Resmi Dokümantasyonu
- Linux Yedekleme Stratejileri
- Cron Kullanımı Rehberi
- SSH Anahtar Tabanlı Giriş
- AWS S3 ile Yedekleme
🎯 Sonuç
Linux sunucularınızda rsync kullanarak otomatik, güvenilir ve verimli yedekleme sistemleri kurmak, veri kaybını önlemenin en etkili yollarından biridir. Bu rehberde öğrendiğiniz adımları takip ederek:
✅ Verilerinizi düzenli olarak yedekleyebilirsiniz. ✅ Yedekleme işlemlerini otomatikleştirebilirsiniz. ✅ Güvenlik önlemleriyle verilerinizi koruyabilirsiniz. ✅ Yedeklerden kolayca kurtarma yapabilirsiniz.
Unutmayın, yedekleme sadece bir kopyadır, kurtarma ise gerçek testtir. Düzenli olarak yedeklerden kurtarma testleri yaparak sisteminizin hazır olduğunu doğrulayın.
Eğer bu rehber size faydalı olduysa, beğenmeyi, paylaşmayı ve yorum yapmayı unutmayın. Teknik içerikler üretmeye devam edeceğim, takipte kalın!
Sorularınız veya önerileriniz varsa, aşağıdaki yorum bölümünde paylaşabilirsiniz.
Bu rehber, Caner Serbest tarafından hazırlanmıştır. Tüm hakları saklıdır.
Bu yazı Mistral ile otomatik oluşturulmuştur.