Если вы думаете, что это дубликат ... ну, я еще не нашел удовлетворительный ответ:/

Я должен перенести папку с сервера на другой. Лично я бы использовал rsync, но вопрос в том, что ... эта папка содержит как большие файлы (> 5 ГБ), так и множество маленьких файлов (более 1 КБ <30 КБ файлов).

Я хотел бы избежать узкого места, вызванного передачей множества маленьких файлов.

Является ли rsync правильным инструментом для этого или есть лучшие решения?

SCP еще медленнее, на случай, если кто-то предложит это.

2 ответа2

1

Если это однократная передача, rsync НЕ является инструментом для этой работы.

То, как я это сделал бы, - это распаковать файлы (и при необходимости сжать, в зависимости от характеристик серверов и соединения между ними), затем направить это через SSH на новый сервер и распаковать его. Это можно сделать за 1 команду. Вам нужно будет изменить его в зависимости от специфики, но это будет выглядеть примерно так:

tar -cz /startdir | pv | ssh user@ip "cd /destpath; tar -xf" 

Это сжимает файлы в один поток, поэтому для каждого файла не требуется много возвратно-поступательных движений, что обеспечивает максимальную скорость. Он также выполняет сжатие, доставку и декомпрессию за один шаг, поэтому он минимизирует общее время, затрачиваемое.

Чтобы разобраться, как это работает:

tar сжимает / распаковывает файлы в поток на stdout (потому что имя файла не указано). -c означает создание, а z означает сжатие. Вы можете опустить z, если сжатие не требуется.

Бит pv не нужен, но обеспечивает обратную связь о том, что данные передаются, и о скорости передачи сжатых данных. Конечно, команда ssh создает соединение с удаленной стороной и передает ему выходные данные предыдущих команд. Затем он переходит в соответствующий каталог и распаковывает его.

-1

Используйте find ... -size чтобы tar файлы с заданным размером в один большой, а затем используйте rsync .... --min-size для передачи только файлов с заданным размером.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .