15 TB küçük dosya aktarma


79

Verileri bir sunucudan diğerine arşivliyorum. Başlangıçta bir rsyncişe başladım . Yalnızca 5 TB veri için dosya listesini oluşturması ve 1 TB veri aktarması için bir hafta daha harcadı.

Sonra yeni sunucuda biraz zamana ihtiyacımız olduğu için işi öldürmek zorunda kaldım.

Muhtemelen tekrar erişmemize gerek kalmayacağından anlaşmaya varmamız konusunda anlaşmaya varıldı. 500 GB'lık parçalara ayırmayı düşünüyordum. Ondan sonra tarsonradan kopyalayacağım ssh. Ben kullanıyordum tarve pigzama yine de çok yavaş.

Bunu yapmanın daha iyi bir yolu var mı? Sanırım her iki sunucu da Redhat'ta. Eski sunucu Ext4 ve yenisi XFS.

Dosya boyutları birkaç kb ile birkaç mb arasında değişmektedir ve 5TB'de 24 milyon jpeg vardır. Bu yüzden 15 TB için 60-80 milyon civarında tahmin ediyorum.

düzenleme: birkaç gün için rsync, nc, katran, mbuffer ve pigz ile oynadıktan sonra. Darboğaz disk GÇ olacak. Veriler 500 SAS diskinde ve yaklaşık 250 milyon jpeg arasında şeritli. Ancak şimdi, gelecekte kullanabileceğim bu güzel araçları öğrendim.



2
Bir seçenek, sıkıştırılmış tar dosyalarını harici bir sürücüde oluşturmak ve onu yeni sisteme taşımaktır. Ekstra disk, tar dosyalarını oluşturmayı hızlandıracak (muhtemelen onlardan 15TB okumaya çalışırken sistemdeki mevcut disklere yazmayacak) ve yeni sunucuyu bağlamaz.
Brian

4
Bunu yapmanın daha iyi bir yolu var mı? - Evet, Windows Server 2012 R2 DFS çoğaltması bunu yaklaşık 10 saat içinde hazırlar . Ve değişiklikleri senkronize eder ve yeniden başlatıldıktan sonra kaldığı yerden devam eder.
TessellatingHeckler

27
@TessellatingHeckler: yani OP arşivlemeden önce OP'nin Redhat'ten Windows'a taşınmasını öneriyor musunuz?
Thomas Weller

12
@ThomasWeller "Daha iyi bir yol var mı?" Diye sordular ve var. Daha iyi bir şekilde kullanmalarını tavsiye etmiyorum. Kesintiden kurtulamayan, dosya içeriğini doğrulamayan, kopya durumunu raporlamayan, dosyaların parçalarını kopyalamayı önlemek için önceden kopyalanmış blokları kullanamayan, bir boruda komutları kullanmakta serbestler düşük öncelikli kopyalamayı destekler, duraklatılamaz, ACL'leri kopyalamaktan hiç bahsetmez ve çalıştırmak için oturumda kalması gereken birisine ihtiyaç duyar. Bununla birlikte, bunu izleyen herhangi biri ilgisini çekebilir - ya da "x bunu Linux'ta yapar" demeli.
TessellatingHeckler

Yanıtlar:


64

tar, pigz(Paralel gzip) ve kullanarak çok iyi sonuçlar aldım nc.

Kaynak makinesi:

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

Hedef makine:

Ayıklamak:

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

Arşivi korumak için:

nc source_machine_ip 9876 > smallstuff.tar.gz

Eğer aracılığıyla aktarım hızını sadece boru görmek isterseniz pvsonra pigz -d!


3
Bilginize, sen yerine pigzsahip gzipveya tamamen kaldırmak, ancak hız önemli ölçüde daha yavaş olacaktır.
h0tw1r3 9:15

10
Bu nasıl OP zaten çalıştı eğer kabul edilebilir tarve pigz? Anlamıyorum ...
Thomas Weller

5
@ThomasWeller, onun denediğini nereden aldın pigz? Sorudan, rsyncşu ana kadar sadece denemişe benziyor ve verileri bölmeyi ve paketlemeyi kullanmayı düşünüyordutar . Özellikle -z/ --compressrsync'de / seçeneğini kullanmadıysa, pigzteorik olarak önemli ölçüde yardımcı olabilirdi.
Doktor J

1
@ThomasWeller evet gerçekten ben zaten tar ve pigz denedim ama nc değil. Ben ssh kullanıyordum, bu yüzden daha fazla ek yük ekledi.
lbanz

2
Bu, basitçe sıkıştırma için çok fazla CPU kullanmak tariçin yeterince hızlı veri üretmediği anlamına gelir pigz. Çok sayıda küçük dosya okumak, aynı sayıda bayt büyük dosyaları okumaktan çok daha fazla sistem çağrısı, daha fazla disk araması ve daha fazla çekirdeği içerir.
hobbs

21

Rsync çözümüne bağlı kalacağım. Modern (3.0.0+) rsync artan dosya listesini kullanır, bu nedenle aktarımdan önce tam liste oluşturmak zorunda değildir. Bu nedenle, yeniden başlatmak, sorun olması durumunda tekrar tüm transferi yapmanız gerekmeyecektir. Aktarımı üst veya ikinci seviye dizinine bölmek, bunu daha da optimize edecektir. ( Ağınız sürücülerinizden daha yavaşsa, kullanır rsync -a -Pve eklerim --compress.)


Eski sunucuda rsync 2.6.8 kullanıyorum. Satıcı tarafından belirtilen herhangi bir şeyi kurmamıza / güncellememize izin verilmeyen kutulardan biri olduğu veya garantiyi geçersiz kıldığı için. Güncelleyebilir ve daha hızlı olup olmadığına bakabilirim.
lbanz

18
Statik olarak bağlı bir rsync binary'i bulun (veya oluşturun) ve onu evinizden çalıştırın. Umarım bu garanti vermez.
Fox

Nasıl hakkında unison? Nasıl karşılaştırır rsync?
Gwyneth Llewelyn

15

Bir VPN kurun (eğer internetse), uzak sunucuda bir formatta sanal bir sürücü oluşturun (ext4 yapın), uzak sunucuya monte edin , sonra bunu yerel sunucuya monte edin (iSCSI gibi bir blok seviyesi protokolü kullanarak ) ve aktarımı yapmak için dd veya başka bir blok seviyesi aracı kullanın. Daha sonra dosyaları sanal sürücüden, istediğiniz zaman gerçek (XFS) sürücüye kopyalayabilirsiniz.

İki sebep:

  1. Ana performans suçlusu olan hiçbir dosya ek yükü yok
  2. Aramak yok, her iki tarafta da sıralı okuma / yazma bakıyorsunuz

3
Dosya sistemini atlamak iyidir. Okuma yazma sistemine bağlı bir dosya sisteminin blok seviyesinde kopyalanması gerçekten kötü bir fikirdir. Önce salt okunur unmount veya salt okunur.
JB.

15 TB'lık bir kopyaya sahip olmak da berbat. Yeni sunucunun minimum 30'a ihtiyacı var demektir.
Arthur Kay

3
Sunucu LVM kullanıyorsa, dosya sisteminin salt okunur bir görüntüsü yapılabilir ve kopyalanabilir. Yalnızca anlık görüntü okunurken gerçekleşen dosya sistemindeki değişiklikler için alan ek yükü.
liori 10:15

9

Eski sunucu kullanımdan kaldırılıyorsa ve dosyalar birkaç dakika boyunca çevrimdışı olabilirse, sürücülerin eski kutusundan çıkarılması ve yeni sunucuya bağlanması, çevrimiçi olarak takılması (şimdi çevrimiçi) ve dosyaların kopyalanması genellikle en hızlı yoldur. yeni sunuculara yerel diskler.


2
Bu yaklaşık 1PB 2 TB'lık sürücüler, bu yüzden çok fazla.
lbanz

3

Mbuffer kullanın ve güvenli bir ağdaysa, şifreleme adımından kaçınabilirsiniz.


3

(Birçok farklı cevap işe yarayabilir. İşte bir diğeri.)

Dosya listesini find -type f(birkaç saat içinde bitmesi gerekir) ile oluşturun, küçük parçalara bölün ve her bir parçayı kullanarak aktarın rsync --files-from=....


3

Sinsi düşünmeyi düşündün mü? Bununla, her şeyi aynı sürücüye transfer etmek, sonra fiziksel olarak bu sürücüyü taşımak demek istiyorum.

Samsung, bir ay önce, bir SSD olan 16 TB'lik bir sürücüyü (teknik olarak 15.36 TB) açıkladı: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard aktarmalar-16 TB

Bence bu sürücü hemen bunun için yapacak. Hala tüm dosyaları kopyalamak zorunda kalacaksınız, ancak ağ gecikme süreniz olmadığından ve muhtemelen SATA veya benzer şekilde hızlı bir tekniği kullanabildiğiniz için, çok daha hızlı olması gerekir.


2

Veri tekilleştirme sırasında yüksek başarı oranı elde etmek için herhangi bir şans varsa, borgbackup veya Attic gibi bir şey kullanırdım .

Eğer değilse, netcat + tar + pbzip2 çözümünü kontrol edin, sıkıştırma seçeneklerini donanımınıza göre uyarlayın - tıkanıklığın (CPU? Network? IO?) Ne olduğunu kontrol edin. Pbzip2, tüm CPU'larda güzel bir şekilde yayılır ve daha iyi performans sağlar.


lzma ( xz), bzip2'den daha hızlı sıkıştırır ve çoğu girdide iyi çalışır. Maalesef, xzçoklu okuma seçeneği henüz uygulanmadı.
Peter Cordes

Genellikle sıkıştırma aşaması dekompresyondan daha fazla beygir gücüne ihtiyaç duyar, bu nedenle eğer CPU sınırlayıcı bir faktör ise, pbzip2 daha iyi bir genel performansa yol açar. Her iki makine de aynıysa dekompresyon işlemi etkilememelidir.
neutrinus

Evet, demek istediğim bir tek akışlı çoklu iş parçacığı lzma olmaması bir utançtı. Her ne kadar bu kullanım için, verilerin tüm dosya sistemlerini aktarmak, pigzprob olacaktır. kullanmak isteyeceğin en yavaş kompresör ol. Veya hatta lz4. ( lz4mtMevcut tek parçalı akış için çok parçacıklı bir akış var. Çok verimli bir şekilde işlenmiyor (sık sık yeni dişler ortaya çıkıyor), ancak sağlam bir hız kazanıyor)
Peter Cordes

2

RedHat Linux kullanıyorsanız, bu geçerli olmaz, ancak başka bir seçenek olarak:

ZFS kullanarak, düğümler sorun olmadığından milyonlarca dosyayı tutmakta büyük başarı elde ettim.

Bu sizin için bir seçenek olsaydı, daha sonra anlık görüntüler alabilir ve artan güncelleştirmeleri göndermek için zfs kullanabilirsiniz. Arşivleme yöntemlerinin yanı sıra arşiv verilerini aktarmak için bu yöntemi kullanarak çok başarılı oldum.

ZFS, öncelikle bir Solaris dosya sistemidir, ancak illumlarda bulunabilir (Sun'ın OpenSolaris'in açık kaynaklı çatalı). BSD ve Linux altında ZFS kullanımında da bazı şanslar olduğunu biliyorum (FUSE kullanarak?) - ama bunu denememe dair hiçbir tecrübem yok.


3
Bir süredir FUSE’in
EEAA

1

rsyncHedef makinede bir cini başlat . Bu transfer işlemini çok hızlandıracak.


-1

Bunu sadece tar ve ssh ile yapabilirsiniz:

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

Veya, tek tek dosyaları saklamak istiyorsanız:

tar zcf - <your files> | ssh <destination host> "tar zxf -"


1
Tek bir CPU kullanarak sıkıştırmaya devam edemez, devam ettirmenin bir yolu yoktur.
neutrinus
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.