У меня есть требование передавать огромные данные (скажем, более 10 ТБ) с одной машины на другую по закрытой сети (LAN)! есть ли проверенные методы для этого?
я думаю над FTP? это правильный подход?
Любое предложение будет полезным!
Спасибо, Прашант
Огромные данные не являются проблемой для каких-либо протоколов, проблема в том, сколько файлов у вас есть и что вам нужно передать (просто набор данных или прав доступа к файлам, владельцев и т. Д.). FTP - плохое и неэффективное решение. rsync, glusterfs - это хорошо (tm) и так далее ... зависит ...
10 ТБ по локальной сети займет много времени, если у вас низкоскоростное соединение.
Если у вас есть возможность расширить полосу пропускания - добавьте агрегацию ссылок, используйте связывание на серверах (особенно LACP) - вы выиграете некоторое время для переводов. Кроме того, убедитесь, что у ваших дисков достаточно возможностей для передачи данных с нужной вам скоростью.
Думаю, webdav или rsync тоже подойдут. Даже Cifs или NFS тоже хороши, в среде Windows, вероятно, я буду использовать robocopy + cifs с многопоточностью, чтобы улучшить скорость копирования.
В Linux может быть cp + NFS и GNU параллельно https://savannah.gnu.org/projects/parallel/
Надеюсь, он будет вам полезен :)
FTP работает, но я бы удостоверился, что и клиент, и сервер достаточно эффективны и, что наиболее важно, предлагают возможность возобновления передачи.
Я также предлагаю взглянуть на rsync, поскольку он довольно эффективен и предлагает множество опций для управления пропускной способностью и текущей синхронизацией (если это необходимо).
Если на основе Unix, используйте Rsync с параметром --archive. Это также позволяет легко останавливаться и запускаться. FTP - нет. Мой совет - не использовать FTP.
При использовании Windows вы можете взглянуть на synctoy. Я не уверен, но он также позволяет останавливаться и запускаться.
И это Гигабит? Если нет, есть ли у вас возможность соединить серверы друг с другом и скопировать через второй сетевой адаптер? Это могло ускорить процесс.
В Linux я обычно делаю на принимающей стороне:
nc -l 43210 | tar xf -
А на отправляющей стороне:
tar cf - . | dd bs=1M | nc receiving_hostname 43210
Затем я запускаю другой терминал на отправляющей стороне, чтобы получить статистику передачи в реальном времени на отправляющей консоли:
while sleep 10; do killall -USR1 dd; done
Здесь просто используется простая передача по TCP - не нужно настраивать сервер FTP / NFS / CIFS. Это перенесет около 10 ТБ за 24 часа в сети 1 Гбит / с если бы диски с обеих сторон были достаточно быстрыми.
Возможно, вам потребуется разрешить подключения к используемому порту (43210 в моем примере) в брандмауэре на принимающей стороне. Он также должен работать на других устройствах, таких как OSX или FreeBSD. В Windows вы можете использовать мой «dot_nc» и «dot_nc_l», которые являются упрощенными эквивалентами nc
и nc -l
реализован на C # в Windows, который я использовал для тестирования необработанных TCP-передач в Windows.
Как далеко машины друг от друга? Возможно ли (т.е. практически) отсоединить дисковый массив от первой машины, физически присоединить ее ко второй машине и сделать локальную копию?
(Или наоборот - подключите дисковый массив второй машины к первой машине)
Я недавно передал 10 ТБ через соединение 1 Гбит / с. Основная проблема заключалась в том, чтобы постоянно поддерживать скорость 1 Гбит / с. Это не было проблемой при передаче больших файлов, но оказалось проблемой при передаче небольших файлов, поскольку отправитель не мог искать достаточно быстро.
Решением было запустить несколько переводов параллельно. Некоторые с большими файлами, а некоторые передают остальные. В его основе лежали:
http://www.gnu.org/software/parallel/man.html#example__parallelizing_rsync
Если ваши файлы сжимаются, обязательно сжимайте передачу (rsync -z).
Теоретически вы должны иметь возможность использовать GNU Parallel и rsync в Windows 7, но даже если вы не можете, вы, вероятно, можете использовать идею передачи больших файлов параллельно с небольшими файлами.