який найшвидший і найнадійніший спосіб передачі багатьох файлів?


10

Я намагаюся передати близько 100 К файлів загальною сумою 90 Гб. Зараз я використовую демон rsync, але його повільні 3,4 Мб / с, і мені потрібно це зробити кілька разів. Мені цікаво, що у мене є варіанти, які б забезпечили максимальне 100-бітне з'єднання через Інтернет та були б дуже надійними.


2
Ви отримуєте майже третину свого зв'язку - це респектабельно, але не чудово. Наскільки далеко, як електрон летить, передаються файли?
Шейн Мадден

Затримка 50ms між двома серверами.
інкогніто2

5
Я бачив багато файлів одного разу hyperboleandahalf.blogspot.com/2010/04/…
мазок

Якщо ви використовуєте демон rsync, тут не задіяно ssh, правда? Тоді пояснення - це, мабуть, інфраструктура між господарями. Ви можете спробувати netperf або iperf або flowgrind, щоб перевірити швидкість між хостами. Якщо цей тест дає вам більш високу швидкість передачі, то ви повинні подивитися на те, як rsync робить все повільно: читати введення-виведення на сервер повільно, записувати
введення-вивід

Відповіді:


11

Чи розглядали Ви Sneakernet ? Завдяки великим наборам даних, доставка через ніч часто буде швидшою та дешевшою, ніж передача через Інтернет.


10
"Ніколи не недооцінюйте пропускну здатність вагона станції, повного стрічок, що хитаються вниз по шосе". - AST
voretaq7

1
ну, враховуючи доступність гігабітного апаратного забезпечення локальної мережі, якщо його передача в локальну мережу, час, витрачений на запис через eSATA на одне шпиндель, не все так привабливо.
memnoch_proxy

10

Як? Або TL; DR

Найшвидший метод , який я знайшов це поєднання tar, mbufferі ssh.

Наприклад:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Використовуючи це, я домігся стійких передач локальної мережі понад 950 Мбіт / с на 1Gb посиланнях. Замініть шляхи в кожній команді tar, щоб вони відповідали тому, що ви передаєте.

Чому? mbuffer!

Найбільшим вузьким місцем у передачі великих файлів по мережі є, безумовно, дисковий введення / вивід. Відповідь на це - mbufferабо buffer. Вони багато в чому схожі, але mbufferмають деякі переваги. Типовий розмір буфера - 2 Мб для mbufferта 1 МБ для buffer. Більші буфери швидше ніколи не будуть порожніми. Вибір розміру блоку, який є найменшим загальним кратним нативного розміру блоку як у цільовій, так і в цільовій файловій системі, дасть найкращі показники.

Буферизація - це річ, яка має все значення! Використовуйте його, якщо у вас є! Якщо у вас її немає, дістаньте її! Використовувати (m}?bufferплюс що-небудь краще, ніж щось саме по собі. це майже буквально панацея від повільної передачі мережевих файлів.

Якщо ви переносите кілька файлів, використовуйте їх tarдля "згуртування" разом в один потік даних. Якщо це один файл, ви можете використовувати catабо переадресацію вводу / виводу. Накладні витрати tarпорівняно з catстатистично незначними, тому я завжди використовую tar(або zfs -sendтам, де можу), якщо це вже не тарбол . Жодне з них не гарантовано дає метадані (і, зокрема cat, не буде). Якщо ви хочете метаданих, я залишу це як вправу для вас.

Нарешті, використання sshтранспортного механізму є безпечним і несе в собі дуже невеликі витрати. Знову ж таки, накладні витрати sshпорівняно з ncстатистично незначними.


Іноді існує широке шифрування використання SSH як транспорту. Див.: Копіювання файлів між машинами Linux із сильною автентифікацією без шифрування
ewwhite

2
Ви можете використовувати швидші механізми шифрування, якщо вам потрібно. Але вам необов'язково потрібно прокладати цю скриньку. Я вважаю за краще встановлювати порти -O і -I на mbuffer з обох сторін. Навіть це дві команди, ви пропускаєте шифрування та максимізуєте пропускну здатність мережі, буферуючи обидва кінці. Я надсилаю потік смоли зі швидкістю 720 + Мбіт / с у моїй локальній локальній мережі з еквівалентомtar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy

2
@memnoch_proxy: Це гарна пропозиція (за яку я проголосував), але в цей день і вік, коли АНБ навіть прослуховує приватні лінії передачі даних між центрами обробки даних (наприклад, Google і Yahoo), використовуючи шифрування, IMO, це завжди хороша звичка робити . Використання sshробить це простим. Використання stunnel, socatабо opensslтеж працює, але вони більш складні , щоб створити для простої передачі.
bahamat

1
@bahamat дякую, що змусив мене ще раз переглянути це питання. Моя пропозиція здається підходящою лише тоді, коли передача може відбутися через VPN. Для передачі в Інтернеті я, звичайно, також використовував ssh.
memnoch_proxy

8

Ви згадуєте "rsync", тому я припускаю, що ви використовуєте Linux:

Чому б вам не створити файл tar або tar.gz? Час передачі одного великого файлу в мережі швидше, ніж у багатьох малих. Ви можете навіть стиснути його, якщо хочете ...

Дьоготь без стиснення:

На вихідному сервері:

tar -cf file.tar /path/to/files/

Потім на кінці прийому:

cd /path/to/files/
tar -xf /path/to/file.tar

Дьоготь з стисканням:

На вихідному сервері:

tar -czf file.tar.gz /path/to/files/

Потім на кінці прийому:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

Ви просто використовуєте rsync для фактичної передачі файлів (tar | tar.gz).


тільки якщо було б місце для зберігання архіву ..
Тебе

5

Ви можете спробувати tarі sshтрюк описано тут :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"

це може бути перезаписане на наступне :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"

Однак ви втратите --partialфункції rsyncцього процесу. Якщо файли не змінюються дуже часто, жити з повільним початковим моментом rsyncможе бути дуже вартим, оскільки це піде набагато швидше в майбутньому.


2

Можна використовувати різні варіанти стиснення rsync.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

Коефіцієнт стиснення для бінарних файлів дуже низький, тому ви можете пропустити ці файли, використовуючи --skip-компрес, наприклад iso, вже заархівовані та стислі тарболи тощо.


-6

Я великий фанат SFTP. Я використовую SFTP для передачі медіа з основного комп'ютера на мій сервер. Я отримую хороші швидкості, через LAN.

SFTP є надійним, я б дав цей знімок, оскільки його легко встановити, а в деяких випадках це може бути швидшим.


5
FTP потрібно померти. Він незашифрований, він не справляється з перебоями добре, і є щонайменше півдесятка життєздатних альтернатив для нього, які не повністю смоктають.
MDMarra

1
Коли-небудь чули про SFTP?
Tillman32

8
Так, так? Це жодним чином не пов'язане з протоколом FTP ні в чому, крім імені та того, що він переміщує файли навколо.
MDMarra

5
FTP також є сумнівно ненадійним при проходженні брандмауерів (він датується часом перед брандмауерами, коли ваш клієнт відкрив випадковий порт для прийому зворотних з'єднань, було здорово, і хакерство Passive & Extended Pasive FTP для подолання цього обмеження полягає лише в тому, що: Хакері)
voretaq7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.