Bir sunucudan diğerine yaklaşık 300GB dosya aktarımı


20

Bugün yeni bir sunucuya aktardığım yaklaşık 200.000 dosyam var. Daha önce bu kadar büyük ölçekte hiçbir şey yapmadım ve bu konuda nasıl ilerlemem gerektiği konusunda bazı tavsiyeler almak istedim. Onları iki Centos 6 dağıtımı arasında taşıyorum ve bunlar ülkenin farklı yerlerinde. Orijinal sunucuda tüm dizinleri ve dosyaları tek bir büyük tarball'a katlamak için yeterli HDD alanım yok, bu yüzden sorum şu tüm bu dosyaları nasıl aktarmalıyım? rsync? rsync kullanmanın özel bir yolu var mı? Nasıl yapılacağı ile ilgili herhangi bir girdi / öneri şaşırtıcı olurdu.

Teşekkürler

EDIT: merak edenler için, böyle screenbüyük bir rsynckomut çalıştırırken bir kullanmanızı öneririz . Özellikle aptalca bir şey meydana geldiğinde ve rsynckomutu çalıştırdığınız A sunucusuyla olan bağlantınız kesildiğinde . Ardından ekranı ayırın ve daha sonra devam ettirin.


4
rsyncHenüz denedin mi? Belki küçük bir dosya setinde? Bunun için ideal bir araç olmalı.
Mart'ta

Neredeyse kesinlikle bu iş için en iyi araç değil, ancak dosyayı taşımadan önce bir dosyaya sıkıştırmak yerine bir ssh bağlantısı üzerinden katran aktarabilirsiniz:tar cz | ssh user@example.com tar xz
1'de Aesin

2
konu dışı olabilir, ancak (özellikle ilk yük için ve ardından rsyncsonraki güncellemeler için kullanılır ): "Bantlarla dolu bir istasyon vagonunun bant genişliğini asla küçümsemeyin (yani: 2. hd yerleştirmeyi düşündünüz mü (veya bir usb2 taktınız mı?) / usb3 disk), yedekleyin ve fedex üzerinden uzak bir yere gönderin? Her şeyden çok daha hızlı olabilir ve diğer kullanımlar için bant genişliğinden tasarruf edebilirsiniz
Olivier Dulac

Bir sağlayıcıda herhangi bir BW sınırım yok ve diğeri bu ay ulaşmayacağım. Yani gerçekten boşa harcamam gereken bir sorun yok: P
MasterGberry

1
@OlivierDulac what-if.xkcd.com/31
Bob

Yanıtlar:


24

Sadece Simon'un eti dışarı cevabı , rsyncbu iş için mükemmel bir araçtır:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Uzak makineye ssh erişiminiz olduğunu varsayarsak, böyle bir şey yapmak istersiniz:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

Bu dizin kopyalar path/to/local/fooiçin /path/to/remote/baruzak sunucuda. Adlı yeni bir alt dizin bar/foooluşturulacaktır. Yalnızca bir dizinin içeriğini , hedefte o adda bir dizin oluşturmadan kopyalamak istiyorsanız , bir eğik çizgi ekleyin:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

Bu işlemin içeriğini foo/uzak dizine kopyalar bar/.

Alakalı birkaç seçenek:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

rsync -hrtplu --progressilerlemeyi görmek istersem yapabilir miyim?
MasterGberry

@ MasterGberry yup, kesinlikle. Çalışan bir yedekleme komut dosyası var rsync --progress --stats -hrtl --update source destination.
terdon

Çalıştırırken sorun yaşıyorum. rsync -hrtplu --progress --rsh='ssh -p2202'ne kullanıyorum ve bağlanamıyor. 255 hatası almaya devam edin. Ama ben buna katıldım. Bu yüzden güvenlik duvarı olmadığını biliyorum ... cmd üzerinden şifre sağlamam gerekiyor mu? yoksa benden sonra istemez mi?
MasterGberry

Derp, nvm. Güvenlik duvarımda giden trafiği unuttum. Teşekkürler
MasterGberry

Önemli not: rsync ile "--delete" komutunu kullanırken çok dikkatli olun: bu konuda çok okuyun, diğer (/ tmp / ...) klasörlerinde test edin ve sondaki "/" eklerken veya eklemezken değişikliklere dikkat edin kaynak dizin (ler) in veya varış yeri dizinin sonunda.
Olivier Dulac

14

Ne kadar hızlı kopyalanması gerektiğine ve kullanılabilir bant genişliğine bağlıdır.

Kötü bir ağ bağlantısı için, bantlarla dolu bir kamyonun bant genişliğini göz önünde bulundurun. (Oku: 2,5 inç HDD gönderin veya sadece kendiniz sürün. 300 gigabit sürücülerin bulunması kolay olmalıdır).

Daha az zaman kritikse veya bol miktarda bant genişliği varsa, rsync harikadır. Bir hata oluşursa, önceki dosyaları yeniden kopyalamadan devam edebilirsiniz.

[Düzenle] Verileriniz kopyalama sırasında kullanılırsa rsync'i birkaç kez çalıştırabileceğinizi eklemeyi unuttum.

Örnek:
1) Kullanılan veriler. Rsync -> Tüm veriler kopyalanır. Bu biraz zaman alabilir.
2) rsync'i tekrar çalıştırın, sadece değiştirilen dosyalar kopyalanır. Bu hızlı olmalı.

Değişiklik kalmayana kadar bunu birkaç kez yapabilir veya kopyalama sırasında verileri salt okunur yaparak akıllı / güvenli bir şekilde yapabilirsiniz. (örneğin, salt okunur olarak paylaşılan kullanılmış bir paylaşılan kümedeyse veya verileri yeniden senkronize ederseniz, geceleri ikinci kez çalıştırırken paylaşımı salt okunur olarak ayarlayın).


1
Hiçbir sunucu bant genişliğinin makul bir sürede 300G'yi işleyemeyeceği bir yerde yaşamamalıdır ...
Dan

1
Bu 'makul' olana bağlıdır. En zayıf bağlantının 100 mbit olduğunu varsayalım (Ofisten yükleme limiti olup olmadığını veya diğer indirme işlemini önemsemiyorum). Bu yaklaşık 10MB / sn. (div 10 kadar makul görünüyor, eğer her şey yolunda giderse biraz daha fazlasını elde edebileceğinizi biliyorum. Örneğin, kimse hattı hiçbir şey için kullanmıyor). 10MB / sn ~~ 600MB / dak ~~ 36000MB / saat ~~ 36 GB / saat ~~ 300GB 8 saat 20 dakikadır. Bu bir gecede yapılabilir. Bu da birçok varsayım yapar. Örneğin, yükleme yalnızca 2 mbit ise (Bu hızlarda ofislerimiz vardır) 50 kat daha uzun sürer (415 saat veya 17.3 gün).
Hennes

Olmadı! Evet, 8-10 makul, ama gerçekten birtakım varsayımlar yapıyordum.
Dan

2
@Dan Sunucunun çalışır durumda olması ve istekleri yerine getirmesi bir gereklilikse, yukarı akış bant genişliğini doyurmak muhtemelen kötü bir fikirdir. Bu yüzden bunu hesaba katmak için aktarım hızını yapay olarak azaltmanız gerekir.
Bob

6

Ben rsync için gitmek istiyorum! Sunucumu bir site dışı sunucuya yedeklemek için kullanıyorum ve iyi çalışıyor. Genellikle kopyalanacak birkaç MB var ama bazı günler 20-30GB'a kadar çıkıyor ve her zaman sorunsuz çalıştı.


0

Gigabit bağlantısı kullanan NFS üzerinden rsync yaklaşık 10 saat sürecek. HDD'ye veri kopyalamak ve sunucu arasında taşımak daha iyi olacaktır. Aslında diskin bire bir kopyasını almanız gerekiyorsa, diskin ham görüntüsünü oluşturmak için dd veya bunun gibi bir şey kullanın. Ssh (scp) kullanmak büyük bir ek yüke neden olur. Gigabit bağlantısında ampirik olarak test edilmiştir. rsync, HA veya yedekleme modunda kullanılan iki sunucu arasında artımlı senkronizasyon yapmakta iyidir. Sanırım.


Bu cevabın dili ve tarzı geliştirilmelidir.
FSMaxB

Rsync, dosyalar kopyalama sırasında değişebilirse özellikle harikadır. Sadece birkaç kez çalıştırın. İlk kez tüm veriler kopyalanır. İkinci kez sadece ilk (uzun) kopya sırasında değişenler. Üçüncü kez gece veya hisse senetleri salt okunur olarak yapılır.
Hennes

will took nearly about 10h. It will be better to copy data on HDD and move them between server.ancak ülke genelinde olması, daha uzun sürmesi gerekir.
Rob

@FSMaxB: Bunu daha sonra yapacağım thx.
Pawel

@Rob: Bunu okudum;) Sunucuların iki farklı konumda olduğunu. Yani, hesaplamanız gerekir, Sizin için daha iyi olanı. Ülke genelinde bir yolculuk yapmak (yakıt maliyetini kontrol etmek, vb.) Veya ağ bağlantısını kullanmak. Daha faydalı ne olacak.
Pawel

0

ilk kez NFS ve tar / untar kullanın (NFS bu durumda en hızlı protokoldür, daha fazla CPU kullanımı ile ağ bant genişliğini korumak için tar)

tar cf - * | ( cd /target; tar xfp -)

bir dahaki sefere rsync kullan


Yeterli CPU gücünüz varsa, döngüye gzip ekleyerek bunu geliştirebilirsiniz. Ve NFS olmadan netcat'i kullanabilirsiniz. (Ya da her ikisi de: tar -cf - * | gzip | nc -p 4567ve nc -l 4567 | gunzip | tar xf -.
Hennes

teşekkürler Hennes, bu benim fikrimdi, ama borularda gzip unuttum
jet
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.