概要
Windows 存储迁移包括 Robocopy、存储迁移服务 [SMS] 和 Hyper-V 存储迁移等工具。 这些工具对于管理员来说,在环境或硬件之间移动数据、共享驱动器和服务器标识至关重要。 迁移失败可以表现为数据丢失、安全风险、意外停机或复杂的权限问题。 本文提供基于实际案例的诊断过程和可作解决方案,可帮助你有效地解决跨 Windows Server 环境中的存储迁移作中最常见的且具有挑战性的故障排除方案。
故障排除清单
使用此清单进行系统故障排除:
- 准备
- 验证所有计划的目标驱动器的大小是否适当,并格式化为 NTFS 或 ReFS。
- 验证源和目标之间的硬件和 OS 兼容性。
- 提供经过测试和最近的备份或快照。
- 权限
- 验证迁移帐户是否对源和目标具有管理权限。
- 请确保 SMS 帐户已加入到域中,并且如果需要,拥有服务器上的本地管理员账户权限。
- 验证是否已正确设置 NTFS 和共享权限,以便迁移所有文件夹和文件。
- Network
- 测试源与目标之间的连接(ping、Test-WSMan、Test-NetConnection)。
- 请确保所有必需的端口都已打开(尤其是对于 WMI、RPC、SMB)。
- 检查跨子网或地理站点时的 VPN 和防火墙规则。
- 服务和功能
- 验证是否已安装并运行所需的 Windows 功能和角色(例如 iSCSI、SMS、文件服务器、群集)。
- 对于 Hyper-V,请确保服务和群集角色正常运行。
- 源和目标健康状况
- 若要检测错误,请在源卷和目标卷上运行 chkdsk 和 fsutil。
- 验证磁盘未达到或接近容量上限,并确保文件系统健康。
- 在迁移之前删除不必要的卷影副本。
- 备份和安全
- 导出用于共享设置的注册表项。
- 如果可能,请备份权限和文档帐户 SID。
- 文档迁移工具开关和环境变量。
常见问题和解决方案
以下部分详细介绍了最常见的故障模式,并提供分步解决方案。
权限或访问被拒绝错误
症状
- 日志或 UI 中的“访问被拒绝”或“权限不足”。
- 事件 ID:5000、1069、45062。
- 迁移的文件不可访问或缺少继承的权限。
决议
-
NTFS ACL:若要保留权限,请将 Robocopy 与 /COPYALL 或 /SEC 一起使用:
robocopy <Source> <Destination> /MIR /COPYALL /SEC /R:3 /W:5 /LOG:robocopy.log作为对两个服务器上具有完整(最好是 SYSTEM)权限的帐户运行。
-
共享权限:
- 在源上,导出共享注册表:
reg export "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares" shares.reg- 在目标系统上,导入并重启或重启 LanmanServer 服务。
- 迁移后,使用 GUI 或 PowerShell 验证权限。
-
帐户/SID 问题:
- 对内置管理员帐户名称进行核对,并确保其 SID 能够匹配。
- 使用 PowerShell 列出帐户和 SID:
Get-LocalUser | Where-Object { $_.Enabled -eq $true } | fl Name,SID- 如有必要,请使用 icacls 或 PowerShell 在迁移后分配权限。
迁移作业失败或停滞(SMS/Robocopy/Hyper-V)
症状
- “无法传输某些设备。
- 作业停止以特定百分比响应或记录“资源不足”。
- 短信清单扫描反复失败(“部分成功”,错误代码0x800705AA)。
决议
-
检查帐户和服务权限:
- 验证 SMS 服务是否以具有完全控制权限的帐户身份运行。
- 对于停滞的 Robocopy 作业,请使用 SYSTEM 权限运行或提升命令提示符权限。
-
文件系统和路径检查:
- 启用长路径支持:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f ``` Restart required. 1. Use Get-ChildItem -Path <Path> -Recurse | Where-Object { $_.Name -match "[<>:/\\|?\*]" } in PowerShell to detect invalid file/folder names. -
工具/功能限制:
- SMS 不支持将已加入域的服务器迁移到工作组服务器或在不受信任的域之间进行迁移。
- 如果不支持迁移,请考虑使用 Robocopy 或进行手动干预。
-
进程/锁定问题:
- 停止可能锁定文件的服务或进程(如 SyncShareState/防病毒)。
- 在群集磁盘上,清除预留:
Clear-ClusterDiskReservation -Disk \<DiskNumber> -
资源短缺:
- 释放系统资源:检查 CPU/内存使用情况,关闭打开的文件,如果事件 153,则增加存储阵列队列深度。
- 对于 Hyper-V:在移动之前卸载共享 VHD,在移动共享磁盘时请停止 VM。
文件/文件夹差异(大小、可见性或不完整副本)
症状
- 源和目标之间的“磁盘大小”不同。
- 迁移后不会显示某些文件。
- Robocopy 在未更改时将日志文件记录为“已更新”。
- 事件 ID:无或常规用户混淆。
决议
-
扇区大小/分配单位差异:
- 了解 NTFS 在 512 和 4K 扇区磁盘上以不同的方式分配空间;文件“磁盘大小”各不相同,但数据保持不变。
- 使用 fsutil 或磁盘属性验证。
-
隐藏或受保护的文件夹:系统卷信息,$RECYCLE。BIN 和类似的文件夹会自动重新创建。 忽略这些文件夹中的错误。 由于属性,文件可能隐藏。 在文件资源管理器中查看它们(选择 “显示隐藏文件”)或:
Get-ChildItem -Path \<Path> -Force -
更改变动混淆:
- Robocopy /MIR 执行镜像。 将 /M 用于存档属性。 仅对于增量,请使用 /XO、/XC、/XN 和参考日志。
- 查看有关差异同步逻辑的迁移工具文档。
群集磁盘或 Hyper-V 迁移失败
症状
- 磁盘资源无法联机(错误 995)。
- Hyper-V:“磁盘无法移动,因为它被标记为可共享。
- “OnlineThread:错误 995 使资源上线”
决议
- 卷影副本或备份干扰:**
- 删除由第三方备份工具创建的所有卷影副本。
- 使用 vssadmin(vssadmin list shadows)或供应商自己的工具进行清理。
- 群集/CSV 配置:
- 根据需要删除磁盘并将其还原到群集。
- 在移动之前,请始终停止 VM 并卸载磁盘。
- 迁移后,重新配置角色、依赖项和权限。
- 可共享属性:
- 从所有 VM 分离共享 VHD。
- 将磁盘移动/复制到新存储。
- 移动完成后再连接上。
路径、长路径和无效字符错误
症状
- 错误,例如“找不到路径”、“路径包含无效字符”、“路径太长”。
- 特定文件或文件夹的实际迁移失败。
决议
- 修复路径和字符:启用长路径支持,并删除或重命名文件名中具有无效字符的文件。
- 脚本解决方案:
- 运行测试脚本,在迁移尝试之前枚举所有文件和文件夹。
- 使用专用工具进行批量重命名或删除。
意外的文件时间戳或访问时间更改
症状
- 在 Windows 11 上迁移后会更新 LastWriteTime,但在 Windows 10 上不会。
- 用户对迁移后文件修改日期感到困惑。
决议
了解 MOTW 实现:Windows 11(2024 年 6 月及更高版本)将 Mark-of-web 应用于来自不受信任的网络的文件,更改时间戳。 若要防止此问题,请将网络路径添加到受信任的站点/本地 Intranet。
常见问题快速参考表
| 症状 | 事件 ID/消息 | 根源 | 决议 |
|---|---|---|---|
| 访问被拒绝/权限失败 | 5000, 45062 | NTFS/共享权限、错误的帐户 | 使用 /COPYALL、对齐安全标识符 (SID)、导出/导入注册表共享项目、调整权限 |
| 清单扫描失败(短信) | 2506、2513、7004、0x800705AA | 帐户、网络、长路径、防火墙 | 授予权限,打开端口,启用长路径,清除锁 |
| Robocopy 错误地记录“已更新”文件 | N/A | 开关不正确,源不兼容 | 查看交换机,匹配源/目标文件系统,筛选日志 |
| 磁盘无法在群集中联机 | 995, 1069 | 卷影副本,预留 | 删除卷影副本,清除保留项,修复群集配置 |
| Hyper-V 共享磁盘移动失败 | “无法移动磁盘...” | 可共享磁盘属性 | 从虚拟机分离、手动移动/复制、重新连接 |
| 停滞或迁移速度缓慢 | N/A | 锁定的文件,资源限制 | 停止打开的进程/服务,增加队列深度,升级硬件 |
| 路径太长/字符无效错误 | “路径太长”等。 | 无效字符, >260 个字符 | 清理名称/路径,启用长路径支持 |
| 迁移后 LastWriteTime 已更改 | N/A | Windows 11 中的 MOTW | 将共享添加到受信任的站点,并进行用户教育 |
| 系统文件夹无法迁移 | “无法传输某些设备”,CSV 日志 | 设计使然 | 忽略,预期行为 |
数据收集
在联系Microsoft支持人员之前,可以收集有关你的问题的以下信息。
- Robocopy 日志 (/LOG+:<path>//unilog+:<path>) – 完整副本和差异副本
- 短信日志: C:\ProgramData\Microsoft\StorageMigrationService\Logs\*
- 事件查看器 (System/Application/StorageMigrationService) 日志 - 过滤相关时间和事件 ID
- 群集日志: 在所有节点运行命令 Get-ClusterLog
- 磁盘/扫描实用工具:
- fsutil fsinfo 用于获取扇区和分配单元的详细信息。
- 使用 du.exe 或 WinDirStat 查看目录大小细分
- PowerShell 输出:
- 针对路径和属性问题进行筛选的 Get-ChildItem
- 关键路径的 icacls 输出
- 共享设置的注册表快照:
- 导出为.reg文件