Установка ROSA в UEFI-режиме при наличии Windows в Legacy-BIOS-режиме

Материал из Rosalab Wiki
Перейти к: навигация, поиск
UEFI logo.svg

Если у вас есть компьютер, загружающийся в режиме Legacy BIOS, но при этом сам компьютер поддерживает UEFI, и вы хотите установить на него ROSA Fresh именно в UEFI, то эта статья для вас.

Мы решили собрать тут основные проблемы, с которыми вы можете столкнуться при таком сценарии, а также (по возможности) пути их решения. Настоятельно рекомендуется сначала прочесть статью и тщательно взвесить все «за» и «против», прежде чем приступать к установке, потому что, увы, не на всех компьютерах удастся получить рабочую конфигурацию. Кроме того, перед установкой может потребоваться выполнить некоторые шаги, чтобы потом восстановить загружаемость компьютера.

Статья скомпонована в виде списка проблем и их решений.

После установки ROSA не загружается

Если у вас был Legacy-BIOS-загрузчик, то, скорее всего, на диске находилась таблица разделов MBR. В настоящее время утилита добавления загрузочного пункта UEFI не поддерживает логические MBR-разделы. Поэтому если ваш EFI-раздел (/boot/efi) является логическим (то есть имеет номер выше 4, например, /dev/sda5, /dev/sdb8 и т. п.), то загрузочный пункт добавлен не будет, и UEFI не будет знать, что загружать.

Возможные решения и обходные пути:

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

На MBR-диске может находиться не более 4-х первичных разделов. Поэтому либо у вас будет всего 4 раздела (без возможности создавать новые), либо будет не более трёх первичных разделов, а четвёртый будет использоваться в качестве так называемого расширенного раздела, который по сути является «контейнером» для дополнительных, логических разделов. Соответственно, если у вас уже есть 3 первичных раздела и несколько логических, создать ещё один первичный раздел для EFI будет невозможно. Кроме того, даже если для первичного раздела есть свободный номер, вы не сможете его расположить между двумя логическими разделами, поскольку тогда его местоположение будет пересекаться с расширенными разделом, что запрещено.

Вручную прописать UEFI-загрузчик
Некоторые компьютеры (например, отдельные серии Dell Inspiron или Latitude) позволяют в настройках UEFI создавать собственные пункты загрузки. В этом случае после установки ROSA вы можете добавить такой пункт, выбрав в качестве корневой файловой системы ваш EFI-раздел, а в качестве загружаемого файла — \EFI\rosa\BOOTx64.efi или \EFI\rosa\grubx64.efi. Если у вас поддерживается Secure Boot и вы планируете его включать, то нужно грузиться через BOOTx64.efi, если нет — можно использовать grubx64.efi напрямую.


Dell EFI BIOS Editor Select.jpg
Dell EFI BIOS Editor.jpg
Автозапуск командного скрипта из EFI-раздела
Некоторые UEFI-прошивки поддерживают автозапуск командного скрипта из EFI-раздела. Поэтому если предыдущие варианты не подошли, попробуйте загрузить ROSA в Live-режиме, подмонтировать EFI-раздел в какой-нибудь временный каталог и создать в его корне файл с именем startup.nsh, в котором в кодировке UTF-16LE с BOM-сигнатурой должны быть прописаны команды перехода на нужный раздел и загрузки EFI-файла, например:
fs0:
\EFI\rosa\grubx64.efi
UEFI-имена разделов обычно выглядят как BLKn:, а для распознанных файловых систем создаются псевдонимы FSn:, где n — порядковый номер. Список устройств может выводиться на экран при загрузке компьютера (если нет, попробуйте найти нужный номер перебором).

В загрузочном меню UEFI-ROSA отсутствует Windows

Legacy-загрузчик не поддерживается в режиме UEFI, поэтому Windows, установленная в Legacy-режиме, не будет искаться и добавляться в Grub-меню.

Имеющиеся Linux-системы же, напротив, будут корректно добавлены, поскольку для своей загрузки не требуют обращения к Legacy-загрузчику: имеющаяся UEFI-версия Grub2 просто обращается к файлам ядра и initrd напрямую.

С Windows такой механизм невозможен, поэтому для её загрузки необходимо отключать UEFI или явно выбирать загрузку с жёсткого диска через MBR (если в UEFI реализован Legacy-совместимый режим работы).

После установки UEFI-ROSA и переключения в Legacy BIOS перестала грузиться ранее установленная Windows

Эта проблема связана с тем, что загрузчик Windows запоминает идентификатор диска, записанный в MBR. Установка ROSA в UEFI-режиме, по неустановленным пока причинам, может этот идентификатор перезатереть. В итоге Windows не может найти свой загрузочный диск и падает с ошибкой 0xc000000e.

Для решения этой проблемы необходимо перед началом установки ROSA проделать следующее:

  • Если вы загрузились в Live-режим, то откройте консоль (Konsole); если вы в режиме установки, то переключитесь в терминал (Ctrl+Alt+F2) и залогиньтесь в аккаунт root (пароль не потребуется).
  • Выполните команду:
fdisk -l /dev/sda
Вместо sda укажите диск, на котором установлена Windows. На экран должно вывестись что-то вроде следующего:
[root@localhost ~]# fdisk -l /dev/sda

Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcea3e5ff

Device    Boot     Start       End   Blocks  Id System
/dev/sda1 *         2048    718847   358400   7 HPFS/NTFS/exFAT
/dev/sda2         718848  24680447 11980800   7 HPFS/NTFS/exFAT
/dev/sda3       24680448  67108863 21214208   5 Extended
/dev/sda5       24682496  28874751  2096128  82 Linux swap / Solaris
/dev/sda6       28876800  41459711  6291456  83 Linux
Нас интересует строчка Disk identifier: 0xcea3e5ff. Здесь как раз указан текущий идентификатор, его необходимо куда-то записать. После этого можно возвращаться в инсталлятор (из терминала это делается сочетанием Ctrl+Alt+F1 или Alt+F1) и продолжать установку.
  • После завершения установки надо будет загрузиться либо в свежеустановленную ROSA, либо снова в Live-режим и восстановить идентификатор. Для этого открываем консоль и запускаем:
fdisk /dev/sda
(На этот раз без параметра -l и, разумеется, снова указываем правильный диск.)
  • Запускается консоль fdisk. Вводим последовательно следующие команды:
    • x (вход в режим эксперта)
    • i (смена идентификатора диска)
    • далее вводим записанный нами ранее код (в примере выше это 0xcea3e5ff)
    • r (выход в основной режим)
    • w (запись изменений и выход из fdisk)
  • Если вы делаете это из установленной системы, программа может вывестись сообщение о невозможности перечитать таблицу разделов. Это нормально, но на всякий случай выполните команду fdisk -l /dev/sda, чтобы проверить, что новая метка действительно записалась.
  • Всё, можно перезагружать компьютер, выключать UEFI-режим и загружать Windows.

А я потерял прежний идентификатор, что делать?

В этом случае есть возможность вытащить старый идентификатор из реестра Windows. Можно воспользоваться какой-нибудь Linux-программой визуального представления реестра, но проще обойтись тем, что под рукой.

  • Монтируем основной Windows-раздел в какой-нибудь каталог, например, /mnt.
  • Запускаем mc, переходим к файлу /mnt/Windows/System32/config/SYSTEM, открываем его на просмотр (F3).
  • Открываем диалог поиска (F7), ищем строку \DosDevices\C:.
  • Переключаемся в hex-режим (F4).
MC Edit SYSTEM.png
  • Смотрим на шестнадцатеричные коды в районе найденной строки. Вы должны увидеть примерно следующее (чтобы легче было сопоставить коды с символами, я здесь вытянул всё в одну строку, а символы из правой колонки перенёс под соответствующие коды):
5C 44 6F 73 │ 44 65 76 69 │ 63 65 73 5C │ 43 3A 00 00 │ F0 FF FF FF │ 00 BD 10 B7 ...
 \  D  o  s    D  e  v  i    c  e  s  \    C  :  .  .    .  .  .  .    .  .  .  .    .  .  .  .
  • Как видим, сразу после найденной нами строки идут следующие байты (разумеется, в вашем случае они могут отличаться):
00 00 │ F0 FF FF FF │ 00 BD 10 B7
Пропускаем первые 6 байт, а следующие четыре байта (00 BD 10 B7) — это как раз и есть искомый идентификатор, записанный с обратным порядком байтов. Разворачиваем байты в нужном нам порядке, получаем B710BD00. Добавляем префикс 0x и используем этот код (0xB710BD00) в fdisk, как указано выше.

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.