При обновлении сервера один из апдейтов не смог установиться и сервер начал делать откат обновлений. Спустя какое-то время сервер перезагрузился, появилось черное окно с надписью "Обновление вашей системы" без какого-либо прогресса:
Очевидно, что это не дело и проблему нужно начинать решать самому. По скриншоту можно заметить, что это виртуальная машина на Hyper-V, исходя из этого мы можем сделать следующее:
1. Выключить виртуальную машину. В большинстве случаем безусловно нужно выключать через кнопку Завершение работы...
, но в данном случае она не поможет и придется воспользоваться кнопкой Выключить...
2. Изменить настройки автозапуска (выставить задержку в несколько 5 секунд). Это надо понадобится, чтобы успеть зайти в safe mode
3. Запускаем виртуалку и не забываем кликать на F8
. Появится знакомое меню
4. Итак, теперь мы можем попасть в командную строку. Кликаем на пункт Troubleshoot
и затем на Command Line
5. Теперь запускаем команду, чтобы получить список доступных дисков:
wmic logicaldisk get name
6. Теперь нам нужно определить какой из этих дисков является диском C, т.к в режиме safe
буква диска может отличаться от той, что мы видим в системе. Проще всего опознать нужную нам букву - это найти директорию Windows
, используя команду dir
7. Итак, вы знаете букву нужного нам диска, я буду указывать букву C, вы же замените на ту, что у вас. Переходим в директорию C:\Windows\Winsxs
:
cd C:\Windows\Winsxs
8. Теперь нам нужно вывести список всех файлов, начинающихся с Pending
dir pending*
9. Переименуем все эти файлы, добавив в конец их имени _old
. Команда выглядит так:
ren Pending.xml Pending_old.xml
10. Создадим новый, пустой файл Pending.xml
echo > pending.xml
11. Перейдём на ветку наверх и создадим новую директорию:
cd..
mkdir scratch
12. Удалим\отменим все висящие действия из поврежденного образа с помощью DISM
:
DISM /Image:C:\ /Cleanup-Image /RevertPendingActions /scratchdir:C:\Windows\Scratch
13. Переименуем папку SoftwareDistribution
в SoftwareDistributionOld
ren C:\Windows\SoftwareDistribution C:\Windows\SoftwareDistributionOLD
14. Запустим проверку:
sfc /scannow
15. По завершении проверки перезагрузим виртуалку, это может занять немного больше времени, чем обычно. Но в итоге мы должны увидеть такую картину:
Когда процесс завершится, сервер должен вернуться в нормальное состояние!