Como um sistema operacional pode alterar a ordem de inicialização?

2

Em uma máquina que usa UEFI e GRUB para inicializar, testemunhei o Windows decidir alterar a ordem de inicialização. Eu pensei que a ordem de inicialização era apenas o negócio de mim e minha placa-mãe e simplesmente inexistente aos olhos de um gerenciador de inicialização, um sistema operacional e tudo em cima. Como um SO é capaz e pode mudar isso?

Perguntas sobre esse comportamento foram feitas antes.

O Windows 8 altera a ordem de inicialização

Esta pergunta é especificamente perguntando "Como isso é possível?" em vez de "Por que isso acontece?", "Isso deve acontecer?" ou "Posso ativar / desativar isso?".

    
por Praxeolitic 05.07.2015 / 02:10

2 respostas

3

Bem, o sistema operacional é o que instala o gerenciador de inicialização em primeiro lugar, então claramente ele tem algum controle sobre ele.

Firmware UEFI tem um gerenciador de inicialização integrado, que armazena as opções de menu e outros parâmetros como variáveis EFI como Boot0001 , BootOrder , BootNext .

Eles são armazenados na mesma NVRAM que outras configurações de firmware - na verdade, muitas configurações de firmware também são expostas como variáveis EFI - e os sistemas operacionais podem lê-los / gravá-los chamando o código EFI. (É semelhante a chamar o BIOS por meio de interrupções antigas, exceto que a interface UEFI é um pouco melhor definida.)

# 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                                             |..              |

Essa lista geralmente contém os carregadores de inicialização UEFI e os discos MBR "modo de compatibilidade de BIOS".

Nos sistemas da BIOS, não há acesso direto a essa configuração. No entanto, o sistema operacional pode sobrescrever o setor de inicialização existente com o seu próprio, e na verdade quase sempre faz porque não há configuração; por exemplo. A instalação do Windows sempre escreverá no setor de inicialização do Windows .

Nota: As "variáveis EFI" não são realmente específicas para a EFI - uma técnica similar também existia em sistemas ARC nos quais o Windows NT foi originalmente desenvolvido; o gerenciador de inicialização NTLDR e o arquivo "boot.ini" usado pelo Windows são, de certa forma, apenas emulação do que a ARC teria fornecido nativamente.

    
por 05.07.2015 / 12:24
-2

É possível porque o sistema operacional tem controle sobre o gerenciador de inicialização. Você tem o bootloader confundido com o BIOS, que é totalmente diferente.

Quando o computador é inicializado, acontece o seguinte:

  1. Ele faz as verificações do POST
  2. O controle é passado para o BIOS para escolher qual dispositivo para inicializar. Isto é o que o SO não tem controle.
  3. Uma vez encontrado um dispositivo para inicializar, o controle é passado para esse dispositivo.
  4. O dispositivo carrega o gerenciador de inicialização que permite inicializar um sistema operacional automaticamente ou sob controle do usuário.
  5. O controle finalmente é passado para o sistema operacional.

Geralmente, o gerenciador de inicialização está na seção MBR (os primeiros poucos setores) do disco rígido e geralmente faz referência a arquivos que são acessíveis ao próprio SO, assim o SO pode alterar a ordem de inicialização sempre quer.

    
por 05.07.2015 / 02:18