我设置了一个每天运行的 robocopy 脚本,将数据从 Windows Server 2016 存储服务器上的特定文件夹同步到 QNAP NAS 上的 SMB 共享。Windows Server 经过域身份验证,而 QNAP 使用独立用户登录。在脚本中,服务器使用net use
正确的凭据映射 QNAP 共享,而不是尝试假设或在计划任务用户下运行。
net use \\QNAP\share /USER:<user> "<password>"
我已经确认服务器在像这样映射时可以读取/写入共享。
在设置通过任务调度程序自动运行之前,手动运行第一次同步以确认脚本/参数良好,日志中的几个目录(各种不同位置)报告了以下错误。下面是一个示例错误,路径已修改。
2018/01/12 06:38:16 ERROR 50 (0x00000032) Accessing Destination
Directory \\QNAP\share\example folder\something The request is not supported.
每次运行 robocopy 时,相同的文件夹都会发生这种情况。如果我使用 Windows 资源管理器手动将引发错误 50 的任何文件夹复制到目标,它们会正常复制,但即使这样做了,错误 50 仍会记录在相同的位置。错误似乎发生在文件夹级别,而不是特定文件。
我正在使用以下 robocopy 参数。
robocopy D:\local\folder \\QNAP\share\example folder /e /zb /fft /DCOPY:DA /COPY:DAT /r:0 /w:0 /XJ /XD RECYCLER .TemporaryItems /XF Thumbs.db ~* ._* *.inf .DS_Store /log+:D:\backuplog.txt /NFL /NDL
我正在努力从 robocopy 的角度查找有关错误 50 的任何信息。看起来错误 50 与 SMB 有关。这似乎与这些特定文件夹的属性或属性无法写入 QNAP 目录有关。我尝试从交换机中删除“A”(属性)/COPY
,但这没有帮助。
答案1
我设法找到了问题所在。它似乎与 QNAP 共享无法处理这些文件夹的某些安全文件夹属性有关。默认情况下,COPY
和DCOPY
值为:
/COPY:DAT /DCOPY:DA
我认为该/E
标志默认设置了这些。
属性确实看起来是一个问题,但除此之外,DCOPY
参数也需要调整。
/COPY:DT /DCOPY:T
这样就修复了 robocopy 错误 50,以前出现错误的文件夹现在可以与其中的文件一起正确写入目标。
奇怪的是,这种情况只出现在相对较新的文件夹中,但它似乎与属性/特性有关。我们有混合的 Windows/macOS 客户端写入源,因此很可能是这些目录背后的特定 macOS 元数据导致 robocopy 失败。
答案2
如果您需要从任务计划程序任务访问网络资源,则需要确保用户帐户具有访问该资源的正确权限。
为了使任务始终有效,请选择Run whether user is logged on or not
并输入能够访问网络共享的用户帐户 + 密码。不要勾选Do not store password...
。
Windows 中计划任务的误导之处在于,当您手动运行它们时,它们始终会在您当前的用户上下文中执行,无论您如何配置它们。为了进行测试,您需要在接下来的几分钟内临时设置一个触发器并让任务自动运行。