Какой самый быстрый и надежный способ передачи большого количества файлов?

10

Я пытаюсь передать около 100 тыс. Файлов общим объемом 90 Гб. Прямо сейчас я использую демон rsync, но он медленный 3.4mb / s, и мне нужно делать это несколько раз. Мне интересно, какие у меня есть варианты, которые позволили бы максимально использовать 100-битное соединение через Интернет и были бы очень надежными.

incognito2
источник
2
Вы получаете почти треть вашей связи - это респектабельно, но не очень. Насколько далеко летит электрон, передаются файлы?
Шейн Мэдден
Задержка 50 мс между двумя серверами.
incognito2
5
Я видел много файлов однажды hyperboleandahalf.blogspot.com/2010/04/…
Smudge
Если вы используете демон rsync, ssh не задействован, верно? Тогда объяснение, вероятно, инфраструктуры между хостами. Вы можете попробовать netperf, iperf или flowgrind, чтобы проверить скорость между хостами. Если этот тест дает вам более высокую скорость передачи данных, вы должны посмотреть, как rsync делает вещи медленными: чтение
ввода-вывода

Ответы:

11

Вы рассматривали Sneakernet ? При больших наборах данных доставка за ночь часто происходит быстрее и дешевле, чем через Интернет.

ceejayoz
источник
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 Мбит / с по каналам 1 Гбит. Замените пути в каждой команде tar, чтобы они соответствовали тому, что вы переносите.

Почему? mbuffer!

Самым большим узким местом в передаче больших файлов по сети является, безусловно, дисковый ввод-вывод. Ответ на это mbufferили buffer. Они во многом похожи, но mbufferимеют некоторые преимущества. Размер буфера по умолчанию составляет 2 МБ для mbufferи 1 МБ для buffer. Большие буферы, скорее всего, никогда не будут пустыми. Выбор размера блока, который является наименьшим общим кратным собственного размера блока как в целевой, так и в целевой файловой системе, даст наилучшую производительность.

Буферизация это то , что делает все различия! Используйте это, если у вас есть это! Если у вас его нет, получите! Использование (m}?bufferплюс что-либо лучше, чем все само по себе. это почти буквально панацея для медленной передачи файлов по сети.

Если вы передаете несколько файлов, используйте tarих для объединения их в один поток данных. Если это один файл, который вы можете использовать catили перенаправление ввода / вывода. Накладные расходы по tarсравнению со catстатистически незначимы, поэтому я всегда использую tar(или zfs -sendтам, где могу), если это не tarball . Ни один из них не гарантирует вам метаданные (и, в частности cat, не даст). Если вы хотите метаданные, я оставлю это в качестве упражнения для вас.

Наконец, использование sshдля транспортного механизма является безопасным и несет очень мало накладных расходов. Опять же, накладные расходы по sshсравнению ncстатистически незначимы.

bahamat
источник
При использовании SSH в качестве транспорта иногда возникают накладные расходы на шифрование. См .: Копирование файлов между компьютерами Linux с строгой аутентификацией без шифрования
ewwhite
2
Вы можете использовать более быстрые механизмы шифрования, если вам нужно. Но вам не обязательно передавать это через ssh. Я предпочитаю устанавливать порты -O и -I на mbuffer с обеих сторон. Даже если теперь это две команды, вы пропускаете шифрование и максимизируете пропускную способность сети, буферизуя оба конца. Я посылаю поток tar со скоростью 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тоже работает, но они более сложны , чтобы создать для простой передачи.
Багамат
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).

Soviero
источник
только при наличии доступного места для хранения архива ..
Теб
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-compress, например iso, уже заархивированные и сжатые архивы и т. д.

Сачин Дивекар
источник
-6

Я большой поклонник SFTP. Я использую SFTP для передачи медиа с моего основного компьютера на сервер. Я получаю хорошие скорости по локальной сети.

SFTP надежен, я бы дал этому шанс, так как его легко настроить, а в некоторых случаях он может быть быстрее.

Tillman32
источник
5
FTP должен умереть. Он не зашифрован, плохо обрабатывает прерывания, и для него есть как минимум полдюжины жизнеспособных альтернатив, которые не полностью отстой.
MDMarra
1
Вы когда-нибудь слышали о SFTP?
Tillman32
8
Да у тебя? Он никоим образом не связан с протоколом FTP ни в чем, кроме имени и того факта, что он перемещает файлы.
MDMarra
5
Известно, что FTP также ненадежен при обходе брандмауэров (он берет свое начало с того времени, когда брандмауэры открыли случайный порт для приема обратных соединений вашим клиентом, и клевая способность Passive & Extended Passive FTP обойти это ограничение заключается в следующем: Хакерство)
voretaq7