Мы используем следующий сценарий для резервного копирования папки (довольно большой - около 400 ГБ) на NAS с файловой системой EXT4:
robocopy "Source_Directory" "\\NAS\Destination\Directory" /MIR /FFT /COPYALL /W:5 /r:10 /log:"C:\RoboTest\robotest.log"
Исследования показали, что переключатель / FFT необходим для компенсации разницы во времени; однако проблема все еще сохраняется, и все файлы помечаются как измененные.
Любая помощь по этому поводу была бы очень признательна.
Можете добавить /a-:a
в командную строку robocopy, чтобы удалить бит архива во время процесса.
После множества проб и ошибок я думаю, что нашел причину: атрибут Archive.
Когда Robocopy встречает файл с установленным атрибутом «Архив», он будет систематически отображать файл как «измененный» в своих журналах и подсчитывать размер файла по отношению к общему количеству данных, скопированных в место назначения (столбец «Копировано»). Однако это вводит в заблуждение, потому что, если файл действительно не был изменен (например, временная метка более поздняя), Robocopy на самом деле не копирует файл и вместо этого пропускает его.
Попробуйте с большим файлом. Добавьте в исходное дерево большой файл, передача которого на целевой сервер займет некоторое время. Запустите Robocopy в первый раз: он должен пометить файл как «Новый файл» в журналах, и потребуется некоторое время для завершения передачи. Затем убедитесь, что для этого файла установлен бит архивации, используя attrib +a <filename>
команда. Запустите Robocopy еще раз. Вы должны обнаружить, что он будет указан как «Измененный», но обратите внимание, что этот второй запуск намного быстрее: Robocopy на самом деле не передавал файл снова по сети. Затем, наконец, удалите бит архива с помощью attrib -a <filename>
и запустите Robocopy в последний раз. Он пропустит файл, как и ожидалось.
К сожалению, я нигде не нашел документированного такого поведения, даже на собственных страницах документации Microsoft. (Если кто-то это сделает, дайте нам знать!)
Решение состоит в том, чтобы либо игнорировать файлы, отмеченные в журналах как «Измененные», либо запустить attrib -a /s
в исходных файлах перед запуском Robocopy.
Несколько человек сообщил этот проблема на форумах Microsoft.