Бывают случаи, когда в Windows были удалены или повреждены системные файлы. Это могло произойти в результате сбоя файловой системы, действий вирусов или ошибочных действий самого пользователя. При этом система может загружаться, а может и нет. Не спешите переустанавливать систему или делать откат к заводским настройкам (в случае с Windows Server это невозможно или неприемлемо). Зачастую систему можно привести в рабочее состояние.
Сегодня в номере:
- Восстановление системы
- Восстановление загруженной операционной системы.
- Восстановление системы, которая не загружается
Восстановление системы
Восстановление системы впервые появилось в Windows Me. Тогда копии важнейших системных файлов (реестра в подавляющем большинстве) хранились в zip архивах. Чуть позже, в Windows XP, они хранились как есть, только скрытые с глаз долой в каталоге System Volume Information. Начиная с Windows Vista восстановление системы использует технологию теневого копирования. Именно из теневой копии Windows может восстановить свои файлы. Этот вариант подходит только для клиентских редакций Windows.
![](https://leonid.uhanov.org/wp-content/uploads/2020/02/Snimok5.jpg)
Здесь следует помнить, что при использовании точки восстановления, из теневой копии будет восстановлено то, что в неё попало. Это значит, что если файлы на момент создания точки восстановления уже были повреждены или отсутствовали, чуда не произойдёт. Так-же следует отметить отсутствие этого механизма в Windows Server и его автоматическое отключение при установке клиентской редакции Windows на SSD диск.
Восстановление загруженной операционной системы.
Рассмотрим порядок действий, если восстановление системы не применимо или не помогло и система загружается.
System File Checker
Начать стоит с проверки системных файлов, в этом нам поможет утилита проверки целостности системных файлов. SFC проверяет системные файлы на несанкционированные изменения или удаление и попытается восстановить их их кэша, расположенного по пути: C:\Windows\WinSxS. Для начала проверки выполните в командной строке, запущенной с повышенными привилегиями команду:
sfc /scannow
Рассмотрим ситуацию на реальном примере, произошедшем со мной недавно:
Windows Server 2016 с установленной ролью Windows Server Update Services. По пути C:\Program Files\Update Services\ отсутствует каталог Tools, что ставит крест на управлении сервером из командной строки. Можно скопировать каталог с аналогичного сервера, если такой есть. У меня не было и я скомандовал описанную ранее команду:
![](https://leonid.uhanov.org/wp-content/uploads/2020/02/Snimok.jpg)
Защита файлов не смогла восстановить некоторые файлы. Нужно уточнить, вернулся-ли каталог Tools на своё место. Можно пройти по пути C:\Program Files\Update Services\ и посмотреть, но это не наш метод. SFC создаёт файл журнала, который мы будем изучать. Файл большой, поэтому предварительно отберём нужные данные:
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfcdetails.txt"
Открываем файл блокнотом и ищем строку: «Update Services\Tools»
![](https://i2.wp.com/leonid.uhanov.org/wp-content/uploads/2020/02/Snimok1.1.jpg?fit=750%2C220&ssl=1)
Мы видим, что файл восстановлен. Отлично! Но программа сообщила об ошибках — значит капаем дальше. Проводим отбор по тексту ошибки:
findstr /c:"[SR] Cannot repair member file" "%userprofile%\Desktop\sfcdetails.txt">"%userprofile%\Desktop\error.txt"
И снова смотрим, что получилось:
![](https://i1.wp.com/leonid.uhanov.org/wp-content/uploads/2020/02/Snimok1.2.jpg?fit=750%2C330&ssl=1)
Не восстановились некоторые ярлыки. В принципе на этом можно и закончить, но если хочется довести начатое до конца, то следует использовать DISM.
DISM
Утилита обслуживания образов развертывания и управление ими позволяет творить чудеса даже в очень трудных случаях. DISM занимается обслуживанием хранилища компонентов (WinSxS). Его проверка и восстановление как раз по плечу DISM.
Давайте договоримся, что первой я буду указывать команду для cmd, а далее дублировать для PowerShell.
Просмотр состояния хранилища компонентов
Для отображения последнего выясненного состояния хранилища компонентов используется команда:
DISM /Onine /Cleanup-Image /CheckHealth
Repair-WindowsImage -Online -CheckHealth
Эта команда не проверяет хранилище, а отображает последнее известное его состояние.
![](https://leonid.uhanov.org/wp-content/uploads/2020/03/Snimok10.jpg)
Проверка хранилища компонентов
Проверка хранилища, напротив, выполняется продолжительное время и отражает реальное положение дел в системе. Для проверки хранилища используется команда:
DISM /Online /Cleanup-Image /ScanHealth
Repair-WindowsImage -Online –ScanHealth
Она найдет ошибки и предупредит об их наличии, но не восстанавливает. Как видим, у меня с системой всё в порядке.
![](https://leonid.uhanov.org/wp-content/uploads/2020/02/Snimok7.jpg)
Восстановление хранилища компонентов
Для восстановления хранилища компонентов DISM требуется источник, откуда он будет брать исправные копии повреждённых компонентов. В качестве источника могут использоваться:
- Windows Update или WSUS
- Установочный образ ESD или WIM
Как видим, вариантов источников много, их можно указывать последовательно в одной команде. Будет использоваться первый, где требуемый компонент будет найден. Есть особенность, что если мы укажем образ соседней системы и компонент там найден не будет, будет произведён поиск в Windows Update.
Команда ниже проверит хранилище на наличие повреждённых компонентов и попробует их восстановить, скачав исходные файлы с центра обновления Windows:
DISM /Online /Cleanup-Image /RestoreHealth
Repair-WindowsImage -Online -RestoreHealth
Однако метод может потерпеть неудачу, если отсутствует соединение с интернетом или повреждены компоненты центра обновления Windows. Рассмотрим восстановление с установочного носителя. С загрузочного образа, диска или флешки нам нужен всего один файл: install.wim или install.esd
DISM /online /cleanup-image /restorehealth /source:D:\sources\install.wim
Repair-WindowsImage -Online -RestoreHealth -Source E:\sources\install.wim
![](https://leonid.uhanov.org/wp-content/uploads/2020/02/Snimok3.jpg)
Иногда требуется указать номер индекса требуемой редакции. Уточнить номер индекса требуемой редакции совсем несложно — например через PowerShell:
Get-WindowsImage -ImagePath "E:\sources\install.wim
![](https://leonid.uhanov.org/wp-content/uploads/2020/02/Snimok2.jpg)
Индекс сборки потом указываете через двоеточие. Например:
DISM /online /cleanup-image /restorehealth /source:D:\sources\install
.esd:2
Если требуется запретить использование Windows Update или WSUS, используйте параметр /LimitAccess.
DISM /online /cleanup-image /restorehealth /source:D:\sources\install.wim
/LimitAccess
Восстановление системы, которая не загружается
Рассмотрим случай, когда система уже не загружается. Для её восстановления нам потребуется доступ к системному диску. Мы можем использовать среду восстановления, имеющуюся на компьютере:
![](https://leonid.uhanov.org/wp-content/uploads/2020/03/Snimok1.jpg)
Среду восстановления можно запустить с установочного носителя:
![](https://leonid.uhanov.org/wp-content/uploads/2020/03/Snimok11.jpg)
Одним словом, не имеет значения как вы получите доступ к диску. Диск можно также подключить к другому компьютеру. Если использовали среду восстановления, то следует разобраться с буквами дисков. Може использовать для этих целей команду bcdedit или запустить notepad и через меню файл — открыть увидеть буквы дисков и их содержимое.
System File Checker
Утилита проверки целостности системных файлов и в этой ситуации может прийти на помощь! Для этого у ней есть соответствующие параметры /offbootdir и /offwindir. Нам остаётся лишь указать букву системного диска и путь папки Windows.
sfc /scannow /offbootdir=c:\ /offwindir=c:\windows
Программа работает долго, но зачастую результат превосходит ожидания.
DISM
DISM настолько крут, что и в такой ситуации найдёт выход. Подробнее про офлайн обслуживание хранилища компонентов поговорим в другой раз — сейчас сосредоточимся на восстановлении. Сразу скажу, что из среды восстановления PowerShell не работает. Команды управления образом апривожу на случай, если диск подключен к другой системе.
Просмотр состояния хранилища компонентов
Команда используется как и ранее с той лишь разницей, что мы указываем путь к системному диску повреждённой Windows
Dism /Image:E:\ /Cleanup-Image /CheckHealth
Repair-WindowsImage -Path "E:\" -CheckHealth
Мы видим, что хранилище компонентов моей тестовой системы требует восстановления.
![](https://leonid.uhanov.org/wp-content/uploads/2020/03/Snimok13.jpg)
Проверка хранилища компонентов
Проверка хранилища компонентов как и ранее работает долго, но даёт более актуальный результат в отличие от предыдущей команды.
Dism /Image:E:\ /Cleanup-Image /ScanHealth
Repair-WindowsImage -Path "E:\" -ScanHealth
![](https://leonid.uhanov.org/wp-content/uploads/2020/03/Snimok15.jpg)
Восстановление хранилища компонентов
Восстановление хранилиза компонентов по сути своей не отличается от ситуации с загруженной системой, поэтому не буду приводить полный список команд. Ограничусь простой командой восстановления через Windows Update. Разница лишь в указании пути к системе.
Dism /Image:E:\ /Cleanup-Image /restorehealth
Repair-WindowsImage -Path "E:\" -RestoreHealth
Заключение
Как видите есть масса способов привести систему в чувства и без переустановки Windows. Надеюсь предложенные способы помогут вам.