İçindekiler
rsync, iki konum arasında dosyaları senkronize eden bir araçtır. Konumlar aynı makinede de olabilir, SSH ile bağlanılan farklı sunucularda da. cp ve scp'den farkı, yalnızca değişen kısımları aktarmasıdır. 50 GB'lık bir klasörü ilk seferde kopyalamak saatler sürebilir; ertesi gün yalnızca değişen birkaç dosya birkaç saniyede aktarılır.
Temel kullanım
rsync -avh /kaynak/ /hedef/
En sık kullanılan parametreler:
-a(archive): Klasörleri özyinelemeli kopyalar; izinleri, sahipliği, zaman damgalarını ve sembolik bağlantıları korur. Neredeyse her zaman kullanılır.-v(verbose): Aktarılan dosyaları listeler.-h(human-readable): Boyutları okunabilir biçimde gösterir.-z(compress): Ağ üzerinden aktarırken veriyi sıkıştırır. Yerel kopyalamada ya da zaten sıkıştırılmış dosyalarda (resim, video, zip) gereksizdir.-P: İlerleme çubuğunu gösterir ve yarıda kalan dosyaların kaldığı yerden devam etmesini sağlar. Büyük aktarımlar için çok kullanışlıdır.
En önemli ayrıntı: Sondaki eğik çizgi
Bu fark, rsync'in en çok hata yapılan noktasıdır:
rsync -a /var/www/site/ /yedek/site/
rsync -a /var/www/site /yedek/
- Kaynağın sonunda
/varsa: "Bu klasörün içeriğini kopyala."/var/www/site/içindeki dosyalar doğrudan/yedek/site/içine gelir. - Kaynağın sonunda
/yoksa: "Bu klasörün kendisini kopyala."/yedek/içinde birsiteklasörü oluşturulur.
Yanlış kullanıldığında /yedek/site/site/ gibi iç içe klasörler oluşur. Hedefin sonundaki eğik çizgi ise sonucu değiştirmez.
Uzak sunucuya kopyalamak
rsync -avzP /var/www/site/ kullanici@yedek.ornek.com:/yedekler/site/
Sunucudan yerele çekmek için kaynak ve hedefin yerini değiştirin:
rsync -avzP kullanici@sunucu:/var/www/site/ ./site-kopya/
SSH farklı bir portta çalışıyorsa:
rsync -avzP -e "ssh -p 35000" /kaynak/ kullanici@sunucu:/hedef/
--delete: Güçlü ve tehlikeli
Varsayılan olarak rsync, kaynakta silinen dosyaları hedefte silmez. Hedefi kaynağın birebir kopyası yapmak için --delete kullanılır:
rsync -a --delete /var/www/site/ /yedek/site/
Bu parametre, kaynak ve hedefin yeri karıştırıldığında ya da kaynak yanlışlıkla boş olduğunda hedefteki her şeyi siler. Bu yüzden --delete kullanmadan önce her zaman deneme yapın:
rsync -a --delete --dry-run -v /var/www/site/ /yedek/site/
--dry-run (kısaca -n) hiçbir şeyi değiştirmez; yalnızca neyin kopyalanacağını ve neyin silineceğini listeler. Listede beklemediğiniz bir silme varsa durun.
Bir uyarı daha: --delete ile senkronize edilen bir kopya, yedek değildir. Kaynakta yanlışlıkla silinen bir dosya, bir sonraki çalışmada hedefte de silinir. Geçmişe dönük kopyalar için aşağıdaki yönteme ya da restic, borg gibi araçlara bakın.
Dosya ve klasör hariç tutmak
rsync -a \
--exclude 'cache/' \
--exclude '*.log' \
--exclude 'node_modules/' \
/var/www/site/ /yedek/site/
Çok sayıda kural varsa bir dosyaya yazıp --exclude-from=haric.txt ile verebilirsiniz.
Sunucu taşımada rsync
Sunucu taşımalarında rsync'in en değerli özelliği, işlemin iki aşamada yapılabilmesidir:
- Taşımadan önce: Site hâlâ eski sunucuda çalışırken bütün dosyaları kopyalayın. Bu işlem uzun sürebilir ama ziyaretçileri etkilemez.
- Taşıma anında: Siteyi bakım moduna alın ve aynı komutu bir kez daha çalıştırın. Bu sefer yalnızca son değişiklikler aktarılır ve işlem birkaç saniye ya da dakika sürer.
Kesinti süresi saatlerden dakikalara iner.
Dosya sahipliğinin korunması için iki tarafta da aynı kullanıcı adları ve kimlik numaraları (UID) olmalıdır. Olmadığında --chown=kullanici:grup parametresiyle hedefte sahipliği belirleyebilirsiniz.
Anlık görüntü tarzı yedekler: --link-dest
rsync ile, her gün tam bir kopya gibi görünen ama yalnızca değişen dosyalar için yer kaplayan yedekler alınabilir:
BUGUN=$(date +%F)
rsync -a --delete --link-dest=/yedek/son/ /var/www/ /yedek/$BUGUN/
ln -sfn /yedek/$BUGUN /yedek/son
--link-dest, değişmemiş dosyalar için yeni bir kopya oluşturmak yerine bir önceki yedekteki dosyaya sabit bağlantı (hard link) verir. Sonuç olarak her günün klasörü eksiksiz bir kopya gibi görünür, ama disk alanı yalnızca değişen dosyalar kadar artar. Eski bir günü silmek, diğer günleri etkilemez.
Sık karşılaşılan sorunlar
- "Permission denied": Uzak taraftaki kullanıcının hedef klasöre yazma izni yok, ya da
-aile sahiplik korunmaya çalışılıyor ama kullanıcı root değil. Root olmayan bir kullanıcıyla-ayerine-rltkullanmak sahiplik ve izin hatalarını önler. - Her çalışmada bütün dosyalar yeniden kopyalanıyor: Hedef dosya sistemi zaman damgalarını korumuyor olabilir (örneğin bazı ağ dosya sistemleri).
--size-onlyya da-c(sağlama toplamı ile karşılaştırma, ama daha yavaş) kullanılabilir. - Aktarım çok yavaş: Çok sayıda küçük dosya varsa darboğaz genellikle disk ve dosya listesinin oluşturulmasıdır, ağ değil. Zaten sıkıştırılmış dosyalarda
-zkullanmayın.
rsync'in yüzlerce parametresi var. Ama -avhP, --delete, --dry-run ve --exclude ile günlük işlerin neredeyse tamamı hallediliyor. Bir de sondaki eğik çizgiye dikkat etmek yeterli.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.