Можете ли вы проверить диск на наличие сбойных секторов или сбойных блоков? вы можете использовать команду badblocks или smartctl для проверки в Linux, я думаю, что плохой диск является единственной причиной вашей проблемы.
Мне кажется, вы пытаетесь использовать rsync неправильно. Протокол Rsync разработан для точного случая сравнения/синхронизации больших файловых систем на двух отдельных серверах. Он делает все возможное локально на как на локальном, так и на удаленном компьютере перед сравнением в середине.
Его протокол разработан таким образом, что агент rsync на одном компьютере взаимодействует с агентом rsync на другом, и протокол предназначен для значительного сокращения количества циклов (и общего объема данных ), необходимых для выполнения задачи.
То есть rsync предназначен для работы:
[fast] [slow SSH] [fast]
File system <----> rsync <----------> rsync <----> File system
Rsync оптимизирован для производительности сети между двумя агентами, но он не может управлять протоколом, используемым для доступа к диску. Таким образом, когда вы монтируете удаленную файловую систему NFS, вы меняете профиль доступа к сети :
. [fast] [fast] [slow NFS]
File system <----> rsync <------> rsync <---------> File system
Rsync ничего не может с этим поделать, потому что он абсолютно не контролирует протокол NFS.
Одно конкретное отличие заключается в том, что в NFS каждый файл должен запрашиваться индивидуально .Чтобы исследовать дерево файлов, содержащее /foo/bar/baz
, вы должны запросить /
[подождать], затем запросить /foo
[подождать], затем запросить /foo/bar
[подождать] и, наконец, запросить /foo/bar/baz
. При задержке 110 мс на запрос это задержка 330 мс, и вы получили только один файл.
Протокол Rsync между агентами не имеет этого ограничения. Агент, работающий на удаленной машине, с готовностью составляет список всех синхронизируемых файлов и каталогов в удаленной файловой системе и отправляет все. Всего один запрос на все дерево файлов!