Robocopy 将未更改的文件复制到其他服务器

Robocopy 将未更改的文件复制到其他服务器

我对 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

我可以理解,当有“新文件”标签时,需要复制该文件。好的。我还理解,根据摘要,没有复制任何目录。这是我所期望的。我不明白的是,似乎所有文件都被再次复制了,即使没有任何变化。大多数文件看起来像file1.html,file2.doc和file3.xlsm,即没有信息说明为什么复制该文件(如新文件或较新的文件)。我使用Beyond Compare检查了文件是否相同,从内容的角度来看,它们是相同的。我考虑过不同的访问权限,但是为什么在目录的情况下不会出现问题(访问权限也被复制了)。

有人可以给我提示吗?

提前致谢!

答案1

简而言之,当robocopy将这些文件夹从一台服务器复制到另一台服务器时,我怀疑它看到的时间戳与您预期的不同,因此它决定目标上的现有文件比源上的相同文件更旧。这可能是由于两台机器上的时间/时区/DST 设置不同。

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将复制LonelyNewerChanged文件。其他类别中的文件将不是被复制,并且要么简单地在输出和/或日志中报告,要么完全被忽略。

如果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复制Folder1Folder2,使用"/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与目标上的现有文件相同。这可能是由于两台机器上的时间/时区/DST 设置不同。

答案2

总结尝试/FFT切换以处理较小的时间戳差异。


我遇到了与您同样的问题:即使文件在源和目标之间没有发生变化,它们也会被 robocopy 复制。

其他发布的答案很有帮助,但即使运行 robocopy 也/L只是/v告诉您您已经知道的内容(robocopy 认为源文件与目标文件不同)。

Robocopy 使用时间戳属性和文件大小来确定是否应复制文件。在我的例子中,文件大小相同,但时间戳相差 1 秒。显然,在复制到远程文件系统时这种情况并不罕见,尤其是当它们不是 NTFS 时。

事实证明,robocopy 有一个开关可以处理该问题:/FFT

/FFT 使用 fat 文件计时而不是 NTFS。这意味着粒度不太精确。对于跨网络共享操作,这似乎更可靠 - 只是不要依赖文件计时完全精确到秒。--Robocopy 和一些示例

答案3

在 Google 上找不到有关调整 Robocopy 参数的任何信息,无法用于我的 Robocopy 作业,即重复将文件从 NTFS 网络映射驱动器(SharePoint 文件夹)复制到 USB 驱动器。

将 USB 重新格式化为 NTFS 也没有用。最终能做到的是从 Microsoft 下载 Windows Server 2003 资源工具包,然后从中提取robocopy.exe(通过在 zip 程序中打开rktools.exe)并重写从网络驱动器执行 robocopy 作业的两行代码,使用这个旧版本。

需要对参数进行一些调整,因为有些参数在旧版本中不起作用。在我看来,Windows 10 中的新 Robocopy 有一个错误。

不工作:

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

答案4

我曾尝试使用仅在线复制到 DropBox 来实现此功能,并尝试过 /XA:O,但没有成功。我尝试了 2003RK 版本的 Robocopy(我多年来一直使用它,因为它可以解决奇怪的问题),果然成功了。谢谢 Chip!我不能点赞,但真的很想点赞。

相关内容