ページ

2014-12-08

Linux/WindowsがUEFIでブートしているか調べる

この記事は、UEFI Advent Calendar 2014の記事です。ライトですが書けそうなので書きます。
---

Linuxの場合

Linuxの場合は、/sys/firmware/efiの存在を確認する(Ubuntu 14.04で確認)。
$ ls -al /sys/firmware/efi
total 0
drwxr-xr-x  4 root root    0 Dec  2 23:54 .
drwxr-xr-x  5 root root    0 Dec  2 23:54 ..
drwxr-xr-x  2 root root    0 Dec  2 23:54 efivars
-r--------  1 root root 4096 Dec  2 23:54 systab
drwxr-xr-x 27 root root    0 Dec  2 23:55 vars

Macの場合は違うことがあるようだが、未検証。詳しくはArch Wikiをどうぞ。

Windows8 の場合

GUIで調べる

Windows8以降の場合、コントロールパネル>管理ツール>システム情報の「システムの要約」に「BIOSモード」という項目があり、これが「UEFI」か「レガシ」かで判断することが可能。



コマンドラインで調べる

PowerShellの「Get-SecureBootUEFI」コマンドレットの結果を見ることで確認できる(要管理者権限)

BIOSの場合、サポートされていない旨が表示される:
PS C:> Get-SecureBootUEFI -Name SetupMode
Get-SecureBootUEFI : このプラットフォームではサポートされていないコマンドレット: 0xC0000002
発生場所 行:1 文字:1
+ Get-SecureBootUEFI -Name SetupMode
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotImplemented: (Microsoft.Secur...BootUefiCommand:GetSecureBootUefiCommand) [Get-SecureBootUEFI], PlatformNotSupportedException
+ FullyQualifiedErrorId : GetFWVarFailed,Microsoft.SecureBoot.Commands.GetSecureBootUefiCommand

UEFIの場合、変数の値に関するメッセージ、あるいは値そのものが表示される:
(値が定義されていない場合)
PS C:> Get-SecureBootUEFI -Name SecureBoot
Get-SecureBootUEFI : 変数は現在定義されていません: 0xC0000100
発生場所 行:1 文字:1
+ Get-SecureBootUEFI -Name SecureBoot
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ResourceUnavailable: (Microsoft.Secur...BootUefiCommand:GetSecureBootUefiCommand) [Get-SecureBootUEFI], StatusException
+ FullyQualifiedErrorId : GetFWVarFailed,Microsoft.SecureBoot.Commands.GetSecureBootUefiCommand

(値が定義されている場合)
PS C:> Get-SecureBootUEFI -Name SetupMode

Name                                    Bytes                                   Attributes
----                                    -----                                   ----------
SetupMode                               {0}                                     BOOTSERVICE ACCESS...

Windows7の場合

いまどきWindows7で調べるか、という感じがするのであまり調べてないが、コントロールパネル>管理ツール>システム情報も、Get-SecureBootUEFIもないので、別の方法を使う必要がある。

次のいずれかの方法を使って、Windows が正しいファームウェア モードでインストールされたことを確かめる
に記述されている「GetFirmwareEnvironmentVariable」関数を呼ぶPowerShellスクリプトがScript Centerにある。

Determine UEFI or Legacy BIOS from PowerShell (Three methods)


bcdeditを実行して、ブートローダーのpathに.efiのファイルがあるかどうか確認する方法も恐らく使える。
(Windows7/BIOS)
C:\>bcdedit | find "path"
path                    \Windows\system32\winload.exe

(以下はWindows8.1/UEFIの出力だが、似たような感じになるのではないかと)
C:\2>bcdedit | find "path"
path                    \EFI\Microsoft\Boot\bootmgfw.efi
path                    \Windows\system32\winload.efi

なお、Webで検索すると、パーティションテーブルがGPTかどうかを確認する方法がよく見つかるが、WindowsでもGPT + BIOSができるようなので、あまり正確でないのでは?と思うが未検証。
Windows 7: Boot Windows 7/8 from GPT on BIOS system : No hybrid MBRs or DUET!




0 件のコメント:

コメントを投稿