Storvild's Blog
Заметки программиста

Проблема с загрузчиком Windows 10 и ее решение (разметка GPT)

Предыстория:

Когдато у меня был диск 250Гб, где был установлен Windows 7. После этого был куплен диск 500Gb и на него установлен Windows 10. При установке, Windows 10 использовал загрузчик со старого диска и после чего появилась возможность при загрузке выбирать между Windows 10 и Windows 7.
Недавно появилась потребность из системы убрать диск 250Гб, после чего Windows перестала грузиться. Это было связано с тем, что на диске 500Гб отсутствовал EFI загрузчик в скрытом разделе диска.

Решение

Для начала необходимо загрузиться в командную строку Windows. Это можно сделать например загрузившись с установочной флешки с Windows. Установочную флешку можно сделать с помощью утилит, скачиваемых с сайта Microsoft: https://www.microsoft.com/ru-ru/software-download/windows10 или https://www.microsoft.com/ru-ru/software-download/windows11
Загрузившись с флешки на экране выбора языка необходимо нажать Shift+F10 после чего запуститься командная строка.

Запускаем утилиту работы с диском diskpart:

diskpart

Изучаем, какие диски и тома есть у нас в системе

list disk
list volume

Находим по размеру основной раздел (том) в котором у нас стоит Windows. Например это диск D Том 5
Теперь мы можем от данного тома откусить кусочек (100Мб) для загрузочного EFI раздела. Также временно обзовем его буквой S

select volume 1 (вместо 1 указываете тот номер, под которым выше значится ваш раздел с системой)
shrink desired=100
create partition efi
format fs=FAT32
assign letter=S

выйдем из утилиты diskpart:

exit

Теперь скопируем в загрузочный раздел необходимые файлы (Windows лежит на диске D, Том 5, EFI-раздел на диске S)

bcdboot d:\windows /s S:

Более полная команда:

bcdboot d:\windows /s S: /f ALL /l ru-ru

где d:\windows - раздел Windows
/s S: - раздел EFI-загрузчика
/f ALL - копирование файлов загрузки для UEFI и BIOS (необязательно, но можно форсить)
/l ru-ru - язык загрузчика

Ну и теперь можно убрать установленную нами букву S с раздела EFI-загрузчика

diskpart
list volume
select volume 5
remove letter=S
exit

Еще команды diskpart:

list disk - Показать диски
select disk 0 - Выбрать диск 0 (Впереди выбранного диска ставится *)
list partition - Показать список разделов выбранного диска
list volume - Показать список томов 
select volume 1 - Выбрать том 1 (Впереди выбранного тома ставится *)
detail volume - Информация о выбранном томе (если несколько одинаковых томов и надо определить к какому диску он относится)
detail disk - Информация о выбранном диске
assign letter=S - Назначить выбранному тому букву S
exit - Выход из утилиты diskpart

Команды можно сокращать, например:

lis dis = list disk
lis vol = list volume
sel dis 0 = select disk 0
lis par = list partition

Теги:
Администрирование Windows