Robocopy удаляет пропущенные файлы в месте назначения при зеркалировании

Aug 19 2020

При попытке зеркального копирования двух папок с помощью Robocopy параметр / MIR приводит к удалению файлов в месте назначения, когда исходные файлы используются. В частности, это происходит при резервном копировании моей папки Outlook и при использовании файлов * .pst.

Результат выглядит следующим образом:

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

  Started : Tuesday, 18 August 2020 18:58:28
   Source : P:\Outlook\
     Dest : D:\_SyncFolderTest\To\Outlook\

    Files : *.*
        
  Options : *.* /BYTES /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /J /R:0 /W:30 

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

                      23    P:\Outlook\
        Newer           183116800   AVArchive_2018.pst
        Newer           128009216   AVArchive_2019.pst
        Newer           42427392    AVArchive_2020.pst
        Newer           403801088   AVOutlook.pst
        New File          131072    ~AVArchive_2018.pst.tmp
        New File          131072    ~AVArchive_2019.pst.tmp
        New File          131072    ~AVArchive_2020.pst.tmp
        New File          131072    ~AVOutlook.pst.tmp

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

                Total    Copied    Skipped  Mismatch    FAILED    Extras
    Dirs :          1         0          1         0         0         0
   Files :         23         4         15         0         4         0
   Bytes : 3545771008    524288 2787892224         0 757354496         0
   Times :    0:00:00   0:00:00                        0:00:00   0:00:00


   Speed :             37449142 Bytes/sec.
   Speed :             2142.857 MegaBytes/min.
   Ended : Tuesday, 18 August 2020 18:58:28

Это правильно, что AVOutlook.pst новее, но не может его скопировать, не вызывает ошибки и удаляет старую версию в dest. Так что не только не было резервной копии, но и предыдущая резервная копия исчезла. Код выхода - единственный признак того, что что-то пошло не так: 8 = Некоторые файлы или каталоги не могут быть скопированы.

Я как бы понимаю, что старый файл dest должен быть удален и заменен, чтобы получить зеркальное отображение, но почему нет ошибки, и почему не распознать, что файлы в источнике и dest связаны? Это недостаток в Robocopy или дизайнерское решение? Есть ли более безопасный способ?

Ответы

2 DavidPostill Aug 19 2020 at 00:38

Это недостаток в Robocopy или дизайнерское решение?

Это правильно, что AVOutlook.pst новее, но не может его скопировать, не вызывает ошибки и удаляет старую версию в dest.

Это проектное решение, которое задокументировано:

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

Источник: Robocopy «Надежное копирование файлов» - Windows CMD - SS64.com

Есть ли более безопасный способ?

Да, используйте VSHADOW или DISKSHADOW:

Служба теневого копирования томов Windows - единственная подсистема Windows, которая может копировать открытые файлы. Robocopy не использует службу теневого копирования тома, но может создавать резервную копию тени тома, которая уже была создана с помощью VSHADOW или DISKSHADOW .

Источник: Robocopy «Надежное копирование файлов» - Windows CMD - SS64.com

не вызывает ошибку

Это так, и это также задокументировано (Robocopy использует КОДЫ ВЫХОДА):

= Новый вариант в Windows 8 и Windows 10

КОДЫ ВЫХОДА Robocopy

Источник: Robocopy «Надежное копирование файлов» - Windows CMD - SS64.com

Вы можете проверить эти коды выхода и предпринять соответствующие действия в своих пакетных файлах.