Windows Как восстановить загрузчик с помощью bcdedit

Может относиться для любой версии Windows

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
8,005
Решения
15
Реакции
6,799
Привет!

Здесь рассмотрим починку загрузчика, когда у вас ОС не загружается с очевидной надписью о том, что есть проблемы с загрузчиком.

Статья для продвинутых, которые хотя бы знают как пользоваться командной строкой и достаточно внимательные.
Остальным - строго запрещается, юзайте вместо этого готовые инструменты восстановления на загрузочной флешке.

Существует множество разных повреждений загрузчика, начиная от неверной конфигурации, заканчивая повреждением самих файлов.

Мы всё рассматривать не будем. Остановимся только на базовых моментах, как заюзать bcdedit, так чтобы не угробить загрузку системы, которая допустим стоит у вас в параллели.

О других видах ремонта (типа восстановление MBR) можете почитать, например здесь (на англ.):
https://woshub.com/how-to-rebuild-bcd-file-in-windows-10/

Делать мы всё будем либо из-под соседней ОС (если у вас на машине их больше одной), либо загрузившись в ком. строку через среду восстановления.

Изучаем BCDEDIT


В ком строке от админа просто вводим
Код:
bcdedit

и изучаем что там есть, допустим:
Диспетчер загрузки Windows
--------------------
идентификатор {bootmgr}
device partition=\Device\HarddiskVolume3
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {cbc51733-4344-11e8-bc90-e325709f7e98}
displayorder {cbc51734-4344-11e8-bc90-e325709f7e98}
{current}
toolsdisplayorder {memdiag}
timeout 3
displaybootmenu Yes

Загрузка Windows
-------------------
идентификатор {cbc51734-4344-11e8-bc90-e325709f7e98}
device partition=V:
path \Windows\system32\winload.exe
description Windows 10
locale en-US
inherit {bootloadersettings}
recoverysequence {cbc51735-4344-11e8-bc90-e325709f7e98}
custom:15000066 3
recoveryenabled Yes
custom:17000077 352321653
osdevice partition=V:
systemroot \Windows
resumeobject {cbc51733-4344-11e8-bc90-e325709f7e98}
nx OptIn
custom:250000c2 1

Загрузка Windows
-------------------
идентификатор {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale ru-RU
inherit {bootloadersettings}
recoverysequence {cbc51725-4344-11e8-bc90-e325709f7e98}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {cbc51723-4344-11e8-bc90-e325709f7e98}
nx OptIn

Это нормальный конфиг.

По description, мы видим, что есть сам:
1) диспетчер загрузки (его не трогаем)
2) запись Windows 7, при этом {current} - говорит о том, что она грузится по дефолту
3) запись Windows 10

идентификатор - это id через который сможем редактировать записи, используя bcdedit
device и osdevice - собственно диск, на котором расположена система. Для вашего удобства там пишется конкретное имя диска. В реальности загрузчик хранит его в независимом от буквы диска формате, так что вы можете без боязни поменять эту букву в "моем компьютере" через оснастку diskmgmt.msc
path - путь к бинарю инициализации конкретной ОС
systemroot - относительный путь к системным файлам

Остальное нас не сильно беспокоит, но если что-то будет не в порядке, можете взять конфиг выше за образец.


Кейс 1.


У вас вообще нет загрузочной записи, т.е. bcdedit показывает, что нет description с нужной вам системой.
Создадим запись вручную на примере Windows 10.
Код:
bcdedit.exe /create /d "Windows 10" /application osloader
Вернет ответ:
The entry {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs} was successfully created.
где {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs} - всегда рандом, это "идентификатор" вашей записи. В примерах ниже замените его на свой.

Если вам нужно сделать, чтобы эта ОС загружалась по дефолту:
Код:
bcdedit /default {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs}

Заметьте, что теперь идентификатор {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs} заменился на {default} и теперь все команды bcdedit вам нужно будет вводить с допиской {default}, а не {8a7f03d0-5338-11e7-b495-c7fffbb9ccfs}

Если вы не уверены, то просто введите bcdedit, и посмотрите что к чему.

Далее вам нужно прописать правильно пути:
Код:
bcdedit.exe /set {default} device partition=v:
bcdedit.exe /set {default} osdevice partition=v:
bcdedit.exe /set {default} path \Windows\system32\winload.exe
bcdedit.exe /set {default} systemroot \Windows
где v: - это буква диска, на котором установлена нужная ОС*
* буква может отличаться в зависимости от того, загружены вы под средой восстановления, из соседней ОС, или когда вы находитесь в ОС, доступ к которой сейчас восстанавливаете, поэтому полазьте через "мой компьютер", notepad -> файл -> открыть, или ком. строку по папкам и определите, какая сейчас буква у той системы на самом деле.

Затем вам нужно сделать эту запись видимой в диспетчере загрузки:
Код:
bcdedit.exe /displayorder {default} /addlast

На этом создание загрузочной записи завершено.

Замечу, что если вы не делали эту запись дефолтовой, то все операции нужно выполнять с числовым идентификатором, например, вот у вас:
bcdedit
Загрузка Windows
-------------------
идентификатор {cbc51734-4344-11e8-bc90-e325709f7e98}
тогда другие команды будут выглядеть примерно так:

Код:
bcdedit.exe /displayorder {cbc51734-4344-11e8-bc90-e325709f7e98} /addlast

Альтернатива.

Через режим WinRE можно воспользоваться командой:
Код:
bootrec /rebuildbcd
для автоматического поиска и добавления по желанию всех найденных ОС.

Кейс 2.


Испорчены или перепутались пути к диску (скажем после перестановки жестаков в корпусе)

Вводим bcdedit и видим такую картину:
Диспетчер загрузки Windows
--------------------
идентификатор {bootmgr}
device partition=\Device\HarddiskVolume3
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {cbc51733-4344-11e8-bc90-e325709f7e98}
displayorder {cbc51734-4344-11e8-bc90-e325709f7e98}
{current}
toolsdisplayorder {memdiag}
timeout 3
displaybootmenu Yes

Загрузка Windows
-------------------
идентификатор {cbc51734-4344-11e8-bc90-e325709f7e98}
device unknown
path \Windows\system32\winload.exe
description Windows 10
locale en-US
inherit {bootloadersettings}
recoverysequence {cbc51735-4344-11e8-bc90-e325709f7e98}
custom:15000066 3
recoveryenabled Yes
custom:17000077 352321653
osdevice unknown
systemroot \Windows
resumeobject {cbc51733-4344-11e8-bc90-e325709f7e98}
nx OptIn
custom:250000c2 1

Загрузка Windows
-------------------
идентификатор {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale ru-RU
inherit {bootloadersettings}
recoverysequence {cbc51725-4344-11e8-bc90-e325709f7e98}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {cbc51723-4344-11e8-bc90-e325709f7e98}
nx OptIn

Как видим, у нас device и osdevice в записи Windows 10 ведут непонятно куда.

Исправляется просто. Запоминаем "идентификатор" записи. У нас он - {cbc51734-4344-11e8-bc90-e325709f7e98}
Вводим две команды:

Код:
bcdedit.exe /set {cbc51734-4344-11e8-bc90-e325709f7e98} device partition=v:
bcdedit.exe /set {cbc51734-4344-11e8-bc90-e325709f7e98} osdevice partition=v:

где вместо v: - ставим букву вашего диска, на котором установлена нужная ОС *
* буква может отличаться в зависимости от того, загружены вы под средой восстановления, из соседней ОС, или когда вы находитесь в ОС, доступ к которой сейчас восстанавливаете, поэтому полазьте через "мой компьютер", notepad -> файл -> открыть, или ком. строку по папкам и определите, какая сейчас буква у той системы на самом деле.

Дополнительно.


По желанию, вы можете включить классическое меню выбора ОС командой (можно вводить, находясь в ОС не ниже Windows 8):
Код:
bcdedit /set "{current}" bootmenupolicy legacy
Если загрузочное меню не отображается, а начинается сразу загрузка ОС по умолчанию, то введите команды:
Код:
bcdedit /set {bootmgr} timeout 5
bcdedit /set {bootmgr} displaybootmenu yes
Для восстановления стандартного меню выбора, введите:
Код:
bcdedit /set "{current}" bootmenupolicy standard

На этом всё, всем удачи!

Использованы материалы сайта woshub.com
 
Последнее редактирование модератором:
Назад
Сверху Снизу