2

На машине, которая использует UEFI и GRUB для загрузки, я был свидетелем того, как Windows решила изменить порядок загрузки. Я думал, что порядок загрузки был только делом меня и моей материнской платы и просто не существовал в глазах загрузчика, ОС и всего остального. Как ОС может и может изменить это?

Вопросы относительно этого поведения были заданы ранее.

Windows 8 меняет порядок загрузки

На этот вопрос конкретно задается вопрос: «Как это возможно?"а не" Почему это происходит?"," Это должно произойти?"или" Могу ли я включить / отключить это?».

2 ответа2

3

Во-первых, именно ОС устанавливает загрузчик, поэтому она явно контролирует его.

Прошивки UEFI имеют встроенный менеджер загрузки, который сохраняет выбор меню и другие параметры в качестве переменных EFI, таких как Boot0001 , BootOrder , BootNext .

Они хранятся в той же памяти NVRAM, что и другие параметры встроенного ПО - фактически многие параметры встроенного ПО также отображаются в виде переменных EFI - и операционные системы могут читать / записывать их, вызывая код EFI. (Это похоже на вызов BIOS через прерывания старого стиля, за исключением того, что интерфейс UEFI определен лучше).

# ls /sys/firmware/efi/efivars/Boot*
/sys/firmware/efi/efivars/Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c
/sys/firmware/efi/efivars/Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c
/sys/firmware/efi/efivars/Boot0005-8be4df61-93ca-11d2-aa0d-00e098032b8c
/sys/firmware/efi/efivars/Boot0006-8be4df61-93ca-11d2-aa0d-00e098032b8c
/sys/firmware/efi/efivars/BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
/sys/firmware/efi/efivars/BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c

# efibootmgr --verbose
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0004,0003,0005,0006
Boot0003* Windows Boot Manager  HD(1,GPT,785c8ca2-bb16-48fd-917b-19d69543338f,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)
Boot0004* Linux Boot Manager    HD(1,GPT,785c8ca2-bb16-48fd-917b-19d69543338f,0x800,0x32000)/File(\EFI\gummiboot\gummibootx64.efi)
Boot0005* Hard Drive    BBS(HD,,0x0)P0: ST9640320AS               .
Boot0006* CD/DVD Drive  BBS(CDROM,,0x0)P1: SlimtypeDVD A  DS8A5SH    .

# efibootmgr --bootnext 0003
BootNext: 0003
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0004,0003,0005,0006
...

# efivar --print --name 8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0004
GUID: 8be4df61-93ca-11d2-aa0d-00e098032b8c
Name: "Boot0004"
Attributes:
    Non-Volatile
    Boot Service Access
    Runtime Service Access
Value:
00000000  01 00 00 00 72 00 4c 00  69 00 6e 00 75 00 78 00  |....r.L.i.n.u.x.|
00000010  20 00 42 00 6f 00 6f 00  74 00 20 00 4d 00 61 00  | .B.o.o.t. .M.a.|
00000020  6e 00 61 00 67 00 65 00  72 00 00 00 04 01 2a 00  |n.a.g.e.r.....*.|
00000030  01 00 00 00 00 08 00 00  00 00 00 00 00 20 03 00  |............. ..|
00000040  00 00 00 00 a2 8c 5c 78  16 bb fd 48 91 7b 19 d6  |......\x...H.{..|
00000050  95 43 33 8f 02 02 04 04  44 00 5c 00 45 00 46 00  |.C3.....D.\.E.F.|
00000060  49 00 5c 00 67 00 75 00  6d 00 6d 00 69 00 62 00  |I.\.g.u.m.m.i.b.|
00000070  6f 00 6f 00 74 00 5c 00  67 00 75 00 6d 00 6d 00  |o.o.t.\.g.u.m.m.|
00000080  69 00 62 00 6f 00 6f 00  74 00 78 00 36 00 34 00  |i.b.o.o.t.x.6.4.|
00000090  2e 00 65 00 66 00 69 00  00 00 7f ff 04 00        |..e.f.i.......  |

# efivar --print --name 8be4df61-93ca-11d2-aa0d-00e098032b8c-BootNext
GUID: 8be4df61-93ca-11d2-aa0d-00e098032b8c
Name: "BootNext"
Attributes:
    Non-Volatile
    Boot Service Access
    Runtime Service Access
Value:
00000000  03 00                                             |..              |

Этот список часто содержит как загрузочные UEFI-диски, так и MBR-диски "Режим совместимости с BIOS".


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


Примечание: "Переменные EFI" на самом деле не являются специфическими для EFI - подобный метод также существовал в системах ARC, на которых изначально была разработана Windows NT; загрузчик NTLDR и файл «boot.ini», используемые в Windows, являются лишь эмуляцией того, что ARC предоставил бы изначально.

-2

Это возможно, потому что ОС действительно контролирует загрузчик. Вы перепутали загрузчик с BIOS, который совершенно другой.

Когда ваш компьютер загружается, происходит следующее:

  1. Это делает проверки POST
  2. Управление передается в BIOS для выбора устройства для загрузки. Это то, что ОС не контролирует.
  3. Как только найдено устройство для загрузки, управление передается этому устройству.
  4. Устройство загружает загрузчик, что позволяет ему загружать ОС автоматически или под контролем пользователя.
  5. Контроль наконец передан ОС.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .