Мне обычно приходится копировать содержимое папки в сетевой файловой системе на мой локальный компьютер. В удаленной папке есть много файлов (1000 с), которые все относительно малы, но из-за сетевых издержек обычное копирование cp remote_folder/* ~/local_folder/
занимает очень много времени (10 минут).
Я полагаю, что это потому, что файлы копируются последовательно - каждый файл ждет, пока предыдущий не будет завершен, прежде чем начнется копирование.
Какой самый простой способ увеличить скорость этой копии? (Я предполагаю, что это будет выполнять копию параллельно.)
Архивирование файлов перед копированием не обязательно ускорит процесс, поскольку все они могут быть сохранены на разных дисках на разных серверах.
Ответы:
Пока вы ограничиваете команды копирования, которые вы выполняете, вы, вероятно, можете использовать скрипт, подобный тому, который опубликовал Scrutinizer.
источник
&
в концеcp
команды позволяетwhile
циклу продолжить и запустить следующую команду cp без ожидания. Командаxargs
передает имена файлов в группах по 4 (MAX_PARALLEL) вwhile
цикл.cp
. Вы, конечно, можете ускорить расчет через многопоточность. Но я не думаю, что то же самое относится и к копированию данных на жестком диске.Если у вас установлен GNU Parallel http://www.gnu.org/software/parallel/, вы можете сделать это:
Вы можете установить GNU Parallel просто:
Посмотрите вступительные видео для GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
источник
Одним из способов будет использование rsync, который будет копировать только изменения - новые файлы и измененные части других файлов.
http://linux.die.net/man/1/rsync
Выполнение любой формы операции параллельного копирования, вероятно, приведет к затоплению вашей сети, а операция копирования просто остановится или пострадает от узких мест на исходном или целевом диске.
источник
Честно говоря, лучший инструмент - это gsutil от Google. Он обрабатывает параллельные копии с рекурсией каталога. Большинство других методов, которые я видел, не могут справиться с рекурсией каталога. Они специально не упоминают локальную файловую систему к локальным копиям файловой системы в своих документах, но это работает как шарм.
Это еще один двоичный файл для установки, но, вероятно, тот, который вы уже можете запустить, учитывая все современные внедрения облачных сервисов.
источник
Параллельный rsync с использованием find:
в корпоративной локальной сети одиночная rsync выполняет около 800 Мбит / с; с 6-8 работами я могу получить более 2,5 Гбит / с (за счет высокой нагрузки). Ограничено дисками.
источник
Есть много вещей, которые нужно учитывать в зависимости от имеющейся у вас топологии. Но прежде чем начать думать о сложных решениях, вы можете просто попытаться разделить задачу на две работы и проверить, не сократится ли необходимое время:
В следующий раз попробуйте:
(вы можете заменить [al] * на что-то еще, что соответствует примерно половине файлов - возможно, [0-4] * - в зависимости от содержимого папки)
Если время не улучшается значительно, может быть более важно проверить, необходимо ли копировать все файлы (каково соотношение измененных файлов ко всем файлам?)
источник