Takip et

Rsync Nedir ve Neden Kullanmalıyız?

Rsync ile Yerel ve Uzak Dizinleri Senkronize Etme Rehberi

Rsync, dosya senkronizasyonu için güçlü ve esnek bir araçtır. Bu kapsamlı rehberde, Rsync’i kullanarak yerel ve uzak dizinleri nasıl etkili bir şekilde senkronize edeceğinizi, veri yedekleme ve aktarım işlemlerinizi nasıl optimize edeceğinizi adım adım öğreneceksiniz. İster bir sunucu yöneticisi olun, ister bir geliştirici, isterse sadece önemli verilerini yedeklemek isteyen bir kullanıcı; Rsync’in sunduğu olanaklar iş akışınızı kökten değiştirecektir.

Rsync Nedir ve Neden Kullanmalıyız?

Rsync, “remote sync” kelimelerinin kısaltmasıdır ve adından da anlaşılacağı gibi, dosyaları ve dizinleri yerel veya uzak konumlar arasında verimli bir şekilde senkronize etmek için tasarlanmış, komut satırı tabanlı, açık kaynaklı bir yardımcı programdır. Geleneksel dosya kopyalama yöntemlerinden (örneğin cp veya scp) farklı olarak, Rsync sadece kaynak ve hedef arasındaki değişen kısımları (farkları) transfer ederek bant genişliğinden ve zamandan önemli ölçüde tasarruf sağlar. Bu “delta transfer” algoritması, özellikle büyük dosyalar veya yavaş ağ bağlantıları üzerinden yapılan senkronizasyonlarda Rsync’i vazgeçilmez kılar.

Rsync’in temel avantajları arasında veri bütünlüğünü koruma, hızı optimize etme ve esnek yapılandırma seçenekleri bulunur. Örneğin, dosyaları transfer ederken sıkıştırma uygulayabilir, sembolik linkleri, izinleri, sahiplik bilgilerini ve zaman damgalarını koruyabilir. Bu özellikler, Rsync’i sadece basit bir dosya kopyalama aracından çok daha fazlası yapar; onu güçlü bir yedekleme ve veri taşıma çözümüne dönüştürür. Özellikle sunucular arası veri aktarımlarında, web sitesi güncellemelerinde veya geliştirme ortamlarının senkronizasyonunda Rsync’in sunduğu performans ve güvenilirlik, iş yükünüzü hafifletir ve olası hataları minimize eder.

Peki, neden Rsync kullanmalıyız? Cevap oldukça basit: verimlilik ve güvenilirlik. Diyelim ki, her gün gigabaytlarca verinin bulunduğu bir dizini uzak bir sunucuya yedeklemeniz gerekiyor. Eğer bunu cp veya scp ile yapmaya kalkarsanız, her seferinde tüm veriyi yeniden kopyalamanız gerekir ki bu hem çok zaman alır hem de ağ kaynaklarınızı gereksiz yere tüketir. Rsync ise akıllıca davranır; kaynak ve hedef dizinleri karşılaştırır, yalnızca değişen veya yeni eklenen dosyaları tespit eder ve sadece bu farkları transfer eder. Hatta bir dosyanın sadece küçük bir kısmı değiştiyse, Rsync sadece o değişen bloğu göndererek daha da fazla optimizasyon sağlar. Bu delta transfer özelliği, özellikle büyük veritabanı yedeklemeleri veya medya dosyaları gibi sık güncellenen ama tamamı değişmeyen içerikler için hayati önem taşır.

Ayrıca, Rsync’in esnekliği sayesinde, senkronizasyon süreçlerinizi ihtiyaçlarınıza göre ince ayar yapabilirsiniz. Örneğin, belirli dosya türlerini dışarıda bırakabilir, yalnızca belirli boyutlardaki dosyaları kopyalayabilir veya eski sürümleri koruyarak sürüm kontrolü benzeri bir yedekleme stratejisi oluşturabilirsiniz. Bu sayede, gereksiz verilerin aktarımını engelleyerek hem depolama alanından hem de bant genişliğinden tasarruf edersiniz. Sonuç olarak, Rsync; veri yönetimi, yedekleme ve dağıtım süreçlerinizde size zaman, kaynak ve gönül rahatlığı sağlayan güçlü bir müttefiktir.

Rsync Kurulumu ve Temel Kullanımına Giriş

Rsync’i kullanmaya başlamak oldukça kolaydır, çünkü çoğu Linux ve macOS dağıtımında genellikle varsayılan olarak yüklü gelir. Eğer yüklü değilse veya Windows kullanıyorsanız, birkaç basit adımla Rsync’i sisteminize dahil edebilirsiniz. Bu bölümde, Rsync’in kurulumunu ve temel komut yapısını öğrenerek ilk senkronizasyon işleminizi nasıl gerçekleştireceğinizi adım adım inceleyeceğiz.

Rsync Çeşitli İşletim Sistemlerinde Nasıl Kurulur?

Linux (Debian/Ubuntu tabanlı):

Eğer sisteminizde Rsync yüklü değilse, terminali açıp aşağıdaki komutu kullanarak kolayca kurabilirsiniz:

sudo apt update
sudo apt install rsync

Linux (Fedora/CentOS tabanlı):

sudo yum install rsync

macOS:

macOS’ta Rsync genellikle varsayılan olarak yüklü gelir. Terminalde rsync --version komutunu çalıştırarak yüklü olup olmadığını kontrol edebilirsiniz. Eğer daha yeni bir sürüm veya Homebrew üzerinden kurulum yapmak isterseniz:

brew install rsync

Windows:

Windows’ta Rsync’i doğrudan çalıştırmak mümkün değildir. Ancak, Windows Subsystem for Linux (WSL) kullanarak Linux ortamını taklit edebilir ve yukarıdaki Linux komutlarıyla Rsync’i kurabilirsiniz. Alternatif olarak, Cygwin gibi bir Unix benzeri ortam veya DeltaCopy gibi Rsync tabanlı GUI araçları da kullanılabilir. WSL, yerel ve uzak Windows dizinleri arasında senkronizasyon için en pratik yöntemlerden biridir.

Rsync’in Temel Komut Yapısı ve İlk Adımlar

Rsync’in temel komut yapısı oldukça basittir: rsync [SEÇENEKLER] KAYNAK HEDEF. Burada KAYNAK, kopyalamak istediğiniz dosyaların veya dizinlerin bulunduğu yerdir; HEDEF ise bu dosyaların kopyalanacağı yerdir. Hem kaynak hem de hedef yerel bir dizin olabileceği gibi, uzak bir sunucudaki bir dizin de olabilir.

Yerelden Yerel Dizinlere Basit Kopyalama:

Öncelikle, Rsync’in nasıl çalıştığını anlamak için basit bir yerel kopyalama örneğiyle başlayalım. Diyelim ki /home/kullanici/belgelerim dizinindeki tüm dosyaları /home/kullanici/yedekler dizinine kopyalamak istiyorsunuz:

rsync -av /home/kullanici/belgelerim/ /home/kullanici/yedekler/

Bu komuttaki seçenekler oldukça önemlidir:

  • -a (--archive): Arşiv modu. Bu, Rsync’in en sık kullanılan seçeneklerinden biridir. Dosyaları rekürsif olarak kopyalamanın yanı sıra, sembolik linkleri, izinleri, zaman damgalarını, grup ve sahip bilgilerini de korur. Yani, dosyaların “arşiv niteliklerini” olduğu gibi taşır.
  • -v (--verbose): Ayrıntılı çıktı. Bu seçenek, Rsync’in hangi dosyaları kopyaladığını veya hangi işlemleri yaptığını terminalde gösterir. Bu sayede işlemin ilerleyişini takip edebilirsiniz.

Dikkat Edilmesi Gereken Nokta: Kaynak Yolunun Sonundaki Eğik Çizgi (/)!

Yukarıdaki örnekte /home/kullanici/belgelerim/ şeklinde kaynak yolunun sonunda bir eğik çizgi (/) kullandık. Bu kritik bir ayrıntıdır:

  • /home/kullanici/belgelerim/ (sonunda eğik çizgi ile): Bu, belgelerim dizininin içeriğini kopyala demektir. Yani, belgelerim dizininin içindeki tüm dosyalar ve alt dizinler doğrudan /home/kullanici/yedekler/ dizinine kopyalanır.
  • /home/kullanici/belgelerim (sonunda eğik çizgi olmadan): Bu, belgelerim dizininin kendisini kopyala demektir. Yani, /home/kullanici/yedekler/belgelerim/ şeklinde yeni bir dizin oluşturulur ve belgelerim dizininin tüm içeriği bu yeni dizine kopyalanır.

Bu fark, özellikle otomatize edilmiş betiklerde veya büyük veri transferlerinde istenmeyen sonuçlara yol açmamak için çok iyi anlaşılmalıdır.

İşlemi Önizleme: Dry Run (Kuru Çalıştırma)

Rsync’in en faydalı özelliklerinden biri --dry-run (veya kısaca -n) seçeneğidir. Bu seçenek, Rsync’in gerçekte hiçbir dosya kopyalamadan veya silmeden, sadece ne yapacağını size göstermesini sağlar. Bu, özellikle karmaşık komutlar veya --delete gibi potansiyel olarak yıkıcı seçenekler kullanırken olası hataları önlemek için hayati bir adımdır.

rsync -avn /home/kullanici/belgelerim/ /home/kullanici/yedekler/

Bu komutu çalıştırdığınızda, Rsync size hangi dosyaların kopyalanacağını, hangilerinin güncelleneceğini veya silineceğini listeleyecektir, ancak gerçekte hiçbir değişiklik yapmayacaktır. Bu sayede, komutunuzun beklediğiniz gibi çalışıp çalışmadığını kontrol edebilirsiniz.

İlerleme Takibi: Progress Seçeneği

Büyük dosyaları veya çok sayıda dosyayı senkronize ederken, işlemin ne kadar ilerlediğini görmek isteyebilirsiniz. --progress seçeneği, her dosyanın kopyalama durumunu, yüzde olarak ilerlemesini ve tahmini kalan süreyi gösterir:

rsync -av --progress /home/kullanici/belgelerim/ /home/kullanici/yedekler/

Bu temel bilgilerle, Rsync’in gücünü keşfetmeye hazırsınız. Bir sonraki bölümde, Rsync’i uzak dizinlerle nasıl senkronize edeceğimize odaklanacağız, ki bu da Rsync’in en yaygın kullanım alanlarından biridir.

Yerelden Uzak Dizinlere Rsync ile Nasıl Senkronizasyon Yapılır?

Rsync’in gerçek gücü, yerel sisteminiz ile uzak bir sunucu arasında dosya senkronizasyonu yaparken ortaya çıkar. Bu işlem genellikle SSH (Secure Shell) protokolü üzerinden güvenli bir şekilde gerçekleştirilir. SSH, verilerin şifrelenerek aktarılmasını sağlar ve böylece hassas bilgilerinizin güvenliğini garanti altına alır. Bu bölümde, Rsync’i SSH ile birleştirerek yerel ve uzak dizinler arasında nasıl senkronizasyon yapacağınızı, sık kullanılan seçenekleri ve pratik vaka analizlerini ele alacağız.

SSH Üzerinden Uzak Bağlantı ve Rsync Komut Yapısı

Rsync, varsayılan olarak SSH’yi kullanarak uzak sistemlere bağlanır. Uzak bir sisteme bağlanmak için Rsync komut yapısına kullanıcı adını ve sunucu adresini eklemeniz yeterlidir. Uzak yol genellikle kullanici@sunucu_adresi:/uzak/dizin/yolu formatında belirtilir.

Yerelden Uzak Sunucuya Dosya Gönderme:

Diyelim ki, yerel bilgisayarınızdaki /var/www/html/projem dizinini, uzak sunucudaki kullanici@ornek.com:/var/www/html/projem_yedek dizinine senkronize etmek istiyorsunuz:

rsync -avz --progress /var/www/html/projem/ kullanici@ornek.com:/var/www/html/projem_yedek

Bu komuttaki ek seçeneklere dikkat edelim:

  • -a (--archive): Daha önce bahsettiğimiz gibi, arşiv modu tüm dosya özelliklerini (izinler, zaman damgaları vb.) korur.
  • -v (--verbose): Ayrıntılı çıktı sağlar.
  • -z (--compress): Veri transferi sırasında dosyaları sıkıştırır. Bu, özellikle yavaş ağ bağlantılarında bant genişliğinden tasarruf etmenizi sağlar. Ancak, zaten sıkıştırılmış dosyalar (örneğin JPG, ZIP) için ek bir fayda sağlamaz ve hatta küçük bir performans düşüşüne neden olabilir.
  • --progress: Aktarımın ilerlemesini gösterir.

Komutu çalıştırdığınızda, SSH şifreniz istenecektir (eğer SSH anahtarlarıyla parola girmeden bağlantı kurmadıysanız). Şifreyi girdikten sonra, Rsync senkronizasyon işlemini başlatır.

Uzak Sunucudan Yerel Dizinlere Dosya Çekme:

Benzer şekilde, uzak sunucudaki bir dizini yerel sisteminize senkronize etmek de mümkündür. Örneğin, uzak sunucudaki /var/log/nginx dizinini yerel bilgisayarınızdaki /home/kullanici/nginx_loglari dizinine çekmek istiyorsunuz:

rsync -avz --progress kullanici@ornek.com:/var/log/nginx/ /home/kullanici/nginx_loglari

Burada kaynak ve hedef konumlarının yer değiştirdiğine dikkat edin. Komut yapısı aynı kalır, sadece akış yönü değişir.

Kritik Seçenek: --delete ve Önemi

Rsync’in en güçlü ancak dikkatli kullanılması gereken seçeneklerinden biri --delete‘dir. Bu seçenek, hedef dizinde kaynak dizinde bulunmayan dosyaların silinmesini sağlar. Bu, hem kaynak hem de hedef dizinin tamamen aynı olmasını istediğiniz durumlarda (örneğin, tam bir yansıma veya ayna kopyası oluştururken) çok kullanışlıdır.

rsync -avz --delete /var/www/html/projem/ kullanici@ornek.com:/var/www/html/projem_yedek

UYARI: --delete seçeneğini kullanmadan önce her zaman --dry-run (-n) ile komutu test etmeniz şiddetle tavsiye edilir. Yanlışlıkla önemli verilerinizi silmek istemezsiniz!

rsync -avzn --delete /var/www/html/projem/ kullanici@ornek.com:/var/www/html/projem_yedek

Bu komut, hangi dosyaların silineceğini size gösterecek, ancak gerçekte hiçbir şeyi silmeyecektir.

Vaka Analizi 1: Geliştirme Sunucusundan Üretim Sunucusuna Kod Dağıtımı

Bir web geliştiricisi olduğunuzu ve yerel geliştirme ortamınızda (veya bir test sunucusunda) bir web projesi üzerinde çalıştığınızı varsayalım. Yeni bir özellik geliştirdiniz ve bunu canlı üretim sunucusuna dağıtmanız gerekiyor. Rsync, bu işlemi hızlı, güvenli ve hatasız bir şekilde yapmanızı sağlar.

Senaryo: Yerel makinenizdeki ~/my-website/ dizinini, üretim sunucusundaki webadmin@live-server.com:/var/www/html/ dizinine dağıtmak.

Uzman İpucu: Dağıtımdan önce her zaman bir yedek alın ve --dry-run ile test edin!
rsync -avz --delete --exclude 'node_modules/' --exclude '.git/' --exclude '.env' --progress \ ~/my-website/ webadmin@live-server.com:/var/www/html/

Bu komut şunları yapar:

  • -avz --progress: Arşiv modunda, ayrıntılı, sıkıştırılmış ve ilerleme göstergeli senkronizasyon.
  • --delete: Üretim sunucusunda geliştirme ortamında olmayan dosyaları siler. Bu, eski dosyaların temizlenmesini sağlar.
  • --exclude 'node_modules/': node_modules dizinini kopyalamanın dışında bırakır. Bu tür bağımlılıklar genellikle üretim sunucusunda yeniden kurulur ve transfer edilmesi gereksizdir.
  • --exclude '.git/': Git versiyon kontrol dizinini dışarıda bırakır.
  • --exclude '.env': Çevre değişkenlerini içeren hassas .env dosyasını dışarıda bırakır, çünkü bu dosya genellikle üretimde farklıdır veya manuel olarak yönetilir.

Bu şekilde, Rsync ile sadece değişen kod dosyalarını hızlıca aktarırken, gereksiz veya hassas dosyaları güvenle dışarıda bırakarak üretim ortamınızın bütünlüğünü koruyabilirsiniz. Bu vaka analizi, Rsync’in esnekliğinin ve verimliliğinin gerçek dünya uygulamalarında nasıl değer kattığını açıkça göstermektedir.

Rsync ile Verimli Yedekleme Stratejileri Nasıl Oluşturulur?

Veri yedekleme, herhangi bir sistem yöneticisi veya kullanıcısı için kritik öneme sahiptir. Rsync, sadece dosyaları senkronize etmekle kalmaz, aynı zamanda akıllı ve verimli yedekleme stratejileri oluşturmanıza da olanak tanır. Özellikle artımlı yedekleme ve filtreleme seçenekleri sayesinde, disk alanından ve ağ bant genişliğinden tasarruf ederek güvenilir yedekler alabilirsiniz. Bu bölümde, Rsync ile nasıl etkili yedekleme çözümleri oluşturabileceğinizi, artımlı yedeklemenin avantajlarını ve dosya filtreleme tekniklerini inceleyeceğiz.

Artımlı Yedekleme ve Hard Link Kullanımı (--link-dest)

Artımlı yedekleme, sadece son yedeklemeden bu yana değişen dosyaları kopyalayarak yedekleme süresini ve depolama alanını minimize eden bir yöntemdir. Rsync, --link-dest seçeneği ile bu işlemi çok verimli bir şekilde gerçekleştirebilir. Bu seçenek, önceki bir yedeğe işaret eden hard link’ler oluşturarak, değişmeyen dosyaların her yedeklemede tekrar kopyalanmasını engeller. Sonuç olarak, her yedekleme tam bir yedekleme gibi görünse de, diskte sadece yeni veya değişen dosyalar yer kaplar.

Örnek Senaryo: Günlük Artımlı Yedekleme

Diyelim ki, her gün /home/kullanici/verilerim dizininin yedeğini /mnt/yedek_disk/gunluk_yedekler/ dizininde tutmak istiyorsunuz. Ve her yedekleme, o günün tarihiyle adlandırılmış bir dizine kaydedilecek.

#!/bin/bash

# Mevcut tarih
DATE=$(date +%Y-%m-%d)

# Kaynak dizin
SOURCE_DIR="/home/kullanici/verilerim/"

# Hedef dizinin ana yolu
BACKUP_BASE_DIR="/mnt/yedek_disk/gunluk_yedekler/"

# Bu yedeklemenin yapılacağı dizin
CURRENT_BACKUP_DIR="${BACKUP_BASE_DIR}${DATE}/"

# Önceki günün yedeği (eğer varsa)
# Dünkü yedeği bulmak için basit bir yol: en son oluşturulan dizini bulmak
PREVIOUS_BACKUP_DIR=$(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -name "2*" | sort -r | head -n 1)

# Yedekleme komutu
# Eğer önceki yedek varsa, --link-dest kullanarak artımlı yedekleme yap
if [ -d "$PREVIOUS_BACKUP_DIR" ] && [ "$PREVIOUS_BACKUP_DIR" != "$CURRENT_BACKUP_DIR" ]; then
    echo "Artımlı yedekleme yapılıyor, önceki yedek: $PREVIOUS_BACKUP_DIR"
    rsync -av --delete --link-dest="$PREVIOUS_BACKUP_DIR" "$SOURCE_DIR" "$CURRENT_BACKUP_DIR"
else
    echo "İlk yedekleme veya önceki yedek bulunamadı."
    rsync -av --delete "$SOURCE_DIR" "$CURRENT_BACKUP_DIR"
fi

echo "Yedekleme tamamlandı: $CURRENT_BACKUP_DIR"

Bu betik şunları yapar:

  • Mevcut tarihe göre yeni bir yedekleme dizini oluşturur (örneğin /mnt/yedek_disk/gunluk_yedekler/2023-10-27/).
  • Önceki günün yedekleme dizinini bulur.
  • Eğer önceki yedekleme dizini varsa, --link-dest seçeneğini kullanarak bu dizindeki değişmeyen dosyalar için hard link’ler oluşturur. Bu, diskte sadece değişen dosyaların yeni kopyalarını tutar, ancak her yedekleme dizini tam bir yedekleme gibi erişilebilir olur.
  • --delete seçeneği, kaynak dizinde olmayan dosyaların yedekleme dizininden de silinmesini sağlar, böylece yedekleriniz her zaman kaynağın tam bir kopyası olur.

Bu strateji, birden fazla tam yedekleme tutarken depolama alanından büyük ölçüde tasarruf etmenizi sağlar.

Dosya Filtreleme: --exclude ve --include Seçenekleri

Yedekleme yaparken, belirli dosyaları veya dizinleri dışarıda bırakmak (--exclude) veya sadece belirli dosyaları dahil etmek (--include) isteyebilirsiniz. Bu, gereksiz verilerin kopyalanmasını engelleyerek yedekleme boyutunu ve süresini optimize eder.

Örnek: Belirli Dosyaları Dışarıda Bırakma

Yedekleme yaparken .git dizinlerini, geçici dosyaları (*.tmp) ve log dosyalarını (*.log) dışarıda bırakmak isteyelim:

rsync -avz --exclude '.git/' --exclude '*.tmp' --exclude '*.log' /home/kullanici/proje/ /mnt/yedek_disk/proje_yedek/

Birden fazla dışlama kuralı ekleyebilirsiniz. Her kural için ayrı bir --exclude seçeneği kullanılır. Dışlama kuralları, Rsync’in taradığı her dosya ve dizin için soldan sağa doğru uygulanır.

Örnek: Sadece Belirli Dosyaları Dahil Etme

Bazen sadece belirli dosya türlerini yedeklemek isteyebilirsiniz. Örneğin, sadece .jpg ve .png dosyalarını kopyalamak:

rsync -avz --include '*.jpg' --include '*.png' --exclude '*' /home/kullanici/fotolar/ /mnt/yedek_disk/fotolar_yedek/

Bu komuttaki sıralama önemlidir: Önce dahil edilecekler (--include) belirtilir, ardından her şeyi dışlamak için genel bir --exclude '*' kullanılır. Rsync, kuralları sıralı olarak değerlendirir ve bir dosya bir kurala uyduğunda diğer kurallara bakmaz. Bu nedenle, önce dahil etmek istediklerinizi belirtip, sonra geri kalan her şeyi dışlamanız gerekir.

Vaka Analizi 2: Günlük/Haftalık Sunucu Yedeklemesi

Bir web sunucusunun (örneğin, bir WordPress sitesi barındıran) düzenli yedeklemesini almak, felaket kurtarma planının temelidir. Rsync ile bu yedeklemeyi otomatik ve verimli hale getirebilirsiniz.

Senaryo: Uzak bir web sunucusundaki /var/www/html/ ve /etc/ dizinlerini yerel bir yedekleme sunucusuna yedeklemek. Ancak veritabanı yedeği, log dosyaları ve bazı cache dizinleri dışarıda bırakılacak.

#!/bin/bash

# Mevcut tarih
DATE=$(date +%Y-%m-%d)

# Yedekleme kullanıcısı ve sunucu
REMOTE_USER="root"
REMOTE_HOST="webserver.example.com"

# Uzak kaynak dizinleri
REMOTE_WEB_DIR="/var/www/html/"
REMOTE_ETC_DIR="/etc/"

# Yerel hedef dizin
LOCAL_BACKUP_BASE="/mnt/backup_server/webserver_backups/"
LOCAL_CURRENT_BACKUP_DIR="${LOCAL_BACKUP_BASE}${DATE}/"
LOCAL_PREVIOUS_BACKUP_DIR=$(find "$LOCAL_BACKUP_BASE" -maxdepth 1 -type d -name "2*" | sort -r | head -n 1)

# Dışlanacak öğeler için Rsync filtre dosyası oluşturma
# Bu dosyayı ayrı bir yerde tutmak daha temizdir.
echo "wp-content/cache/" > /tmp/rsync_exclude.txt
echo "wp-content/uploads/thumbs/" >> /tmp/rsync_exclude.txt
echo "*.log" >> /tmp/rsync_exclude.txt
echo "/var/log/" >> /tmp/rsync_exclude.txt # Tüm log dizinini dışarıda bırak
echo "dump.sql" >> /tmp/rsync_exclude.txt # Veritabanı dump dosyasını dışarıda bırak
echo "node_modules/" >> /tmp/rsync_exclude.txt
echo ".git/" >> /tmp/rsync_exclude.txt

# Yedekleme işlemi
mkdir -p "$LOCAL_CURRENT_BACKUP_DIR/web/"
mkdir -p "$LOCAL_CURRENT_BACKUP_DIR/etc/"

echo "Web dizini yedekleniyor..."
rsync -avz --delete --exclude-from=/tmp/rsync_exclude.txt \
      ${LOCAL_PREVIOUS_BACKUP_DIR:+"--link-dest=$LOCAL_PREVIOUS_BACKUP_DIR/web/"} \
      ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_WEB_DIR} "${LOCAL_CURRENT_BACKUP_DIR}web/"

echo "Etc dizini yedekleniyor..."
rsync -avz --delete \
      ${LOCAL_PREVIOUS_BACKUP_DIR:+"--link-dest=$LOCAL_PREVIOUS_BACKUP_DIR/etc/"} \
      ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_ETC_DIR} "${LOCAL_CURRENT_BACKUP_DIR}etc/"

# Geçici dışlama dosyasını sil
rm /tmp/rsync_exclude.txt

echo "Yedekleme tamamlandı: ${LOCAL_CURRENT_BACKUP_DIR}"

Bu betik, hem web içeriğini hem de sistem yapılandırmalarını ayrı ayrı yedeklerken, artımlı yedekleme ve dışlama kurallarını birleştirir. --exclude-from seçeneği, dışlanacak öğeleri bir dosyadan okumasını sağlar, bu da komutu daha okunabilir ve yönetilebilir hale getirir. Bu tür bir betiği Cron işi olarak ayarlayarak düzenli ve otomatik yedeklemeler alabilirsiniz. Rsync, bu tür kritik yedekleme senaryolarında size zaman ve güvenilirlik sunan güçlü bir araçtır.

Rsync Performansını Artırmak İçin İleri Düzey İpuçları Nelerdir?

Rsync, varsayılan ayarlarıyla bile oldukça verimli çalışsa da, özellikle büyük veri kümeleri veya kısıtlı ağ koşullarında performansını daha da optimize etmek için kullanabileceğiniz bazı ileri düzey ipuçları ve seçenekler mevcuttur. Bu bölümde, transfer hızını artırmak, bant genişliğini yönetmek ve hata toleransını geliştirmek için Rsync’in sunduğu gelişmiş özellikleri inceleyeceğiz.

Kısmi Dosya Transferleri ve Doğrulama: --partial ve --append-verify

Büyük dosyaları aktarırken ağ bağlantısının kopması veya kesintiye uğraması durumunda, Rsync normalde dosyanın tamamını baştan kopyalamak zorunda kalır. Ancak --partial seçeneği, kesintiye uğrayan transferleri kaldığı yerden devam ettirmeyi sağlar. Bu, özellikle kararsız ağlarda veya çok büyük dosyalarla çalışırken zamandan büyük ölçüde tasarruf etmenizi sağlar.

rsync -avz --partial /buyuk_dosya.iso user@remote:/yedekler/

Bu komut, /buyuk_dosya.iso‘yu uzaktaki /yedekler/ dizinine kopyalarken, eğer transfer kesilirse, bir sonraki çalıştırmada kaldığı yerden devam eder.

--append-verify seçeneği ise, hedefteki dosyanın boyutunun kaynaktakinden küçük olması durumunda, sadece eksik kalan kısmı eklemeye çalışır. Ancak, bu seçenek hedefteki dosyanın değiştirilmediğini varsayar. Eğer dosyanın ortasında bir değişiklik yapılmışsa, bu seçenek hatalı bir senkronizasyona yol açabilir. Genellikle, --partial tek başına yeterlidir ve daha güvenlidir.

Bant Genişliği Sınırlama: --bwlimit

Rsync, varsayılan olarak mevcut tüm ağ bant genişliğini kullanmaya çalışır. Bu, diğer ağ hizmetlerini (örneğin web sunucusu trafiği) olumsuz etkileyebilir. --bwlimit seçeneği ile Rsync’in kullanabileceği bant genişliğini kilobayt/saniye (KB/s) cinsinden sınırlayabilirsiniz. Bu, özellikle yoğun saatlerde veya paylaşımlı ağlarda diğer hizmetlerin performansını korumak için çok kullanışlıdır.

rsync -avz --bwlimit=10000 /home/kullanici/veriler/ user@remote:/yedekler/

Bu komut, Rsync’in bant genişliğini yaklaşık 10 MB/s (10000 KB/s) ile sınırlar. Bu sayede, senkronizasyon işlemi devam ederken sunucunuzun veya ağınızın diğer işlevleri aksamadan çalışabilir.

Checksum Doğrulaması: --checksum (-c)

Rsync, dosyaların değişip değişmediğini varsayılan olarak boyutlarına ve son değiştirilme zamanlarına bakarak kontrol eder. Bu genellikle yeterli ve hızlıdır. Ancak, bir dosyanın içeriği değişmiş ancak boyutu ve zaman damgası aynı kalmışsa (nadiren de olsa olabilir), Rsync bu değişikliği fark edemeyebilir. Bu gibi durumlarda veya aşırı derecede hassas veri bütünlüğü gerektiren senaryolarda --checksum (-c) seçeneğini kullanabilirsiniz.

rsync -avz --checksum /hassas_veriler/ user@remote:/yedekler/

--checksum, her dosyanın içeriğini okuyarak bir hash değeri (MD5) hesaplar ve bu hash değerlerini karşılaştırır. Eğer hash değerleri farklıysa, dosyanın değiştiğini varsayarak kopyalar. Ancak, bu işlem dosya içeriğinin tamamını okumayı gerektirdiğinden, özellikle büyük dosyalar için çok daha yavaş olacaktır. Bu nedenle, yalnızca kesinlikle gerektiğinde kullanılması tavsiye edilir.

Hızlı Boyut Kontrolü: --size-only

Eğer dosyaların zaman damgalarının güvenilir olmadığını biliyorsanız veya sadece boyutlarına göre değişiklikleri tespit etmek istiyorsanız, --size-only seçeneğini kullanabilirsiniz. Bu, Rsync’in dosyaların boyutları farklıysa onları kopyalamasını, boyutları aynıysa ise atlamasını sağlar. Zaman damgalarını kontrol etmediği için biraz daha hızlı olabilir, ancak dosya içeriği değişip boyutu aynı kalan dosyaları gözden kaçırabilir.

rsync -avz --size-only /kaynak/dizin/ user@remote:/hedef/dizin/

SSH Anahtarları ile Parola Girmeden Rsync Kullanımı

Otomatik yedekleme betikleri veya sık yapılan senkronizasyonlar için her seferinde parola girmek verimsizdir. SSH anahtarları kullanarak parola girmeden güvenli bir şekilde Rsync yapabilirsiniz. Bunun için, yerel makinenizde bir SSH anahtar çifti oluşturmanız ve genel anahtarınızı uzak sunucudaki ~/.ssh/authorized_keys dosyasına eklemeniz gerekir.

Uzman İpucu: SSH anahtarları, Rsync otomasyonunun temelidir. Güvenliğinizi artırmak için anahtarınızı bir parola (passphrase) ile koruyun.
# Yerel makinede anahtar oluşturma (eğer yoksa) ssh-keygen -t rsa -b 4096 # Genel anahtarı uzak sunucuya kopyalama ssh-copy-id user@remote_server.com # Artık parola sormadan Rsync yapabilirsiniz rsync -avz /yerel/dizin/ user@remote_server.com:/uzak/dizin/

Bu yöntem, Rsync komutlarınızı Cron işleri gibi zamanlanmış görevlere eklemenize olanak tanır, böylece yedeklemeleriniz tamamen otomatik hale gelir.

Rsync Daemon Modu ve Performans

Çoğu senaryoda Rsync, SSH üzerinden çalışmak için yeterlidir. Ancak, çok sayıda istemcinin tek bir sunucuya yedekleme yaptığı veya Rsync’in kendi özel portu üzerinden daha hafif bir protokol kullanmak istediğiniz durumlarda Rsync’i “daemon” (arka plan hizmeti) modunda çalıştırabilirsiniz. Bu mod, SSH’nin getirdiği ek yük olmadan daha hızlı bağlantılar ve daha esnek yapılandırmalar sunar (örneğin anonim erişim). Rsync daemon’u kurmak daha karmaşıktır ve ayrı bir yapılandırma dosyası (/etc/rsyncd.conf) gerektirir. Genellikle sadece özel ihtiyaçları olan büyük ölçekli yedekleme altyapılarında tercih edilir.

Bu ileri düzey ipuçları, Rsync’i daha verimli, güvenli ve esnek bir şekilde kullanmanızı sağlayarak veri yönetimi süreçlerinizi daha da optimize etmenize yardımcı olacaktır.

Rsync Kullanırken Karşılaşılabilecek Yaygın Sorunlar ve Çözümleri

Rsync, güçlü ve esnek bir araç olsa da, bazen kullanıcılar belirli hatalarla veya beklenmedik davranışlarla karşılaşabilirler. Bu sorunların çoğu, komut seçeneklerinin yanlış anlaşılmasından, izin problemlerinden veya ağ bağlantısı sorunlarından kaynaklanır. Bu bölümde, Rsync kullanırken sıkça karşılaşılan problemlere ve bunların nasıl çözüleceğine dair pratik bilgiler sunacağız.

İzin Hataları (Permission Denied)

Rsync ile dosya kopyalarken veya silerken en sık karşılaşılan sorunlardan biri izin hatalarıdır. Bu genellikle, Rsync’i çalıştıran kullanıcının kaynak veya hedef dizinlere yeterli okuma/yazma iznine sahip olmamasından kaynaklanır.

  • Sorun: rsync: failed to set permissions on "/hedef/dizin/dosya" (in hedef): Operation not permitted (1) veya Permission denied.
  • Çözüm:
    • Hedef dizine yazma izni: Hedef dizine yazma izniniz olduğundan emin olun. Uzak sunucuda genellikle sudo chmod 755 /hedef/dizin veya sudo chown kullanici:grup /hedef/dizin komutlarıyla izinleri düzeltebilirsiniz.
    • Kaynak dizinden okuma izni: Kaynak dizindeki dosyaları okuma izniniz olmalı.
    • Sudo Kullanımı: Eğer yerel veya uzak tarafta kök (root) ayrıcalıkları gerekiyorsa, Rsync komutunu sudo ile çalıştırmanız gerekebilir (örneğin, sudo rsync -av /kaynak/ /hedef/). Uzak sunucuda root kullanıcısı olarak bağlanmak, genellikle izin sorunlarını çözer, ancak dikkatli kullanılmalıdır.
    • --no-o, --no-g, --no-p: Eğer hedef sistemde sahip (owner), grup veya izinleri korumakta sorun yaşıyorsanız (örneğin, farklı kullanıcı ID’leri), -a seçeneği içindeki bu alt seçenekleri devre dışı bırakabilirsiniz. Örneğin, rsync -av --no-o --no-g --no-p ...

Bağlantı Sorunları (SSH Hataları)

Uzak sunucularla Rsync yaparken SSH bağlantı sorunları yaşanabilir.

  • Sorun: ssh: connect to host ornek.com port 22: Connection refused veya Permission denied (publickey,password).
  • Çözüm:
    • Uzak sunucunun açık ve erişilebilir olması: Uzak sunucunun çalıştığından ve ağınızdan erişilebilir olduğundan emin olun (örneğin ping ornek.com).
    • SSH servisi çalışıyor mu?: Uzak sunucuda SSH servisinin (sshd) çalıştığını kontrol edin.
    • Doğru kullanıcı adı ve parola/anahtar: Uzak sunucuya bağlanmak için doğru kullanıcı adını ve parolayı veya SSH anahtarını kullandığınızdan emin olun. ssh user@remote_host komutuyla manuel olarak bağlanmayı deneyerek sorunu teşhis edebilirsiniz.
    • Güvenlik Duvarı: Hem yerel hem de uzak sistemdeki güvenlik duvarlarının (firewall) SSH (port 22) trafiğine izin verdiğinden emin olun.
    • SSH portu: Eğer SSH farklı bir portta çalışıyorsa, Rsync komutunda bunu belirtmeniz gerekir (örneğin, rsync -avz -e 'ssh -p 2222' /kaynak/ user@remote:/hedef/).

Dosya Silme Hataları (--delete ile)

--delete seçeneği çok güçlüdür ve yanlış kullanıldığında veri kaybına yol açabilir.

  • Sorun: Yanlışlıkla önemli dosyaların silinmesi.
  • Çözüm:
    • Her zaman --dry-run kullanın: --delete seçeneğini içeren herhangi bir Rsync komutunu çalıştırmadan önce mutlaka -n veya --dry-run ile test edin. Bu, Rsync’in ne yapacağını size gösterecek ancak hiçbir şeyi silmeyecektir.
    • Doğru kaynak/hedef yolları: Kaynak ve hedef dizinlerin doğru olduğundan ve kaynak dizinin sonunda eğik çizgi (/) olup olmadığının beklentinizle eşleştiğinden emin olun. Yanlış bir eğik çizgi, tüm hedef dizinin içeriğini silmenize neden olabilir.
    • Yedekleme stratejisi: Kritik veriler için --delete kullanmadan önce her zaman ayrı bir yedekleme bulundurun veya artımlı yedekleme stratejileri (--link-dest) ile eski sürümleri koruyun.

Yol Sonundaki Eğik Çizgi (/) Önemi

Bu, Rsync’in en çok kafa karıştıran ve hata yapılan noktalarından biridir.

  • Sorun: Kopyalanan dizin yapısının beklentinizden farklı olması (örneğin, /hedef/dizin/kaynak_dizin/ yerine /hedef/dizin/dosya1).
  • Çözüm:
    • Kaynak dizin sonunda / var: rsync /kaynak_dizin/ /hedef_dizin/ komutu, kaynak_dizin‘in içeriğini hedef_dizin‘e kopyalar.
    • Kaynak dizin sonunda / yok: rsync /kaynak_dizin /hedef_dizin/ komutu, kaynak_dizin‘in kendisini hedef_dizin‘in içine kopyalar (yani /hedef_dizin/kaynak_dizin/ oluşur).
    • Her zaman test edin: Hangi davranışın istediğiniz olduğunu anlamak için --dry-run ile test yapın.

Performans Sorunları (Yavaş Transferler)

Rsync’in beklenenden yavaş çalışması birkaç nedene bağlı olabilir.

  • Sorun: Rsync transferleri çok yavaş.
  • Çözüm:
    • -z (sıkıştırma) kullanın: Özellikle metin tabanlı dosyalar için bant genişliğini azaltarak hızı artırabilir. Ancak, zaten sıkıştırılmış dosyalar (ZIP, JPG, MP4) için gereksizdir ve CPU yükünü artırabilir.
    • --bwlimit kontrolü: Yanlışlıkla bir bant genişliği sınırı belirleyip belirlemediğinizi kontrol edin.
    • Ağ hızı: Ağ bağlantınızın hızını kontrol edin. Rsync, ağın kendisinden daha hızlı olamaz.
    • --checksum kullanmaktan kaçının: Eğer veri bütünlüğü için kesinlikle gerekli değilse --checksum kullanmayın, çünkü bu çok fazla disk I/O ve CPU tüketir.
    • Disk I/O: Hem kaynak hem de hedef disklerin I/O performansının iyi olduğundan emin olun. Özellikle HDD’ler üzerinde çok sayıda küçük dosya kopyalamak yavaş olabilir.

Bu yaygın sorunları ve çözümlerini bilmek, Rsync ile çalışırken karşılaştığınız engelleri daha hızlı aşmanıza ve daha sorunsuz bir deneyim yaşamanıza yardımcı olacaktır. Unutmayın, --dry-run seçeneği en iyi dostunuzdur!

Sonuç: Rsync ile Veri Yönetiminde Uzmanlaşın

Bu kapsamlı rehber boyunca, Rsync’in temelden ileri düzeye kadar birçok özelliğini ve kullanım senaryosunu inceledik. Rsync’in sadece bir dosya kopyalama aracı olmadığını, aynı zamanda veri senkronizasyonu, yedekleme ve dağıtım görevlerinizde size zaman, kaynak ve güvenilirlik sağlayan güçlü ve esnek bir yardımcı program olduğunu gördük. Delta transfer algoritması sayesinde, ağ bant genişliğinden tasarruf ederken, arşiv modu ile dosya özelliklerini koruyarak veri bütünlüğünü sağlaması, Rsync’i modern veri yönetimi dünyasında vazgeçilmez kılmaktadır.

Yerelden uzak dizinlere güvenli bir şekilde nasıl senkronizasyon yapacağınızı, SSH ile entegrasyonun önemini ve --delete gibi kritik seçeneklerin dikkatli kullanımını öğrendiniz. Ayrıca, --link-dest ile artımlı yedekleme stratejileri oluşturarak disk alanından nasıl tasarruf edebileceğinizi ve --exclude/--include seçenekleriyle yedekleme süreçlerinizi nasıl filtreleyebileceğinizi de keşfettiniz. İleri düzey ipuçları bölümünde, --bwlimit ile bant genişliği sınırlama, --partial ile kesintiye uğrayan transferleri sürdürme ve SSH anahtarlarıyla parola girmeden otomasyon sağlama gibi performans artırıcı teknikleri ele aldık. Son olarak, sık karşılaşılan sorunlara ve çözümlerine değinerek, Rsync kullanımında karşılaşabileceğiniz engelleri aşmanıza yardımcı olduk.

Rsync’in sunduğu bu geniş özellik yelpazesi, ister bireysel bir kullanıcı olun isterse büyük bir kurumsal altyapıyı yönetiyor olun, veri yönetimi ihtiyaçlarınıza uygun çözümler sunar. Geliştirme ortamlarının senkronizasyonundan sunucu yedeklemelerine, web sitesi dağıtımından büyük veri kümelerinin taşınmasına kadar pek çok alanda Rsync’i etkin bir şekilde kullanabilirsiniz. Bu rehberdeki bilgileri uygulayarak, Rsync’i sadece kullanmayı değil, aynı zamanda onunla veri yönetimi süreçlerinizde uzmanlaşmayı da başaracaksınız. Unutmayın, düzenli pratik ve --dry-run seçeneğini sıkça kullanma alışkanlığı, Rsync ile çalışırken en iyi sonuçları almanızı sağlayacaktır.

Sıkça Sorulan Sorular (SSS)

1. Rsync sadece Linux’ta mı çalışır?

Hayır, Rsync Unix tabanlı sistemler için tasarlanmış olsa da, macOS’ta varsayılan olarak bulunur ve Windows’ta WSL (Windows Subsystem for Linux) veya Cygwin gibi araçlar aracılığıyla kullanılabilir. Bu sayede, farklı işletim sistemleri arasında da Rsync ile senkronizasyon yapabilirsiniz.

2. Rsync ile senkronizasyon ne kadar güvenlidir?

Rsync, varsayılan olarak SSH (Secure Shell) protokolü üzerinden çalıştığında oldukça güvenlidir. SSH, tüm veri transferini şifreleyerek yetkisiz erişimi engeller. Eğer Rsync’i kendi daemon modunda kullanıyorsanız, ek güvenlik önlemleri (örneğin, VPN veya güvenlik duvarı kuralları) almanız gerekebilir.

3. Rsync komutunu yanlış yazarsam verilerim silinir mi?

Evet, özellikle --delete seçeneğini yanlış kaynak veya hedef yollarla kullandığınızda veri kaybı riski vardır. Bu nedenle, herhangi bir Rsync komutunu, özellikle de dosya silme veya değiştirme potansiyeli olanları, her zaman --dry-run (-n) seçeneği ile test etmeniz şiddetle tavsiye edilir. Bu, komutun ne yapacağını size gösterir ancak gerçekte hiçbir değişiklik yapmaz.

4. Rsync ile büyük dosyaları senkronize etmek ne kadar sürer?

Büyük dosyaların senkronizasyon süresi, dosya boyutuna, ağ bağlantınızın hızına ve kaynak ile hedef disklerin I/O performansına bağlıdır. Rsync’in delta transfer algoritması sayesinde, dosyanın sadece değişen kısımları aktarıldığı için, ilk senkronizasyondan sonraki güncellemeler genellikle çok daha hızlıdır. --progress seçeneği ile tahmini kalan süreyi görebilirsiniz.

5. Rsync ve SCP arasındaki temel fark nedir?

Hem Rsync hem de SCP (Secure Copy Protocol) dosyaları SSH üzerinden güvenli bir şekilde aktarabilir. Ancak temel fark, Rsync’in “akıllı” olmasıdır. SCP, her seferinde tüm dosyayı baştan sona kopyalar. Rsync ise, kaynak ve hedefteki dosyaları karşılaştırır ve sadece değişen kısımları (delta transfer) aktarır. Bu, özellikle büyük dosyaların veya çok sayıda dosyanın sık sık güncellendiği durumlarda Rsync’i SCP’den çok daha verimli ve hızlı hale getirir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.