尝试使用 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 确实较新,但无法复制,不会引发错误,并会删除目标中的旧版本。因此,它不仅没有备份,而且以前的备份现在也消失了。退出代码是出现问题的唯一线索:8 = 无法复制某些文件或目录。
我有点明白,为了实现镜像,必须删除并替换目标旧文件,但为什么没有错误,为什么不识别源和目标中的文件是相关的?这是 Robocopy 的缺陷还是设计决策?有没有更安全的方法?
答案1
这是 Robocopy 的缺点还是设计决定?
AVOutlook.pst 确实较新,但无法复制它,不会引发错误,并且会删除目标中的旧版本。
这是一个设计决定并已记录:
Robocopy 将无法复制被其他用户或应用程序锁定的文件,因此使用 /R:0 限制重试次数将通过跳过任何正在使用的文件来加快复制速度。
来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com
有没有更安全的方法?
是的,使用 VSHADOW 或 DISKSHADOW:
Windows 卷影复制服务是唯一可以复制打开文件的 Windows 子系统。Robocopy 不使用卷影复制服务,但它可以备份已使用 VSHADOW 或磁盘影子。
来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com
不会引发错误
确实如此,并且也有记录(Robocopy 使用退出代码):
= Windows 8 和 Windows 10 中的新选项
Robocopy退出代码
来源:Robocopy“强大的文件复制”-Windows CMD-SS64.com
您可以检查这些退出代码并在批处理文件中采取适当的操作。