Найти тему
Электромозг

Что делать, если компьютер перестал загружаться?

Оглавление

Или если вы скопировали Windows в раздел другого диска и хотите с него загрузиться. Или если вы произвели какие-то другие манипуляции с дисками и разделами, и всё пропало. На все эти проблемы решение находится в этой статье.

Пишу больше для себя, чтобы не забыть собственный опыт, поэтому не все варианты решения вышеупомянутых проблем здесь будут изложены. Но, как мне кажется, мой вариант окажется ключом для любых других случаев с дисками и разделами, поскольку упоминает все необходимые для этого инструменты.

Сначала будет небольшой исторический экскурс о том, как загружалась ОС раньше, и как чаще всего загружается теперь. Замечу, что в наши дни на одном компьютере могут находится загрузочные диски, реализующие оба эти варианта. Выбор между этими дисками можно осуществлять во время начальной загрузки компьютера (до старта ОС по умолчанию), вызывая соответствующее меню путём подалбливания клавиши F8.

Загрузка через BIOS-MBR

Когда-то давно, в те времена, когда Винда ещё устанавливалась в один раздел диска, отформатированного в FAT32, а не разбивала его на отдельные специфические куски (как это всегда по умолчанию делал Линукс), схема её загрузки с диска немного отличалась от сегодняшней.

Первый сектор загрузочного физического диска (512 байт) занимала главная загрузочная запись (MBR, Master Boot Record) с кодом загрузчика (446 байт) и своеобразным оглавлением — таблицей физических координат начал разделов (головка, цилиндр и сектор) и другой информацией, по 16 байт на раздел. Последние два байта MBR были сигнатурой 55h AAh, которая подтверждала, что данный сектор является именно MBR.

Первый раздел после сектора MBR обычно начинался не вплотную, на следующем секторе диска, а с некоторым интервалом. Это объяснялось тем, что если MBR начинался под нулевой головкой жёсткого диска (нумерация головок идёт с нуля), то начало раздела начиналось под его первой головкой. То есть, все остальные сектора (62 штуки) нулевой головки просто пропускались. Для твёрдотельных накопителей такой порядок ради совместимости сохранился.

Процесс загрузки Windows через BIOS-MBR

При включения компьютера базовая система ввода-вывода (BIOS, Basic Input/Output System) материнской платы после процедуры самотестирования (POST, Power-On Self-Test) считывала с диска, выбранного в нём как загрузочный, первый сектор с MBR и запускала из него диспетчер загрузки MBR.

Диспетчер загрузки MBR по своей таблице разделов находил на диске специально помеченный загрузочный раздел, и считывал из его первого сектора загрузочную запись тома (VBR, Volume Boot Record).

VBR, как и MBR, содержала т.н. начальный загрузчик программ (IPL, Initial Program Loader), которому и передавалось управление.

Затем IPL, в свою очередь, запускал загрузчик операционной системы (NTLDR для Windows NT/2000/XP или winload.exe для Windows Vista, Windows 7 и выше), которые и загружали операционную систему.

Довольно длинная цепочка, но я те времена сталкивался только с одной проблемой, приводившей к внезапной невозможности загрузки ОС — пропаданием в таблице разделов MBR признака загрузочного раздела, кода 80h, который являлся первым байтом 16-байтной строки, относящейся к соответствующему разделу. Помню, что приходилось восстанавливал вручную этот код в шестнадцатеричном редакторе WinHex (тогда ещё текстовом). От более серьёзных проблем с процессом загрузки операционных систем судьба меня отвела.

Загрузка через UEFI-GPT

Современные системы сохраняют совместимость с дисками, размеченными для загрузки через MBR, но позволяют использовать на шаг более короткий способ загрузки операционных систем, одновременно избегая ограничений на объём используемых накопителей. Теперь адресация сектора происходит не через цилиндры и головки (последнее время сугубо виртуальные), количество которых ограничено, а через логические блоки (LBA, Logical block addressing), что позволяет сразу адресовать любой сектор накопителя.

Теперь базовая система ввода-вывода (BIOS) называется иначе — унифицированный расширяемый интерфейс встроенного ПО (UEFI, Unified Extensible Firmware Interface). Это ПО научилось самостоятельно работать с файловой системой и считывать файлы загрузчика операционной системы напрямую с отформатированного системного раздела диска (т.е. тома).

Вне томов и файлов осталась только модернизированная таблица разделов (GPT, GUID Partition Table), основанная теперь на глобальных уникальных идентификаторах (GUID, Globally Unique Identifier, например, такой: {6F9619FF-8B86-D011-B42D-00CF4FC964FF}). Таблица находится в первых секторах диска, сразу после первого сектора, в котором по-прежнему хранится главная загрузочная запись MBR для устаревшего режима BIOS (Legacy BIOS), позволяющего загружать операционную систему по-старому.

При установке Windows в режиме GPT, перед основным разделом с файлами операционной системы, подлежащими загрузке, автоматически создаётся небольшой системный раздел EFI (ESP, EFI System Partition) размером 100 МБ, который форматируется в FAT32, и куда по пути \EFI\Microsoft\Boot\ копируется файл bootmgfw.efi, представляющий собой диспетчер загрузки Windows (Windows Boot Manager). Путь к этому файлу прописывается в энергонезависимую память UEFI. Полученный том скрывается от пользователя (он не имеет буквы и доступен только с правами администратора).

Кстати, по пути «/EFI/Boot/» прописывается диспетчер загрузки по умолчанию на случай сбоя энергонезависимой памяти UEFI. Например, таковым диспетчером является bootx64.efi, который будет запущен в случае сбоя памяти для текущего диска. Также диспетчеры, расположенные по этому пути, используются при загрузки с флешек и других внешних устройств.

Процесс загрузки Windows через UEFI-GPT

При включения компьютера прошивка UEFI материнской платы (после процедуры самотестирования (POST, Power-On Self-Test) и прохождения фаз безопасности, пред-EFI инициализации и загрузки драйверов) запускает диспетчер загрузки UEFI (UEFI Boot Manager), который уже находится в составе прошивки, и его не надо считывать с диска.

Диспетчер загрузки UEFI считывает с диска, выбранного как первый загрузочный, 33 сектора с таблицей разделов GPT, начиная со второго сектора (первый сектор занят MBR). Таблица разделов выглядит следующим образом:

Затем диспетчер загрузки UEFI ищет по таблице первый попавшийся системный раздел EFI и по прописанному в энергонезависимой памяти UEFI пути (\EFI\Microsoft\Boot\bootmgfw.efi) ищет диспетчер загрузки Windows (Windows Boot Manager), после чего передаёт ему управление.

Диспетчер загрузки Windows считывает из файла настроек BCD (Boot Configuration Data), находящегося рядом, настройки параметров загрузки ОС и путей к их загрузчикам. В BCD может быть прописано несколько ОС. Тогда диспетчер выведет на экран их список и попросит пользователя выбрать одну из них.

Если ОС одна, или пользователь выбрал систему, то диспетчер запускает соответствующий загрузчик операционной системы winload.efi, находящийся в разделе с файлами операционной системы (как правило, по пути \Windows\System32\), который уже и загружает саму операционную систему.

Инструменты восстановления диспетчера загрузки Windows

Поскольку для меня актуальна информация для дисков с GPT (я уже перешёл на новый стандарт загрузки), то о работе с этой системой загрузки далее и будет идти речь. Итак, если Windows загружается, то для работы с разделами диска я могу порекомендовать программу AOMEI Partition Assistant. В качестве альтернативы я пробовал пользоваться EaseUS Partition Master, но у него меньше возможностей и нет перевода интерфейса на русский язык.

Для работы с настройками диспетчера загрузки Windows файла BCD я могу порекомендовать программу EasyBCD. В ней можно настраивать меню выбора загрузки Windows. Для более тщательного исследования недр BCD я пользовался программой Visual BCD, но она почему-то довольно тормозная.

Для просмотра содержимого системного раздела EFI, в котором расположен диспетчер загрузки Windows, нужно запускать Проводник с правами Администратора. Примечательно, что Windows 11, начиная с определённого своего обновления, блокирует эту возможность. Некоторыми танцами с бубном эту блокировку можно обойти, но можно просто использовать альтернативный проводник, например, FreeCommander. Его легко можно запускать от имени Администратора.

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

Загрузитесь с установочного диска, и когда тот попросит выбрать язык интерфейса, нажмите клавиши Shift+F10 (или Shift+Fn+F10 на ноутбуке). Появится окно с командной строкой.

Проверяем исправность диспетчера загрузки Windows

В командной строке набираем имя редактора хранилища данных конфигурации загрузки bcdedit и жмём «Ввод». При исправном диспетчере загрузки Windows у вас должны появиться его настройки:

-2

Тут мы видим три раздела. Первый отвечает за сам диспетчер, а два оставшихся — за загрузку двух моих операционных систем. На буквы дисков можно сильно внимания не обращать, они могут меняться в зависимости от того, загрузились ли вы с флешки, CD-привода или с внутреннего накопителя.

Если что-то пошло не так, и выскочила ошибка, то нужно восстанавливать критические файлы среды загрузки UEFI, и пересоздавать конфигурацию загрузчика в хранилища настроек BCD. К счастью, это сделать несложно и достигается простым копированием файлов из папки Windows с последующим небольшим редактированием настроек для добавления второй системы, если она есть.

Для этого нам нужен будет доступ к системному разделу EFI, который мы можем включить утилитой diskpart, присвоив ему какую-нибудь букву диска, после чего утилитой bcdboot скопировать в этот раздел все нужные файлы из установленной в основном разделе системы. После этого мы получим загружающуюся первую систему, из которой нам уже удобнее будет добавить в настройки BCD путь ко второй системе с помощью приложения EasyBCD.

Назначим букву системному разделу EFI для доступа к его файлам

Запускаем утилиту управления дисками, набрав её имя diskpart и нажав «Ввод». Ниже приведены все команды этой утилиты, вы их можете вызвать у себя, набрав команду help или просто «?»:

-3

Сначала посмотрим список дисков нашей системы. В строке приглашения DISKPART> набираем команду list для отображения списка объектов и она нам подсказывает, что для отображения дисков нужно набирать list disk (или сокращённо lis dis, потому что для выполнения любой команды достаточно набрать её первые три буквы). Набираем:

-4

Мы видим, что у меня в системе расположены три физических диска. По их объёму я понимаю, где из них какой: Диск 0 — мой новый SSD, Диск 1 — HDD для архивирования и Диск 2 — старый SDD. Обратим внимание на столбик GPT — звёздочками отмечены те диски, на которых имеется GPT. Без звёздочек — только MBR.

Нас интересует загрузка с нового SSD, то есть, с диска 0. Поэтому выбираем его (select disk 0), после чего отображаем его разделы (list partition) и тома всего компьютера (list volume). Замечу, что том — это просто отформатированный раздел.

На скриншотах я показываю пошаговый набор команд, чтобы незавершённые команды отображали подсказки и было понятно, какими другими возможностями они обладают. Например, на скриншоте ниже слово select можно было не набирать, сразу набрав select disk 0:

-5

Я тут уже покопался с системными томами и присвоил им буквы. В вашем случае у них не будет своих букв.

Итак, что мы видим на диске 0? Ориентируясь по размерам, я понимаю, что:

  • Раздел 1 типа «Система» — это системный раздел EFI, в котором расположен диспетчер загрузки Windows.
  • Раздел 2 — зарезервированный системой раздел (MSR, Microsoft System Reserved) для своих внутренних нужд.
  • Раздел 3 типа «Основной» — это раздел с ОС Windows 11.
  • Раздел 4 типа «Основной» — это раздел с ОС Windows 7, которую я перенёс с диска 2 (старого SSD), и для которой мне теперь надо было добавить запись в меню загрузки диспетчера Windows Boot Manager, находящемся в разделе 1.
  • Раздел 5 — раздел восстановления Windows 11, автоматически сформированный вместе с разделами 1, 2 и 3 при установки этой операционной системы на чистый диск. Такое разбиение происходит при установке ОС начиная с версии Windows 7.

Итак, для восстановления диспетчера загрузки Windows нам нужен доступ к файловой системе соответствующего тома, то есть, ему нужно присвоить букву. Сравнивая размеры разделов с томами, видим, что у нас существуют два тома с размером 100 МБ. Скорее всего, искомый том — первый из двух, потому что его положение ближе к другим томам нужного накопителя, которые однозначно определяются по объёму. Кроме того, он единственный с файловой системой FAT32, а мы знаем, что UEFI работает только с системами FAT. Итого, наш том — это Том 3.

На скриншоте я уже присвоил тому букву. Чтобы это сделать, нужно выполнить команды select volume 3 и assign letter J:

-6

Завершаем работу с diskpart командой exit.

Восстанавливаем диспетчер загрузки Windows в системном разделе EFI

Сначала ищем в системном разделе файл настроек BCD и если он существует, снимем с него атрибуты скрытый, только для чтения и системный, чтобы его можно было перезаписать. Обычно он расположен по пути X:\efi\microsoft\boot\, где X — буква, присвоенная нами ранее системному EFI-разделу. В нашем случае это буква J. Переходим в эту папку:

cd /d m:\efi\microsoft\boot

после чего с файла настроек BCD снимаем атрибуты:

attrib BCD -s -h -r

Переименовываем файл BCD в BCD.bak:

ren BCD BCD.bak

После чего средством создания и восстановления загрузочного файла BCD bcdboot восстанавливаем испорченные файлы диспетчера загрузки Windows:

bcdboot C:\Windows /L ru-ru /S J: /F ALL

Замечу, что C:\Windows — это путь текущего сеанса к папке Windows на диске, букву которого нам выдаёт утилита diskpart по команде select disk 0 а буква диска J: — это та, которую мы присвоили системному EFI-разделу.

Ещё один момент — в утилите bcdboot операционной системы Windows 7 у параметра /F нет модификатора ALL. Ну и можно обойтись без модификатора.

Всё! Для интереса снова запускаем bcdedit и смотрим, что у нас в загрузке.

Заключение

Текста получилось много, но по сути всё довольно просто. Загружаемся с установочного диска или флешки, и на первой же остановке по случаю запроса языка нажимаем Shift+F10 для доступа к командной строке.

Далее используем утилиты командной строки bcdedit, diskpart и bcdboot для восстановления диспетчера загрузки Windows. Всё.

Конечно, могут быть и более сложные неисправности, но они встречаются существенно реже. И да, их тоже можно чинить без переустановки операционной системы. Кстати, для тех, кому интересно покопаться в MBR и GPT-таблицах на уровне байтов, могут это сделать с помощью шестнадцатеричного редактора WinHex.

На сегодня всё. Ставьте нравлики и сохраняйте ссылку на эту статью, если она оказалась полезной. Подписывайтесь на мой канал. Удачи! :-)