![USMT 加载状态陷入(接近)无限循环?](https://linux22.com/image/613626/USMT%20%E5%8A%A0%E8%BD%BD%E7%8A%B6%E6%80%81%E9%99%B7%E5%85%A5%EF%BC%88%E6%8E%A5%E8%BF%91%EF%BC%89%E6%97%A0%E9%99%90%E5%BE%AA%E7%8E%AF%EF%BC%9F.png)
我正在尝试将 USMT 引入我公司的环境中,以便将来进行所有迁移。在进行一些测试时,我有一个备份存储拒绝恢复,并产生了一些非常奇怪的结果。
提取小型 MIG 文件 (600MB) 时,通常只需几分钟即可完成 - 这个过程大约需要 20-30 分钟。loadstate.log 文件变得非常大,充满了以下内容,只是重复(日志中大约有一百万行):
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Compressed=C:, Mapped=C:, DestExpanded=C:\
2013-06-21 18:08:23, Info [0x080000] Creating stream copy in C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5290.tmp (362 bytes)
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Links C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5290.tmp and C:\Users\SYPKENJM\AppData\Roaming\Microsoft\Windows\Recent\Local (C) (667).lnk differ in target paths: 'C:\' vs. 'C:\'
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Compressed=C:, Mapped=C:, DestExpanded=C:\
2013-06-21 18:08:23, Info [0x080000] Creating stream copy in C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5291.tmp (362 bytes)
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Links C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5291.tmp and C:\Users\SYPKENJM\AppData\Roaming\Microsoft\Windows\Recent\Local (C) (668).lnk differ in target paths: 'C:\' vs. 'C:\'
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Compressed=C:, Mapped=C:, DestExpanded=C:\
2013-06-21 18:08:23, Info [0x080000] Creating stream copy in C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5292.tmp (362 bytes)
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Links C:\Users\SYPKENJM\AppData\Local\Temp\tmp848C.tmp\Temp\tmp5292.tmp and C:\Users\SYPKENJM\AppData\Roaming\Microsoft\Windows\Recent\Local (C) (669).lnk differ in target paths: 'C:\' vs. 'C:\'
2013-06-21 18:08:23, Info [0x080000] pCompareLnkContent: Compressed=C:, Mapped=C:, DestExpanded=C:\
我可以看到其中有一些与这些日志条目匹配的隐藏 lnk 文件(例如,“Local (C) 581.lnk”,但我不知道它们来自哪里。这台机器是为这次 USMT 测试而全新制作的,因此看来 USMT 一定已经创建了这些文件。loadstate.log 最终约为 180MB,然后它最终继续前进。
我运行了 usmtutils /extract,它提取得非常快 - 那些本地 (C) ###.lnk 文件就在那里,在 appdata/microsoft/windows/recent 文件夹中。它只是一个指向 C:\ 驱动器的 lnk。
有人有任何见解、故障排除步骤或类似的经历吗?
答案1
我相信我对这种奇怪的行为有一个解释。
似乎“忽略不相关链接”功能在指向驱动器根目录的链接上失效。例如,我在“最近”文件夹中有一个指向“F:\”驱动器的 LNK 文件。比较运行比较并返回错误的因为“F:\”不等于“F:”。
每次我运行 loadstate 进行恢复时,它都会将相关链接的副本添加到 C:\ 驱动器(或 F:\ 驱动器)。(除了上次 scanstate 运行后备份的所有 LNK)。
我测试的机器,我做了很多测试,备份和恢复,反复进行。1 个 LNK 变成了 (2+1)=3,然后变成了 (6+1)=7,然后变成了 (14+1)=15、31、63、127、255、511……等等。LNK 比较过程显然必须比较每一个lnk 与其他 lnk 类似,因此需要 O(n²) 次迭代(基于日志的输出)。这很快就失控了。一个 loadstate 日志在日志级别 5 时增长到 150MB,下一个日志增长到 300MB,之后我最终取消了该过程。