Büyük seyrek dosyaları (VM disk görüntüleri) makineler arasında nasıl senkronize edersiniz?


22

Büyük, seyrek dosyaları bir linux sunucusundan diğerine senkronize edebilen rsync gibi bir komut var mı?

Hedef dosyanın seyrek kalması çok önemlidir. Onu içeren sürücüden daha uzun (ancak daha büyük değil) olabilir. Kablo boyunca yalnızca değiştirilmiş bloklar gönderilmelidir.

RSync'i denedim ama neşe almadım. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

Bunu yapmak için bir program yazarsam, tekerleği yeniden icat mı ediyorum? http://www.finalcog.com/synchronise-block-devices

Teşekkürler,

Chris.


rsync, devasa dosyalarda büyük ölçüde verimsizdir. - inplace ile bile, ilk önce hedef sunucudaki tüm dosyayı okuyacak ve daha sonra yerel ana bilgisayarda dosyayı okumaya başlayacak ve farklılıkları aktaracak (sadece rsync çalıştırırken ve gözlemlerken dstat veya benzerlerini çalıştırın)
ndemou

Yanıtlar:


21
rsync --ignore-existing --sparse ...

Seyrek modda yeni dosyalar oluşturmak için

Bunu takiben

rsync --inplace ...

Tüm mevcut dosyaları (önceden oluşturulmuş seyrek olanlar dahil) yerinde güncellemek için.


3
Bir senkronizasyon hızlandırması olması rsync --existing --inplaceve daha sonra olması için bunu tersine çevirinrsync --ignore-existing --sparse
Mike

2
Mikes yorumunu kimse açıklayabilir mi ve bunun senkronizasyonu nasıl hızlandırması gerektiğini?
Preexo

Bence Mike ilk önce yer değiştirmeyi ve sonra yeniyi eklemeyi, böylece yenilerin ilk ve ikinci görüşme arasındaki zaman farkından dolayı tekrar yerinde olmaları gerekmediğini ifade eder. Yalnızca doğrudan veri deposundan rsync yapıyorsanız ve VM'ler çalışıyorsa geçerlidir. Başka bir şey ifade etmediği sürece?
Yuan

Yuan ile aynı fikirdeyim. Steves ikinci komutu tekrar yeni dosyaları rsync olacak, Mikes komut dizisini kullanarak güvence altına alabilirsiniz.
falstaff

rsync, devasa dosyalarda büyük ölçüde verimsizdir. Soru hakkındaki yorumuma bakın.
ndemou

5

Rsync sadece her dosyaya değişiklikleri aktarır ve --inplace ile sadece dosyayı yeniden oluşturmadan değiştirilen blokları yeniden yazar. Onların itibaren özellikler sayfasında .

rsync, Unix sistemleri için bir dosya aktarım programıdır. rsync, uzak dosyaları senkronize etmek için çok hızlı bir yöntem sağlayan "rsync algoritmasını" kullanır. Bunu, bağlantıdaki dosyalardaki farkları yalnızca göndererek, her iki dosya kümesinin önceden bağlantının sonlarından birinde bulunmasını gerektirmeden yapar.

--İnplace'i kullanmak sizin için çalışmalıdır. Bu, size ilerleme gösterecek, aktarımı (varsayılan sıkıştırma düzeyinde) sıkıştıracak, yerel depolama dizininin içeriğini yinelemeli olarak aktaracak (ilk eğik çizgi önemli olan), dosyadaki değişiklikleri yerinde yapacaktır ve aktarım için ssh kullanacaktır.

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

Ben genellikle bir bayrak daha kullanırım ki birkaç şey daha yapar. -RlptgoD'ye eşdeğerdir. Adam sayfasına bakmanız için tam bir davranış bırakacağım.


1
'-S' seyrek dosyalar içindir, 'uzun satırları kesmez'. Man sayfasından: -S, - Seyrek seyrek dosyaları verimli bir şekilde işler. Bunu deneyeceğim, teşekkürler.
solmuş

Teşekkürler bunu düzelttim - Verdiğiniz bağlantıda söylenen bir şeyden çıkıyordum.
reconbot

Hayır, ne yazık ki bu sorunu çözmez. Bu does dosyası senkronizasyon, ancak olmayan bir seyrek dosya içine ucunda seyrek dosyayı açar. Ubuntu 9.04 ile gelen ssh / rsync kullanıyorum.
fadedbee

Yukarıdaki yorumum yanlıştı. Sorun, rsync'in ilk kopyasında seyrek olmayan dosyalar oluşturmasıydı. --İnplace rsync, hedef dosyanın zaten mevcut olması ve kaynak dosya kadar uzun (büyük değil) olması şartıyla düzgün çalışır. Artık bir çözümüm var, ancak her dosyanın hedef sunucuda zaten var olup olmadığını kontrol etmemi gerektiriyor. Eğer öyleyse, bir - yerinde yaparım, yoksa, - sparse kullanırım. Bu ideal değil, ama çalışıyor.
fadedbee

rsync, devasa dosyalarda büyük ölçüde verimsizdir. Soru ile ilgili
yorumumu

4

Bunu yapmak için yazılım yazdım:

http://www.virtsync.com

Bu, fiziksel sunucu başına 49 ABD Dolarına mal olan ticari bir yazılımdır.

Artık, 50GB'lik seyrek bir dosyayı (3GB içerikli) konut geniş bandında 3 dakikadan az bir sürede çoğaltabiliyorum.

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 

4
TBH, senkronizasyon yapabileceğiniz zamanlama oldukça anlamsızdır, çünkü açıkça değiştirilen veri miktarına bağlıdır. Söylemesi daha doğru olan şey, hangi blokların değiştiğini anlamak için yazılımınızın 3 dakika sürmesi ve bu hızın muhtemelen disk g / ç'iniz ve belki de kullanılabilir CPU döngülerine bağlı olması.
Reality Extractor

6
Bunun, ağ işlevselliği için 98 $ veya daha fazlaya mal olan ticari bir yazılım olduğunu açıklamalısınız.
Reid

Bizi sizin için iyi çalışan, insanların artık düşünebilecekleri, kullanabilecekleri veya ihtiyaç duydukları şekilde kullanamayacakları bir yazılıma yönlendirdiğiniz için teşekkür ederiz. Diğer iki insan için, yeni bir şey yapmadığın için teşekkürler.
Florian Heigl

3

Zumastor Linux Storage Project'e , ddsnaparaç üzerinden ikili "rsync" kullanarak "anlık görüntü" yedeklemesi uygulayan bir göz atın .

Man sayfasından:

ddsnap, aynı anda birden fazla anlık görüntüyü verimli bir şekilde tutabilen blok düzeyinde anlık görüntü özelliği verilen blok aygıtı çoğaltmasını sağlar. ddsnap, iki anlık görüntü arasında farklılık gösteren anlık görüntü parçalarının bir listesini oluşturabilir ve ardından bu farkı kablo üzerinden gönderebilir. Akış aşağı sunucuda, güncellenmiş verileri anlık görüntülü bir blok aygıta yazın.


2

Lvmsync bunu yapar.

İşte bir kullanım transkript . Kaynakta bir LVM anlık görüntüsü oluşturur, mantıksal bölümü aktarır. Anlık görüntü oluşturulduğundan bu yana değişikliklerin artımlı güncellemelerini istediğiniz sıklıkta aktarabilirsiniz.


Denedim, ama işe yaramadı ve yazar destek vermeye istekli değil
user1007727

1
@ user1007727 ücretsiz destek vermeye istekli değil mi?
fadedbee

Lvmsync'i geçmişte kullandım, işe yaradı, ancak “prod grade” yazılımı imo değildi. :-)
Florian Heigl

1

Tüm dosya sistemini çoğaltmak bir çözüm olabilir mi? DRBD? http://www.drbd.org/


Burada drbd'nin iyi bir çözüm olduğunu düşünmüyorum, ancak disk imaj dosyaları yerine fs'nin tamamını yerine koyma fikri ilginç.
Rsync'in

1

Belki biraz garip, ama geçenlerde NFS'nin bu sorunu çözdüğünü öğrendim.

Bir dizini bir makineye aktarır, sonra diğerine bağlar ve dosyaları sadece gibi temel dosyalara kopyalarsınız cp. (Bazı eski / eski kamu hizmetleri, seyrek dosyalarda sorun yaşayabilir.)

rsyncSeyrek dosyaları aktarmada özellikle verimsiz olduğunu buldum .


1

Büyük dosyaları veya blok aygıtları düşük ila orta farklılıklarla eşitlemek için düz bir kopya çıkarabilir veya bdsync kullanabilirsiniz , rsync bu özel duruma kesinlikle uygun değildir *.

bdsyncbenim için çalıştı, yeterince olgun görünüyor, böceklerin tarihi cesaret verici (küçük sorunlar, hızlı çözümlemeler). Testlerimde hızı elde edebileceğin teorik maksimum değere yakındı ** (yani dosyayı okumak için gereken zaman içinde senkronize edebilirsin). Sonunda açık kaynak ve hiçbir maliyeti yoktur.

bdsyncDosyaları hem ana bilgisayardan okur hem de karşılaştırmak ve farkları saptamak için kontrol toplamları alış verişi yapar. Bütün bunlar aynı anda . Sonunda kaynak ana bilgisayarda sıkıştırılmış bir yama dosyası oluşturur. Ardından, bu dosyayı hedef ana bilgisayara taşır ve hedef dosyayı düzeltmek için ikinci kez bdsync komutunu çalıştırırsınız.

Oldukça hızlı bir bağlantı üzerinden (örn. 100Mbit ethernet) ve küçük farklara sahip dosyalar için (en sık olduğu gibi VM disklerinde olduğu gibi), dosyayı okumak için gereken süreye eşitleme süresini azaltır. Yavaş bir bağlantıda, biraz daha fazla zamana ihtiyaç duyarsınız; çünkü sıkıştırılmış değişiklikleri bir ana bilgisayardan diğerine kopyalamanız gerekir ( iyi bir numara kullanarak zamandan kazanabilirsiniz ancak test etmemişsiniz).


*: rsync, devasa dosyalarda büyük ölçüde verimsizdir. - inplace ile bile önce ilk önce ana bilgisayardaki tüm dosyayı okuyacak, AFTERWARDS dosyayı kaynak ana bilgisayardan okumaya başlayacak ve nihayet farklılıkları aktaracaktır (sadece rsync çalıştırırken ve gözlemlerken dstat veya benzeri çalıştırınız). Sonuç, küçük farklılıkları olan dosyalar için bile, dosyayı senkronize etmek için okumanız gereken sürenin iki katına çıkmasıdır.

**: Dosyaların hangi kısımlarının değiştiğini söylemenin başka bir yolunun olmadığı varsayımı altında. LVM anlık görüntüleri değiştirilmiş blokları kaydetmek için bitmap'ler kullanır, böylece son derece daha hızlı olabilirler ( lvmsync'in benioku dosyası daha fazla bilgiye sahiptir).


0

Böyle bir yardımcı programın farkında değilim, yalnızca onu işleyebilecek sistem çağrılarının farkındayım, bu nedenle böyle bir yardımcı program yazarsanız, bu yardımcı olabilir.

gerçekte yapabileceğiniz şey dosyaları kopyalamak için qemu-img convert kullanmaktır, ancak yalnızca hedef FS seyrek dosyaları destekliyorsa çalışır

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.