У меня проблема со сценарием robocopy, который должен зеркально отображать каталог, в том числе NTFS ACL, с одного сервера на другой.

Кажется, что даже если файлы не изменились, весь контент копируется каждый раз.

Это команда, которую я использую

robocopy \\abc.com \original \\otherserver \mirrordir /XD _MirrorLogs /MIR /COPY:DATS /R:2 /W:2 /LOG+:\abc.com\logfile.LOG /TEE

Это результат (выдержки) я получаю

-------------------------------------------------------------------------------
ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

Started : Wed Jun 12 23:00:19 2013

Source : \\abc.com\original\
Dest : \\otherserver\mirrordir\

Files : *.*

Exc Dirs : _MirrorLogs

Options : *.* /TEE /S /E /DCOPY:DA /COPY:DATS /PURGE /MIR /R:2 /W:2 

------------------------------------------------------------------------------

...

                   2    \\abc.com\original\Best_Practices\
            7223    file1.html
          194048    file2.doc
                   3    \\abc.com\original\_history\
          155194    file3.xlsm
    New File              159091    file4.xlsm
  0%  
 20%  
 41%  
 61%  
 82%  
100%  
    New File          155222    file5.xlsm
  0%  
 21%  
 42%  
 63%  
 84%  
100%  

...

------------------------------------------------------------------------------

           Total    Copied   Skipped  Mismatch    FAILED    Extras
 Dirs :       422         0       422         0         0         0
Files :      3123      3123         0         0         0         0
Bytes :  649.27 m  649.27 m         0         0         0         0
Times :   0:56:17   0:52:18                       0:00:00   0:03:58


Speed :              216918 Bytes/sec.
Speed :              12.412 MegaBytes/min.

Ended : Wed Jun 12 23:56:38 2013

Я могу понять, что когда есть тег "Новый файл", это нужно скопировать. Хорошо. То, что я также понимаю, - то, что никакие Dirs не копируются согласно резюме. Это то, что я ожидал. Чего я не понимаю, так это того, что все файлы были скопированы снова, хотя изменений не было. Большинство файлов выглядят как file1.html, file2.doc и file3.xlsm, то есть нет информации, почему файл копируется (например, "Новый файл" или "Более новый"). Я проверил с Beyond Compare, идентичны ли файлы, и с точки зрения содержания они. Я думал о разных правах доступа, но тогда почему проблема не возникает в случае каталогов (где права доступа также были скопированы).

У кого-нибудь есть подсказка для меня?

Заранее спасибо!

3 ответа3

2

Короткий ответ заключается в том, что когда robocopy копирует эти папки с одного сервера на другой, я подозреваю, что он видит временные метки не так, как вы ожидаете, поэтому он решает, что существующие файлы в месте назначения старше, чем те же файлы в источнике , Это может быть связано с различиями в настройках времени / часового пояса / летнего времени на обеих машинах.

Когда robocopy анализирует файлы перед копированием, он классифицирует каждый файл в один из следующих классов:

Lonely files:  exist on source but not destination.
Newer files:   have Newer timestamp on source, (size and attributes: N/A).
Older files:   have Older timestamp on source, (size and attributes: N/A).
Changed files: have same timestamp, but different size (attributes: N/A).
Same files:    have same timestamp, size, and attributes.
Tweaked files: have same timestamp and size, but different attributes.
Extra files:   exist on destination but not source.
Mismatched:    is a file on one, and a directory on the other, in source
               and destination.

По умолчанию (и с указанными вами параметрами командной строки)robocopy будет копировать файлы Lonely , Newer и Changed . Файлы в других классах не будут скопированы и будут либо просто сообщаться в выходных данных и / или журнале, либо полностью игнорироваться.

Если robocopy копирует файл и перезаписывает существующий файл в месте назначения, то robocopy считает, что либо временная метка исходного файла раньше (Newer) временной метки целевого файла, либо размеры файла отличаются (Changed).

Чтобы точно сказать, что происходит с каждым файлом, вы можете запустить robocopy с параметрами командной строки "/L" и "/V" . Использование параметров "/L" указывает robocopy не делать никакого фактического копирования, а только перечисляет то, что в противном случае будет скопировано. Использование параметров "/V" указывает robocopy чтобы предоставить подробные сведения.

Это покажет, почему robocopy решил скопировать (и пропустить) каждый файл. Так, например, используя robocopy для копирования примера набора файлов.

Вот список файлов:

 Directory of C:\folder1

02/28/2014  12:48 PM               327 File1.txt
02/28/2014  02:03 PM               333 File2.txt
               2 File(s)            660 bytes

 Directory of C:\folder2

02/28/2014  12:43 PM               327 File1.txt
02/28/2014  02:03 PM               327 File2.txt
               2 File(s)            654 bytes

В этом примере файлы с именем File1.txt имеют одинаковый размер в исходной и целевой папках, но имеют Newer новую временную метку в Folder1 . И файлы с именем File2.txt имеют одинаковую метку времени в исходной и целевой папках, но имеют разные (Changed) размеры файлов.

Запуск robocopy для копирования Folder1 в Folder2 с параметрами командной строки "/L" и "/V" выглядит следующим образом.

C:\>robocopy "C:folder1" "c:folder2" /E /L /V

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Fri Feb 28 21:07:29 2014

   Source : C:\folder1\
     Dest : C:\folder2\

    Files : *.*

  Options : *.* /V /L /S /E /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

                           2    C:\folder1\
            Newer                    327        File1.txt
            Changed                  333        File2.txt

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         1         0         0         0
   Files :         2         2         0         0         0         0
   Bytes :       660       660         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00

   Ended : Fri Feb 28 21:07:29 2014

Если вы запускаете robocopy с параметрами командной строки "/L" и "/V" для вашего набора файлов, он должен предоставить вам информацию о том, почему robocopy неожиданно копирует эти файлы.

Я подозреваю, что robocopy видит временные метки не так, как вы ожидаете, и решает, что файлы в источнике Newer чем те же самые существующие файлы в месте назначения. Это может быть связано с различиями в настройках времени / часового пояса / летнего времени на обеих машинах.

0

tl; dr Попробуйте использовать переключатель /FFT для обработки небольших разниц по временным меткам.


У меня возникла та же проблема, что и у вас: файлы копировались с помощью робокопии, хотя они не были изменены между источником и местом назначения.

Другой опубликованный ответ полезен, но даже запуск robocopy с /L и /v просто говорит вам, что вы уже знаете (этот robocopy считает, что исходный файл отличается от места назначения).

Robocopy использует атрибуты временной метки и размер файла, чтобы определить, следует ли скопировать файл или нет. В моем случае размеры файлов были одинаковыми, но метки времени отличались на 1 секунду. Видимо, это не редкость при копировании в удаленные файловые системы, особенно когда они не NTFS.

Оказывается, у robocopy есть переключатель для решения проблемы: /FFT

/FFT использует толстую синхронизацию файлов вместо NTFS. Это означает, что детализация немного менее точна. Для операций с сетевым общим доступом это кажется намного более надежным - просто не полагайтесь на временные характеристики файлов, чтобы быть абсолютно точными с точностью до секунды. - Робокопия и несколько примеров

0

В Google ничего не найдено в отношении настройки параметров Robocopy, которые помогли мне выполнить задание Robocopy, повторяющее копирование файлов с сетевого подключенного диска NTFS (папка SharePoint) на USB-накопитель.

Ни один не сделал переформатирование USB в NTFS. Что в конечном счете , сделать это было загрузив набор ресурсов Windows Server 2003 с Microsoft , а затем извлечения robocopy.exe от этого (открыв rktools.exe в почтовых программах) и перезапись только две линии , которые делают ROBOCOPY работы от сети диски с этой старой версией.

Параметры нужно было немного подправить, так как некоторые из них не работали в старой версии. Мне кажется, что в новой Robocopy в Windows 10 есть ошибка.

Не работал:

Robocopy.exe I: D:\Network_Backups\ /MIR /TEE /FFT /DST /TIMFIX /W:5 /R:5 /NP / LOG+:D:\Robocopy\LOG.txt

Работал:

D:\Robocopy\Robocopy2003.exe I: D:\Network_Backups\ /MIR /XO /TEE /FFT /W:1 /R:2 /NP /LOG+:D:\Robocopy\LOG.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .