USMT loadstate попал в (почти) бесконечный цикл?

Я пытаюсь внедрить USMT в среду моей компании для всех наших будущих миграций. Во время некоторого тестирования у меня есть хранилище резервных копий, которое отказывается восстанавливать, что дает очень странные результаты.

При извлечении небольшого MIG-файла (600 МБ) это обычно занимает всего пару минут - оно продолжается и продолжается около 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 в итоге занимает около 180 МБ, затем он, наконец, движется дальше.

Я запустил usmtutils /extract, и он очень быстро извлекается - и эти файлы Local (C) ###. Lnk находятся в папке appdata/microsoft/windows/ недавний. Это просто lnk, который указывает на диск C:\.

Кто-нибудь есть какие-либо идеи, шаги по устранению неполадок или аналогичные события?

1 ответ

Решение

Мне кажется, у меня есть объяснение этому странному поведению.

  1. Похоже, что функция "игнорировать нерелевантные ссылки" разбивает ссылки, указывающие на корень диска. Например, у меня был файл LNK в папке "недавние", который указывал на диск "F:\". Сравнение запустило сравнение и вернуло false, потому что "F:\" не было равно "F:".

  2. Каждый раз, когда я запускал loadstate для восстановления, он добавлял копию рассматриваемой ссылки на диск C:\ (или диск F: \). (в дополнение ко всему LNK, который был зарезервирован после последнего запуска scanstate.

  3. На машине, на которой я тестирую, я много раз тестировал, делал резервные копии и восстанавливал. 1 LNK превратился в (2+1)=3, который превратился в (6+1)=7, который превратился в (14+1)=15, 31, 63, 127, 255, 511... и так далее. Процесс сравнения LNK, очевидно, должен сравнивать каждый подобный lnk с любым другим lnk, так что это O(n²) итераций (на основе выходных данных журнала). Это вышло из-под контроля очень быстро. Один журнал loadstate вырос до 150 МБ на уровне журнала 5, а следующий - до 300 МБ, прежде чем я в итоге отменил процесс.

Другие вопросы по тегам