Büyük dosyalar için önce sıkıştır sonra transfer veya rsync -z? hangisi daha hızlı olurdu?


14

Bir ton görelilik küçük veri dosyam var ama yaklaşık 50 GB yer kaplıyorlar ve farklı bir makineye aktarılmalarına ihtiyacım var. Bunu yapmanın en etkili yolunu düşünmeye çalışıyordum.

Ben her şeyi gzip sonra rsync ve sıkıştırmasını açmak için vardı düşünceler, sıkıştırma için rsync -z güveniyor, gzip sonra rsync -z kullanın. Tam olarak nasıl rsync -z uygulandığından emin olmadığımdan hangisinin en verimli olacağından emin değilim. Hangi seçeneğin en hızlı olacağı konusunda herhangi bir fikriniz var mı?

Yanıtlar:


11

Gzip yalnızca bir dosyayı sıkıştırırken "her şeyi gzip edemezsiniz", bir tar dosyası oluşturabilir ve "her şeyi gzip" olarak gzip edebilirsiniz, ancak yalnızca değiştirilmiş dosyayı kopyalama yeteneğini kaybedersiniz.

Yani soru: rsync gziped veya rsync -z seçeneğine güvenmek gerekir dosya depolamak daha iyidir.
Yanıt muhtemelen dosyanın sunucunuzda açılmasını istememenizdir? Sanırım evet, bu yüzden rsync yapmadan önce gzip dosyasını nasıl yönetebileceğinizi göremiyorum.

Sadece değiştirilmiş dosyayı kopyalama yeteneğine ihtiyacınız olmayabilir mi? Bu durumda neden eşyalarınızı içeren bir tar.gz dosyasının bir scp yerine rsync kullanmak?

Her neyse, soruyu cevaplamak için, rsync gzip, gzip ile gziping dosyasından biraz daha az verimli olacaktır. Neden ? rsync, veri yığınlarını yığın olarak gzipleyeceğinden, gzip'in sıkıştırma yapmak için kullandığı tabloyu oluşturmak için daha küçük bir veri kümesi kullanılır, daha büyük bir veri kümesi (gzip tüm dosyayı bir kerede kullanır) daha iyi bir sıkıştırma tablosu verir. Ancak fark çoğu durumda çok çok küçük olacaktır, ancak çok nadir durumlarda fark daha önemli olabilir (dosyada birçok kez yinelenen ancak birbirinden uzakta çok uzun bir parantez içeren çok büyük bir dosyanız varsa) (Bu çok basitleştirilmiş bir örnek)


1
Sorusunu nasıl okuduğumdan, telin üzerinden almak için sıkıştırır ve sonra diğer tarafı açar. Sadece 50GB sıkıştırmak ve sıkıştırmasını açmak önemli bir zaman alabileceğinden, gzip üzerinden rsync yerel sıkıştırma ile giderdim. Daha sonra, dosyalar çoğunlukla metinse, güzelce sıkışırlar. Üçüncü seçenek: dosyaları bir USB sürücüsüne kopyalayın.

3
@Randolph Potter: Evet, yerel olarak 50GB sıkıştırmak için kaybedilen zaman o zaman rsync, rsync -z kullanmaktan daha yüksek olurdu, yine de rsync'in kendisinden yararlanmak istiyorsa (sadece değiştirilen dosyayı kopyalamak) sıkıştırma daha önce yapılamaz
radius

çok iyi bir nokta. Sizin için 1 :-)

Gzip'in bir akış kompresörü olduğunu da hatırlayın.
Falcon Momot

6

Verileri yalnızca bir kez kopyalıyorsanız, rsync kendi başına büyük bir kazanç olmayacaktır. Gzip'i (veya tar + gzip'i, birçok dosyanız olduğu için) beğendiyseniz, şöyle bir şey deneyebilirsiniz:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

Bu, aradığınız sıkıştırmayı alır ve rsync içermeden doğrudan kopyalar.


Muhtemelen gzip yerine bunun için - lzop kullanırdım ... çok daha hızlı ve düşük cpu yükü ve hala metin için iyi sıkıştırma oranlarına sahip
Temmuz'da alt

5

@radius, nasıl gzipçalıştığını seçmek için küçük bir nit - gzipblok tabanlı bir sıkıştırma algoritması ve bu oldukça basit bir algoritmadır. Tüm dosya sıkıştırma tablosu için dikkate alınmaz - yalnızca her blok. Diğer algoritmalar dosyanın tüm içeriğini kullanabilir ve birden çok bloğun veya hatta değişken boyutlu blokların içeriğini kullanan birkaç tane olabilir. Büyüleyici bir örnek, lrzipaynı yazar tarafından rsync!

Sıska gzipalgoritması .

Yani, özet olarak, kullanmak rsync -zmuhtemelen ilk sıkıştırma ile aynı sıkıştırmayı verecektir gzip- ve diferansiyel aktarımı yapıyorsanız, farklı rsyncalgoritma nedeniyle daha iyi .

Bununla birlikte, birinin diferansiyel olmayan transferler için düzenli olarak scpatıyor olduğunu düşünüyorum rsync- çünkü rsyncalgoritmanın algoritmasından çok daha az ek yükü olacak ( scpyine de başlık altında kullanacak !)

Ağ Eğer gelmez bir darboğaz haline, o zaman telin üzerinde sıkıştırma kullanmak istersiniz.

Senin Eğer diskler tıkanıklık olan bir sıkıştırılmış dosya içine akışı iyi olurdu zaman, bu. (örneğin, netcatbir makinenin sonraki, akış halinde için gzip -c)

Genellikle, hız önemliyse, mevcut bir dosyayı önceden sıkıştırmak boşa gider.

TIMTOWTDI, YMMV, IANAL, vb.


2

Bu adama göre, kullanımı daha hızlı olabilir rsync -z, ancak aktarmadan önce her dosyayı sıkıştırmak kadar verimli olacağını tahmin ediyorum. Diğerleri tarafından önerildiği gibi katran akışını sıkıştırmaktan daha hızlı olmalıdır.

Man sayfasından:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.

1
Hızlı bir ağınız varsa - rsync -z ile --compress-level = 1 kullanmanızı öneririm. Toplam aktarım süresini en aza indirmek için ağın CPU veya disk G / Ç değil, darboğazınız olmasını istiyorsunuz. Ağ yavaşsa, varsayılan -z (bence gzip -6'ya eşdeğer) kullanılması, işlem ağını yine de bağlayabilir.
rmalayter

1

Sıkıştırılmış dosya ve rsync'nin her iki scp de çok benzer aktarım süreleri alacağından, "bunu yapmanın en etkili yolu" sıkıştırmak, aktarmak yerine anında sıkıştırma olacaktır.

"Haslık" yanı sıra diğer hususlar:

Tüm dosyalar aktarılmazsa rsync kolayca yeniden başlatılabilir.

rsync, uzak makinedeki dosyaları korumak için kullanılabilir.

yerel katran veya gzip yerel alan gerektirir.

Hem hedef makine hem de güvenlik duvarları için bağlantı noktası kullanımında dikkat edilecek noktalar: 1) scp, kabul edilemeyecek 22 numaralı bağlantı noktasını (varsayılan olarak) kullanır. 2) rsync kullanıcıları bağlantı noktası 873 (varsayılan olarak)

Yarıçapın neden orijinal posterin sıkıştırılmamış dosyaların depolanmasını istemediğinden emin değilim.

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.