web-dev-qa-db-ja.com

OSはどのように起動順序を変更できますか?

UEFIとGRUBを使用して起動するマシンで、Windowsが起動順序を変更することを決定するのを目撃しました。起動順序は私と私のマザーボードの仕事であり、単に存在しないと思いましたブートローダー、OS、その他すべての目。OSはどのようにしてこれを変更できるのでしょうか。

この動作に関する質問は以前に行われています。

Windows 8は起動順序を変更します

この質問は、特に「これはどのように可能ですか?」と尋ねています。 「なぜこれが発生するのですか?」、「これが発生する必要がありますか?」、または「これを有効/無効にできますか?」ではなく。

2
Praxeolitic

そもそもOSはinstallsブートローダーなので、明らかにそれをある程度制御できます。

UEFIファームウェアには統合ブートマネージャーがあり、メニュー選択とその他のパラメーターをEFI変数としてBoot0001BootOrderBootNextなどとして保存します。

これらは他のファームウェア設定と同じ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がネイティブに提供するものの エミュレーション という意味です。

3
user1686