问题是什么
把大目录从旧盘迁到新盘,风险点不在复制本身,而在切换时刻的数据一致性与权限丢失。标准流程是预演、复制、校验、切换、观察五步:robocopy /MIR 保持目标与源镜像一致,/COPYALL 带上 ACL 与属主,预演阶段加 /L 只看不写,校验通过后再改配置,源目录保留一个备份周期。
基本信息
| 适用平台 | Windows Server 2012 及以后、Windows 10/11(robocopy 内置) |
|---|---|
| 核心命令 | robocopy 源 目标 /MIR /COPYALL /R:2 /W:2 /MT:16 /LOG:日志 /TEE |
| 预演参数 | /L 只列清单不复制;/TEE 同时输出到控制台 |
| 校验口径 | 文件数、总字节数,关键目录抽样核对大小与权限 |
迁移五步
- 1. 预演:/MIR /L 确认将复制与将删除的清单,重点检查目标侧会被删掉的条目
- 2. 全量复制:/MIR /COPYALL 带权限与属主,/R:2 /W:2 避免被锁定文件拖死
- 3. 校验两侧文件数与总大小,关键目录抽查权限是否正确
- 4. 业务只读或停机后二次 /MIR 增量同步,压缩数据差异窗口
- 5. 切换应用配置与盘符,观察稳定后再清理源目录
常用示例
常用示例
robocopy D:\App E:\App /MIR /L /TEE # 预演,只看不写
robocopy D:\App E:\App /MIR /COPYALL /R:2 /W:2 /MT:16 /LOG:E:\move.log /TEE # 正式复制
(Get-ChildItem D:\App -Recurse -File).Count # 源侧文件数
(Get-ChildItem E:\App -Recurse -File).Count # 目标侧文件数
(Get-ChildItem D:\App -Recurse -File | Measure-Object Length -Sum).Sum # 源侧总字节参数逐项读法
| 参数 | 作用 | 注意 |
|---|---|---|
| /MIR | 镜像目录树,含删除目标侧多余文件 | 目标盘不能混放无关数据 |
| /COPYALL | 复制数据、属性、时间戳、ACL、属主、审计 | 跨域复制时部分安全信息可能保留失败 |
| /R:2 /W:2 | 重试次数与重试间隔 | 避免个别占用文件拖死整轮 |
| /MT:16 | 多线程复制 | 大文件多时提速明显,海量小文件收效有限 |
| /LOG /TEE | 日志落盘并同步显示 | 留证据便于事后复盘 |
| /L | 仅列出不执行 | 预演阶段的必备开关 |
边写边迁必然不一致:切换窗口内让业务只读或停机,二次增量后再切换。清理源目录前保留一个完整备份周期。
robocopy 退出码非 0 不等于失败:0-7 都属正常(有复制、有多余文件或两者兼有),8 及以上才是错误,脚本判断要按“大于等于 8”写。