На данный момент я запускаю rsync для 2,2 миллиона файлов общим объемом 250 ГБ, а это занимает около 700 тысяч файлов за 6 часов.
Кто-нибудь знает инструмент, подобный rsync, который может делать это с несколькими потоками, чтобы он работал быстрее?
Я сомневаюсь, что здесь ограничивающим фактором является процессор. Скорее всего, вы ограничены как пропускной способностью сети для передачи, так и дисковым вводом-выводом; особенно задержка для всех этих вызовов статистики.
Можете ли вы разбить иерархию файловой системы на более мелкие части для параллельной обработки?
Что такое исходные файлы и что их записывает или изменяет? Можно ли отправлять изменения по мере их появления на уровне приложения?
Если дисковая подсистема принимающего сервера представляет собой массив с несколькими дисками, запуск нескольких процессов rsync может повысить производительность. Я запускаю 3 процесса rsync для копирования файлов на сервер NFS (RAID6 с 6 дисками на группу рейдов) для насыщения Gigabit Ethernet.
Этот парень сообщает о базовой оснастке Python, которая запускает несколько процессов rsync. http://www.reliam.com/company/featured_geek
Я читал много вопросов, похожих на этот. Я думаю, что единственный реальный ответ - вручную разбить копию / переместить. Здесь будет проблема с IOps. Если вам от этого станет легче, я сейчас перемещаю около 200 миллионов файлов, которые занимают более 100 ТБ дискового пространства.
Вы можете попробовать многопоточный клон cp для Linux (с открытым исходным кодом): http://static.usenix.org/event/lisa10/tech/slides/kolano.pdf