Каждую ночь я копирую несколько виртуальных дисков с помощью 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.
Взгляните на отчеты об ошибках в 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/