我正在尝试通过网络复制一个大型数据库备份文件。
传统程序复制或xcopy
使用不同的二进制文件失败。还尝试了robocopy
不带参数,结果失败了。刚刚又尝试了一次robocopy
使用/zb
参数(重启和备份模式)。虽然花费的时间更长,但最终成功了。
我的问题是,备份模式真的是为了复制大文件/备份文件而设计的吗?我在网上搜索过,但找不到明确的答案。如果有有经验的用户能给我提示或更好的解决方案,我将不胜感激。
答案1
备份模式是一种忽略任何权限问题的读写文件的方法。
它使用SeBackupPrivilege
(读取)和SeRestorePrivilege
(写入)来读取/写入任何和所有文件,忽略任何阻止您读取或写入文件的 ACE。
通常,当尝试复制或访问文件时,Windows 会执行检查以确保您具有读取或写入位置的权限,但SeBackupPrivilege
(默认情况下授予备份操作员和管理员组),以及SeRestorePrivilege
(默认情况下也授予备份操作员和管理员组),这些检查被绕过。
在域控制器上,服务器操作员组也拥有上述用户权限。
此用户权限决定哪些用户可以绕过文件和目录、注册表和其他持久对象权限来备份系统。仅当应用程序尝试通过备份工具(如 NTBACKUP.EXE)通过 NTFS 备份应用程序编程接口 (API) 进行访问时,此用户权限才有效。否则,将应用标准文件和目录权限。
此用户权限类似于向您选择的用户或组授予系统上所有文件和文件夹的以下权限:
- 遍历文件夹/执行文件
- 列出文件夹/读取数据
- 读取属性
- 读取扩展属性
- 读取权限
从文档中SeRestorePrivilege
:
此安全设置确定哪些用户可以在还原备份文件和目录时绕过文件、目录、注册表和其他持久对象权限,并确定哪些用户可以将有效的安全主体设置为对象的所有者。
向帐户授予此用户权限类似于向帐户授予对系统上所有文件和文件夹的以下权限:
- 遍历文件夹/执行文件
- 写
要检查你的帐户是否具有这些权限,你可以运行以下命令whoami /priv
在命令提示符下。
答案2
只是想分享解决上述问题的最新进展。
就我而言,xcopy
无法在不同域和服务器位置的服务器之间复制超过 10GB 的文件。
另一方面robocopy
,
/zb
-使用重启模式。如果访问被拒绝,此选项将使用备份模式。
可以成功复制。不过时间从 1 小时增加到了 2.5 小时。
--
重新安排服务器后,文件已在同一个域和服务器位置的服务器之间复制。使用xcopy
也正常。
--
因此,我对此的理论可能是关于服务器之间的稳定性连接。如果连接不牢固(偶尔会断开连接导致访问问题),则在复制像我的情况这样的大文件时,在漫长的过程中随时都可能发生损坏robocopy
;重启并备份可以很好地恢复副本。恢复所花费的时间可能是缺点。
附注:如果这是一项例行任务,则应使用 FTP 而不是复制
答案3
我强烈建议您创建快照并备份现在处于静止状态的文件系统。然后,您可以使用 /J(大型文件的无缓冲 I/O)快速运行 robocopy。这是一个用于创建 C: 卷影副本的脚本,它将其称为 P:。此驱动器 (P:) 是 C: 驱动器的静态映像,非常适合备份。我们使用此技术将活动的虚拟机磁盘映像复制到备份驱动器。
下面使用了四个脚本文件:
- 批处理文件来踢出磁盘影子命令
- 磁盘影子命令销毁任何
悬垂的空洞如果内部批处理文件崩溃,则以前的阴影 - 一系列磁盘影子命令来将影子创建为 P:
- 影子处于活动状态时执行的一系列命令(P:处于活动状态时执行的内部批处理文件)
1)启动该进程的批处理文件
diskshadow -s cleanup.cmds
diskshadow -s diskshadow.cmds
2) 影子命令文件“cleanup.cmds”用于销毁先前活动的影子
UNEXPOSE P:
3)建立影子的影子命令文件“diskshadow.cmds”,然后调用第四个文件
SET CONTEXT PERSISTENT NOWRITERS
SET METADATA example.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C: ALIAS systemVolumeShadow
CREATE
EXPORT %systemVolumeShadow% P:
EXEC c:\yourlocation\backup.cmd
UNEXPOSE P:
END BACKUP
RESET
4)使用命令文件“backup.cmd”对影子进行操作
REM do the ROBOCOPY commands here, with the source being P:, the shadow of C:
请注意,Windows Server 2016(可能还有其他版本)每周运行两次卷影副本,这将导致下面创建的卷影副本崩溃。确保此备份技术与这些自动计划的卷影命令不重叠。
答案4
为了扩展@erict的答案,下面介绍了如何使用PowerShell创建和销毁快照:
$Drive = "D:\"
$Folder = $Drive + "ShadowCopy"
# Create the snapshot
$Snapshot = (gwmi -List Win32_ShadowCopy).Create($Drive, "ClientAccessible")
$Shadow = gwmi Win32_ShadowCopy | ? { $_.ID -eq $Snapshot.ShadowID }
$Volume = $Shadow.DeviceObject + "\"
cmd /c mklink /d "$Folder" "$Volume"
# Destroy the snapshot
cmd /c rd "$Folder"
$Shadow.Delete()
这也可以在远程机器上运行,方法是使用PowerShell 远程处理:
Enter-PSSession RemoteComputer
#
# Run snapshot commands here
#
Exit-PSSession