Milyonlarca dosyayı bir sunucudan diğerine aktarma


15

İki sunucum var. Bir tanesinde 15 milyon metin dosyası (yaklaşık 40 GB) var. Onları başka bir sunucuya aktarmaya çalışıyorum. Onları sıkıştırmayı ve arşivi aktarmayı düşündüm, ancak bunun iyi bir fikir olmadığını fark ettim.

Bu yüzden aşağıdaki komutu kullandım:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

Ama bu komutun sadece yaklaşık 50.000 dosya aktardığını ve sonra bağlantının kesildiğini fark ettim.

Tüm dosya koleksiyonunu aktarmama izin veren daha iyi bir çözüm var mı? Yani rsyncbağlantı kesildiğinde aktarılmayan dosyaları aktarmak gibi bir şey kullanmak istiyorum . Başka bir bağlantı kesilmesi meydana geldiğinde, dosya aktarımı için komutu tekrar yazıp, başarıyla aktarılmış olanları yoksayarım.

Bu mümkün değildir scp, çünkü her zaman ilk dosyadan başlar.

Yanıtlar:


33

Söylediğiniz gibi kullanın rsync:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

Seçenekler:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

@Aim'in cevabında söylediği gibi /, kaynak dizinde bir iziniz olduğundan emin olun (her ikisinde de iyidir).

Kılavuz sayfasından daha fazla bilgi


1
-hİnsan tarafından okunabilir birimleri kullanmak için bayrağı eklemenizi öneririm . Daha fazla ayrıntı istiyorsanız, birkaç seçeneğiniz vardır: -ive / veya -v/ -vv.
nyuszika7h

2
Genellikle scp yerine rsync kullanmamanın çok az nedeni vardır. Temel kullanımı aynıdır ve birçok ek kullanışlı özellik sunar.
pimlottc

eğer sshsizin için bir seçenek değildir ve sen benim komut deneyebilirsiniz ihtiyaç veya şifrelemeyi istemiyoruz s3.amazonaws.com/skaperen/rsend
Skaperen

7

Sadece ssh üzerinde rsync kullanın!

rsync -av username@ip:/var/www/html/txt /var/www/html/

Man sayfasından:

-a , - arşiv : -rlptgoD ile eşdeğerdir. Özyineleme istediğinizi ve hemen hemen her şeyi korumak istediğinizi söylemenin hızlı bir yoludur (-H dikkate değer bir ihmaldir). Yukarıdaki eşdeğerlik için tek istisna --files-from belirtildiğinde, bu durumda -r ima edilmez.

-v , - ayrıntılı : Bu seçenek, aktarım sırasında size verilen bilgi miktarını artırır. Varsayılan olarak, rsync sessizce çalışır. Tek bir -v size hangi dosyaların aktarıldığına dair bilgi verir ve sonunda kısa bir özet sunar. İki v seçenekleri, hangi dosyaların atlandığı hakkında bilgi verir ve sonunda biraz daha fazla bilgi verir. İkiden fazla -v seçeneği yalnızca rsync hata ayıklaması yapıyorsanız kullanılmalıdır.

Dosyaların sonunda eğik çizgileri nasıl kullandığımı not edin - bu önemlidir .


Muhtemelen sondaki eğik çizginin önemi hakkında daha fazla bilgi eklemelisiniz. Gönderen rsyncmanuel sayfa: "kaynağında bir sondaki işareti hedefte ek bir dizin yaratmaktan kaçınmak için bu davranışı değiştirir Sen anlam olarak bir kaynağa / bir eğik düşünebiliriz. '' Karşıt olarak" bu dizinin içeriğini kopyalamak dizini ada göre kopyala "dır, ancak her iki durumda da içeren dizinin öznitelikleri hedefte bulunan dizine aktarılır."
nyuszika7h

... ve bayrakların anlamı -av?
MrWhite

0

Lftp, rsync'den çok daha hızlı ve web sitelerini (birçok küçük dosya) yansıtmak için en iyisini kullanın. Ayrıca birden çok bağlantı kullanarak paralel olarak aktarılabilir:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

Bir bağlantı koparsa, yeniden bağlanır ve devam eder. Aktarımı keserseniz mevcut dosyaları atlayacak ve devam edecektir.

http://lftp.yar.ru/


0

Başka bir yol, (isteğe bağlı olarak sıkıştırılmış) bir tar dosyasını ssh üzerinden borulamaktır:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
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.