设想:
按照此 Server Fault 指南,将服务器从旧版 Server 2008 R2 迁移到新版 Server 2016:使用 Robocopy 进行文件服务器迁移
Robocopy 完成后,在 Server 2016 上为复制的卷启用重复数据删除,然后使用 PowerShell 手动启动重复数据删除。经过数小时,它完成并恢复了大约 25% 的磁盘空间。
再次运行 Robocopy 以复制初始副本中可能遗漏的任何内容,作为新服务器的最终检查。
....但是 Robocopy(从 Server 2016 运行)不理解重复数据删除,因此继续丢弃重复数据删除块存储..
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Sunday, July 8, 2018 12:10:02 PM
Source : \\SERVER-2008\e$\
Dest : \\SERVER-2016\e$\
Files : *.*
Options : *.* /TEE /S /E /COPYALL /PURGE /MIR /ZB /NP /MT:32 /R:1 /W:10
------------------------------------------------------------------------------
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\
*EXTRA File 253504 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\DedupFileList.1
*EXTRA File 253504 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\DedupFileList.2
*EXTRA File 28 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\stamp.dat
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\
*EXTRA File 196608 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\00000046.00.RB
*EXTRA File 106496 \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\COW\00010000\00000048.00.RB
[…][......]
*EXTRA File 30.3 m \\SERVER-2016\e$\System Volume Information\Dedup\ChunkStore\{B7E1F3A4-AAD9-4449-9DF7-5489421C9EC5}.ddp\Stream\000f0000.00000002.ccc
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\Logs\
*EXTRA File 29.7 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\00000001.kmchange.log
*EXTRA File 999.8 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.10.archive.etl
*EXTRA File 1000.0 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.11.archive.etl
*EXTRA File 735.5 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.12.archive.etl
*EXTRA File 999.8 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.1.9.archive.etl
*EXTRA File 1.3 m \\SERVER-2016\e$\System Volume Information\Dedup\Logs\changes.optimization.2.1.archive.etl
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\
*EXTRA File 76 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\Dedup.00.cfg
*EXTRA File 76 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\Dedup.01.cfg
*EXTRA File 2228 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\dedupConfig.01.xml
*EXTRA File 2228 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\dedupConfig.02.xml
*EXTRA File 0 \\SERVER-2016\e$\System Volume Information\Dedup\Settings\VolumeJobLock.bin
*EXTRA Dir -1 \\SERVER-2016\e$\System Volume Information\Dedup\State\
*EXTRA File 2982 \\SERVER-2016\e$\System Volume Information\Dedup\State\chunkStoreStatistics.xml
*EXTRA File 2592 \\SERVER-2016\e$\System Volume Information\Dedup\State\dedupStatistics.xml
*EXTRA File 11.5 m \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceBitmap.tmp
*EXTRA File 1.0 g \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceContainer.ccc
*EXTRA File 46.0 m \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceDeleteLogs.tmp
*EXTRA File 1.0 m \\SERVER-2016\e$\System Volume Information\Dedup\State\GCReservedSpaceFileList.tmp
*EXTRA File 4096 \\SERVER-2016\e$\System Volume Information\Dedup\State\GroupCommitFlushControl0.bin
*EXTRA File 2066 \\SERVER-2016\e$\System Volume Information\Dedup\State\optimizationState.xml
[...]
在日志中看到这个并意识到发生了什么之后,我立即中止了它。但损害已经造成,当 Robocopy 猛烈地浏览 \System Volume Information 时,删除重复数据的新服务器上的数据立即被破坏。新服务器驱动器分区已格式化并从 Server 2008 重新复制。
有没有一种安全的方法来使用 Robocopy 以使其不触及重复数据删除卷数据?
另外,我有一个新的担忧...如果 Robocopy 可以破坏重复数据删除卷,那么使用重复数据删除卷还有什么不安全的地方,可以直接看穿它并破坏只能由服务器访问的底层数据?(可能应该是一个单独的问题..)
答案1
应使用 /XD 开关排除目录System Volume Information
。排除其他隐藏/系统目录(例如)可能是一个好主意$RECYCLE.BIN
。
答案2
使用两个命令行开关导致此问题:/MIR
和/ZB
。如文档 ( robocopy /???
) 所述:
/MIR :: MIRror 目录树(相当于 /E 加 /PURGE)。/ZB
:: 使用可重启模式;如果访问被拒绝,则使用备份模式。
它的组合对你造成了影响: /MIR
将删除(如您在没有参数运行时所指出的那样robocopy
)并且“备份模式”会破坏大多数权限,以便能够读取“通常”无法读取的文件,从而进行完整的备份。
“帮助”描述中对“备份模式”的定义非常模糊。您必须知道,Windows CreateFile
API 支持一个名为的标志FILE_FLAG_BACKUP_SEMANTICS
,该标志与某种访问权限SE_BACKUP_NAME
(授予管理员组)结合使用默认情况下- 还有备份操作员组,呵呵)绕过了正常的文件安全性。
你不知道吗?那么你可能也不知道 robocopy 最初根本不是 Windows 的一部分 - 它是名为“Windows 资源工具包”的补充的一部分,当时主要由程序员和硬核系统管理员使用,尽管它在 Windows Server 2008 中被纳入 Windows 发行版,但它从未受到任何关注 - 除了额外的性能选项,哇!特别是,没有得到程序经理对 UI 或可用性的关注。因此,这是可以使用或滥用的原始权力!风险由您自行承担。
(一个好的经验法则:不要使用你不太理解的命令行选项。)
您可能想了解有关“备份模式”文件访问的信息:
https://isc.sans.edu/forums/diary/Use+The+Privilege/20483/
https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea
https://docs.microsoft.com/en-us/windows/desktop/FileIO/file-security-and-access-rights
答案3
以下是使用提供的其他答案并使用重复数据删除目标进行测试的后续结果。(元:我不知道是否应该将其作为编辑包含在我原始问题的底部。)
Robocopy 命令行最终演变成这样:
robocopy \\OLD-SERVER\e$\ \\NEW-SERVER\e$\ /MIR /COPYALL /DCOPY:DAT /NP /Z /B /J /SL /MT:128 /R:1 /W:10 /LOG+:robocopy-log.txt /TEE /XD "Recycler" "Recycled" "$Recycle.bin" "System Volume Information" /XF "pagefile.sys" "swapfile.sys" "hiberfil.sys"
选项和目的:
- /MIR - 将源镜像到目标,如果目标上的文件和目录不再存在于源上,则删除它们
- /COPYALL - 复制所有文件信息:数据、属性和时间戳、NTFS 安全 ACL、所有者信息、审计信息(默认情况下不全部包含)
- /DCOPY:DAT-复制所有目录信息-数据、属性、时间戳(默认情况下不复制原始创建时间戳;通常会更改为 Robocopy 复制的日期)
- /NP——不显示进度
- /Z——使用可重启模式
- /B - 以备份模式复制文件(我不知道对于用户目录是否需要此功能,因为用户是该目录的唯一所有者,但不包括管理员。此选项将销毁已删除重复数据的目标卷,而不排除“系统卷信息”)
- /J - 使用无缓冲 I/O 进行复制(更快地复制大型多 GB 文件)
- /SL——复制符号链接而不是目标
- /MT:128 - 使用最大 CPU 线程(更好地利用 10 千兆以太网和许多 CPU 核心)
- /R:1 – 如果文件访问错误,则重试 1 次
- /W:10 – 如果文件访问错误,则等待 10 秒后重试
- /LOG+ - 将输出记录到文本文件,如果日志文件已存在则附加
- /TEE – 将结果打印到屏幕和日志文件
- /XD - 排除目录及其中的所有内容。名称中包含空格时需要用引号括起来:“Recycler”“Recycled”“$Recycle.bin”“System Volume Information”
- /XF - 排除文件:虚拟内存和休眠文件(如果它们恰好存在于源中):“pagefile.sys”、“swapfile.sys”、“hiberfil.sys”
最后重演:
Total Copied Skipped Mismatch FAILED Extras
Dirs : 158189 153466 158186 0 0 0
Files : 1116292 0 1116296 0 0 0
Bytes : 1.350 t 0 1.350 t 0 0 0
Times : 0:01:04 0:00:00 0:00:00 0:01:04
,
另外,我不知道向微软报告错误的正确渠道,但我已在微软重复数据删除文档底部链接到此讨论,Windows IT 专业中心网站:
https://docs.microsoft.com/en-us/windows-server/storage/data-deduplication/overview
答案4
也许这只是我的想法,但我的第一个想法是 - 永远不要尝试复制驱动器本身“e$”。我只会 Robocopy 为用户内容创建的特定文件夹,而不是 Windows 本身创建的任何系统文件夹。