Назад | Перейти на главную страницу

rsync зависает на одном большом файле

Каждую ночь я копирую несколько виртуальных дисков с помощью rsync с одного компьютера Linux Debian на другой Linux Debian.
Большинство файлов представляют собой необработанные образы с «дырами» в них: некоторые части никогда не записывались, поэтому остаются нераспределенными на диске.

rsync зависает на одном файле, всегда одинаково. Зависание происходит после передачи 50 Гб и каждый раз. Я не уверен, всегда ли это в одной и той же точке, но ls -sh отображает 50 Гб.
Это файл размером 800 ГБ, содержащий 151 ГБ (так что 649 ГБ не выделены). Некоторые другие виртуальные диски имеют аналогичные цифры, и на них хорошо работает rsync.

У меня точно такое же поведение, если я использую rsync для локального обновления файла без участия сети (с --no-whole-file, это требование, см. ниже).

После остановки rsync он использует одно ядро ​​ЦП на 100% и нулевую активность диска на принимающей стороне (это запрос на вытягивание, поэтому rsync запускается с этой стороны), а также нулевой ЦП и нулевой диск на отправляющей стороне.
Я дал ему поработать несколько часов.
Ctrl+c немедленно останавливает rsync.
При запуске для локального копирования, после остановки у меня также есть одно ядро ​​ЦП на 100% и нулевая активность диска.

Единственное исключение, которое я обнаружил, - это когда я синхронизирую этот файл с новым местоположением (т.е. файл назначения не существует). Поэтому я подозреваю, что проблема связана со сравнением старых и новых данных.

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

Известно, что rsync имеет такого рода проблемы с огромными файлами из-за неэффективного алгоритма внутреннего буфера хешей.

Вы должны использовать --block-size вариант с большой стоимостью. Но текущие версии не позволяют использовать более 128 КБ. Некоторые веб-страницы советуют использовать --block-size=10485760 --protocol=29 но в моем случае это отклонено rsync.

  • используйте версию 29 или старше
  • или перекомпилировать после изменения константы MAX_BLOCK_SIZE

Взгляните на отчеты об ошибках в rsync. Может подать новый. Вы можете найти их из https://rsync.samba.org/bugzilla.html

Здесь или в отчете об ошибке вы должны предоставить больше подробностей. Какая версия rsync установлена ​​на каждом конце, какая у вас ОС и какую именно команду вы используете? Сжаты ли файлы и / или передача rsync? С какой версией zlib?

https://bugzilla.samba.org/show_bug.cgi?id=10518 и возможно https://bugzilla.samba.org/show_bug.cgi?id=10372 может быть актуальным. Также см http://www.anchor.com.au/blog/2013/08/out-tridging-tridge/