UEFIとGRUBを使用して起動するマシンで、Windowsが起動順序を変更することを決定するのを目撃しました。起動順序は私と私のマザーボードの仕事であり、単に存在しないと思いましたブートローダー、OS、その他すべての目。OSはどのようにしてこれを変更できるのでしょうか。
この動作に関する質問は以前に行われています。
この質問は、特に「これはどのように可能ですか?」と尋ねています。 「なぜこれが発生するのですか?」、「これが発生する必要がありますか?」、または「これを有効/無効にできますか?」ではなく。
そもそもOSはinstallsブートローダーなので、明らかにそれをある程度制御できます。
UEFIファームウェアには統合ブートマネージャーがあり、メニュー選択とその他のパラメーターをEFI変数としてBoot0001
、BootOrder
、BootNext
などとして保存します。
これらは他のファームウェア設定と同じNVRAMに保存され、実際、多くのファームウェア設定はEFI変数としても公開され、オペレーティングシステムはEFIコードを呼び出すことでそれらを読み取り/書き込みできます。 (これは、UEFIインターフェイスがいくらか適切に定義されていることを除いて、古いスタイルの割り込みを介してBIOSを呼び出すのと似ています。)
#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 タイムアウト:2秒 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 *ハードドライブBBS(HD ,、 0x0)P0:ST9640320AS。 Boot0006 * CD/DVDドライブBBS(CDROM , 0x0)P1:SlimtypeDVD ADS8A5SH。 #efibootmgr --bootnext 0003 BootNext:0003 BootCurrent:0004 タイムアウト:2秒 BootOrder:0004,0003,0005,0006 ... # efivar --print --name 8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0004 GUID:8be4df61-93ca-11d2-aa0d-00e098032b8c 名前: "Boot0004" 属性: 不揮発性 ブートサービスアクセス ランタイムサービスアクセス 値: 00000000 01 00 00 00 72 00 4c 00 69 00 6e 00 75 00 78 00 | .... rLinux | 00000010 20 00 42 00 6f 00 6f 00 74 00 20 00 4d 00 61 00 | 。ブート。 .Ma | 00000020 6e 00 61 00 67 00 65 00 72 00 00 00 04 01 2a 00 | nager .... *。| 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。\。EF | 00000060 49 00 5c 00 67 00 75 00 6d 00 6d 00 69 00 62 00 | I。\。gummib | 00000070 6f 00 6f 00 74 00 5c 00 67 00 75 00 6d 00 6d 00 | oot\.gumm | 00000080 69 00 62 00 6f 00 6f 00 74 00 78 00 36 00 34 00 | ibootx6.4。| 00000090 2e 00 65 00 66 00 69 00 00 00 7f ff 04 00 | ..efi ...... | #efivar --print --name 8be4df61-93ca-11d2-aa0d-00e098032b8c-BootNext GUID: 8be4df61-93ca-11d2-aa0d-00e098032b8c 名前: "BootNext" 属性: 不揮発性 ブートサービスアクセス ランタイムサービスアクセス 値: 00000000 0300 | .. |
このリストには、多くの場合、UEFIブートローダーと「BIOS互換モード」MBRディスクの両方が含まれています。
BIOSシステムでは、この構成に直接アクセスすることはできません。ただし、OSはもちろん、既存のブートセクターを独自のもので上書きすることができ、実際、ほとんどの場合、because構成がありません。例えばWindowsのインストール 常にWindowsブートセクタを書き込みます 。
補足:「EFI変数」は実際にはEFIに固有のものではありません。同様の手法が、Windows NTが最初に開発された ARCシステム にも存在していました。 Windowsで使用されるNTLDRブートローダーと「boot.ini」ファイルは、ARCがネイティブに提供するものの エミュレーション という意味です。