Hareketleri mantıklı işleyen Rsync


10

Ev dizinlerimi dizüstü bilgisayarım ve netbookum (her ikisi de Linux ile ext4 kullanarak) arasında senkronize etmek için rsync'i başarıyla kullanıyorum . Bununla ilgili tek sorunum, her zaman ve sonra belirli dizinleri tamamen yeniden düzenlemek istiyorum ve rsync bunu silme ve yeni dosyaların oluşturulması olarak görüyor, bu da onu çok yavaş ve verimsiz hale getiriyor.

Herkes iyi dosya taşıma işlemleri iyi bir yazılım parçası biliyor mu?

Birliğin bunu yapabilmesi gerektiğini fark ettim , ama pratikte işe yaramıyor gibi görünüyor. Her birinde büyük bir dosya bulunan iki yerel dizini senkronize ederek birliği test ettim ve hareketimi bir silme + oluşturma olarak algıladım ve aslında rsync'ten bile daha yavaştı .

Ayrıca, birkaç ay önce birliğin kaynak koduna bakmamı doğru bir şekilde hatırlarsam , sha toplamları yapmak gibi bir şey yapmaya çalıştı - ve ideal çözümümün sha toplamları yapmak istemiyorum - bu büyük ölçüde çok yavaş dosya / dizin. Aşağıdaki gibi şeyleri fark eden bir şey istiyorum:

"Bu dosyanın son kaynak karşılığı silinmiş gibi görünüyor ve kaynak dizin ağacında başka bir yerde aynı mdate, boyut ve inode numarasına sahip yeni bir dosya var, bu yüzden bunun bir hareket olduğunu varsayacağım ve silme + kopyalama yapmak yerine hedef karşılığını buna göre hareket ettirin. "

Bu makineleri hızlı bir şekilde senkronize edebilmem benim için önemli.

Herhangi bir öneri?

Yanıtlar:


6

Altında yaptığı rdiff-backup'a bir göz atmalısınızrsync , ancak ihtiyacınız olan ek zeka ile (ve artımlı yedeklemeleri geri dönebilir hale getirir, ancak bunu kapatmak için yapılandırabilirsiniz).

En son sürüm eski (2009), ama bu bir istikrar göstergesidir.


2
Bunu deneyen var mı?
sis

3

Unison ne istersen yapar, ama sadece uzaktan senkronizasyon için. ssh://localhost/path/to/dirKöklerden biri olarak kullanmayı deneyin .

Unison kararlarını dosya içeriğine dayandırır, inode numaralarını takip etmez.


1

Kaynak ve hedef dizindeki dosya sistemlerinde sabit bağlantılar desteği varsa, taşınan ve yeniden adlandırılan dosyaları rsync ile işleyebilirsiniz. Fikir, rsync'in gerçek aktarımdan önce sabit bağlantıları yeniden yapılandırmasına izin vermektir. Burada iyi bir açıklama bulabilirsiniz

Kaynak / hedef dizin içinde gizli bir sabit bağlantı ağacı oluşturan basit bir çözümle sonuçlandık, temel komut dosyası şöyle olabilir:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

GitHub'da örnek bir senaryom var . Ancak bu yöntemi üretimde kullanmadan önce büyük miktarda test yapmanızı tavsiye ederim.


0

Dosyaları birden çok makine arasında senkronize etmek istiyorsanız, Subversion (veya arka uç olarak SVN kullanan FSVS) gibi merkezi bir sürüm kontrol sistemi kullanmak isteyebilirsiniz. Güzel tarafı, / evinizdeki her şeyin (sürüm kontrolüne eklediğiniz) daha sonra sürümlendirilmesi ve diğer makinelere kolayca senkronize edilebilmesi veya geri alınabilmesidir.


0

lsyncd ayrıca rsync + ssh davranışı ile taşınan dosyaları ele alır, ancak biraz buggy (i yaklaşık% 15 hamle silmek silmek / kopya olarak ele, henüz nedenini bulmak için). Çoğu zaman işe yarar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.