Как rsync большой файл, с минимальными затратами ресурсов процессора и полосы пропускания?

13

У меня есть файл объемом 500 ГБ, резервное копирование которого планируется удаленно. Файл часто меняется. Я перейду с рабочего стола на сервер. Оба могут запустить клиент или сервер rsync.

Какова правильная команда для этого? Те, которые я пробовал, софар принимал вечно или просто вел себя странно.

Пример и результаты:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

Кажется, работает, но только если я сделаю это дважды (?!). Кроме того, медленно.

Указанная выше команда выполняет контрольную сумму на обоих компьютерах или только на отправляющем? Правильно ли иначе?

Йохан Олгот
источник
Файл такой большой, который часто меняется? Вы получите очень, очень разочаровывающие результаты с rsync ...
Игнасио Васкес-Абрамс
Любые другие предложения? Я должен быть выполним с некоторым приложением, собственный клиент Dropbox делает это очень хорошо. См. Forums.dropbox.com/topic.php?id=17631
Йохан Олгот
--inplace подразумевает --partial see: linux.die.net/man/1/rsync
Рэй Хулха

Ответы:

12

Это никогда не будет быстрым, потому что rsync должен будет прочитать / проверить контрольную сумму всего файла, а чтение 500 ГБ займет много времени, если вы не храните его на SSD или чем-то еще.

Попробуй rsync -vhz --partial --inplace <file/server stuff>.

-cозначает, что он проверяет суммы всего файла ПЕРЕД выполнением каких-либо передач, а не использует отметку времени, чтобы узнать, изменился ли он, что означает чтение всего файла дважды. Если временная метка не изменяется (она должна изменяться), вы можете просто touchфайл до запуска rsync.

Если это не в сценарии, вы можете добавить, --progressчтобы вы могли видеть, как он работает, как он работает.

Dentrasi
источник
Да, я знаю «большой файл == длинная обработка». Но я чувствую, что чего-то здесь не хватает, см. Комментарий выше. Если Dropbox может сделать это, мы тоже можем! =) Я не сказал, но я также пытался без -c, все еще медленно.
Йохан Олгот
2
также --inplaceподразумевает--partial
2

Хотя это не Rsync, в зависимости от того, что вы пытаетесь сделать, это может работать лучше. Я делал похожую задачу резервного копирования, и это было определенно быстрее.

Используйте netcat, чтобы создать tar-трубу с одного компьютера на другой.

На вашем исходном компьютере:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

Вы создаете архив, сохраняющий разрешения и время, а затем отправляете его в netcat через порт 45454.

На вашем резервном компьютере

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = локальный IP-адрес вашего исходного компьютера.

Для меня это сработало хорошо. Он работал на скорости 25-30 МБ / с по проводной локальной сети, в отличие от 2-3 МБ / с с rsync. Недостаток: он не синхронизируется, он просто копирует то, что находится у вас на источнике. Для резервной копии, которую вы описываете - один файл объемом 500 ГБ - он может работать очень хорошо.

Возможно, вам придется сделать это как root, чтобы избежать проблем с разрешениями, или вам повезет.

FWIW, я первоначально узнал об этом здесь: http://www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/

SteveLambert
источник
1
tarлучше, чем rsyncкогда у вас есть много маленьких файлов для передачи. Использование ncтакже улучшает скорость передачи при быстром соединении, потому что у вас нет накладных расходов на SSH-шифрование (которое мне не нужно при одноранговом соединении)
jornane
0

Чтобы избежать перегрузки сети, просто используйте протокол rsync, а не SSH. По умолчанию rsync использует SSH при указании URL-адреса, например имени хоста: / path. Вместо этого используйте rsync: // имя хоста / путь, чтобы использовать более быстрый протокол rsync. Трюки с tar / netcat не нужны. Алгоритм rsync должен быть намного быстрее.

Смотрите также https://gergap.wordpress.com/tag/rsync/ для получения дополнительной информации.

gergap
источник