From owner-freebsd-users-jp@freebsd.org Tue Sep 20 02:25:56 2016 Return-Path: Delivered-To: freebsd-users-jp@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A5FCEBE1D1D for ; Tue, 20 Sep 2016 02:25:56 +0000 (UTC) (envelope-from maruyama@ism.ac.jp) Received: from amogha.ism.ac.jp (amogha.ism.ac.jp [133.58.120.10]) by mx1.freebsd.org (Postfix) with ESMTP id 08D2CB7D for ; Tue, 20 Sep 2016 02:25:54 +0000 (UTC) (envelope-from maruyama@ism.ac.jp) Received: from samanta.ism.ac.jp (amogha.ism.ac.jp [133.58.120.10]) by amogha.ism.ac.jp (8.14.5/8.14.5) with ESMTP id u8K2HiZX097553; Tue, 20 Sep 2016 11:17:44 +0900 (JST) (envelope-from maruyama@ism.ac.jp) Received: (from maruyama@localhost) by samanta.ism.ac.jp (8.15.2/8.15.2/Submit) id u8K2HhoT023368; Tue, 20 Sep 2016 11:17:43 +0900 (JST) (envelope-from maruyama@ism.ac.jp) X-Authentication-Warning: samanta.ism.ac.jp: maruyama set sender to maruyama@ism.ac.jp using -f From: maruyama@ism.ac.jp (=?iso-2022-jp?B?GyRCNF07M0Q+PjsbKEI=?=) To: freebsd-users-jp@freebsd.org Organization: =?iso-2022-jp?B?GyRCRX03Vz90TX04JjVmPWobKEI=?= Reply-To: maruyama@ism.ac.jp Date: Tue, 20 Sep 2016 11:17:43 +0900 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Subject: [FreeBSD-users-jp 95970] =?iso-2022-jp?b?RHVhbCBib290IG9uIGR5bmFib29rTjUxKBskQiQ9JE4bKEI0?= =?iso-2022-jp?b?IC0tIFVFRkkbJEIlVSUhITwlYCUmJSclIhsoQik=?= X-BeenThere: freebsd-users-jp@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion relevant to FreeBSD communities in Japan List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Sep 2016 02:25:56 -0000 統計数理研究所の丸山です。 Toshiba dynabookN51 上での Windows8.1 と PC-BSDの dual boot。 随分と時間が空いてしまいましたが、最後のトピックを書きます。 PC-BSD10.3を動かすことに一応は成功したものの、どうもこのUEFIファームウェ アは変、というかUEFIの規格から外れているように思います。 https://ubuntuforums.org/showthread.php?t=2147295 には次の記述があります。 Systems that only boot Windows from UEFI. Per UEFI standard you should be able to boot any entry in UEFI boot menu. But some vendors have modified UEFI code to only boot the Windows efi file. dynabookN51がまさにこれに該当するように思います。FreeBSDとは直接関係な い話題で申し訳ありませんが、この記事では私がそう確信するに至った証拠と いいますか、実験をいくつか紹介したいと思います。 使ったマシンの状況ですが、高速スタートアップを無効、システムの保護も無 効としてあり(例えば http://d.hatena.ne.jp/msll/20150527/1432708323 参 照)、ada0 にはbios-boot, efi, Windows用領域3つとPC-BSD10.3のインストー ラーが作ったfreebsd-zfs とfreebsd-swapがあります(他の記載は省略)。 partitionの番号が順序通りではありませんが、それは partiton 4の領域を縮 小してPC-BSDをインストールしたからです。 1 bios-boot (1.0M) 2 efi (100M) 3 ms-reserved (128M) 4 ms-basic-data (78G) 7 freebsd-zfs (100G) 8 freebsd-swap (2.0G) 5 ms-basic-data (50G) PC-BSD10.3のインストーラーは efiパーティションに \BOOT\BOOTX64.EFI を 作り、また bios-boot パーティションには gnu-grubを書き込んでいます。 色々な試行錯誤の末、現在のEFIブート構成データ(Windowsのコマンドプロン プト[管理者]で bcdedit /enum all としたときの出力)はこの記事の末尾のよ うになっています。 この状態で dynabookN51 の電源を入れますと 1. 「Windowsブートマネージャー」と題するラインモードのメニューが現れ、 Windows 8.1 Windows Recovery の二つアイテムが現れる。ここで Windows 8.1 を選択すればWindows8.1が 立ち上がるが、ESCキーを押すと 2. 画面が一度消えて、その後一瞬同じ「Windowsブートマネージャー」が表示さ れるがすぐに消えて 3. 「 >> Start PXE over IPv6. 」と表示されて、十数秒でタイムアウト 4. 「 >> Start PXE over IPv4. 」と表示されて、十数秒でタイムアウト 5. 何故かもう一度「 >> Start PXE over IPv4. 」と表示されて、十数秒でタイ ムアウト 6. gnu-grubのメニュー画面が表示され、PC-BSDが起動できる という経過をたどります。ネットワークの UTPケーブルを抜いた状態で電源を入 れると 3,4,5 は飛ばして 6に入ります。 この状態でいくつかの実験をします。(それぞれの実験終了後には一旦この状 態に戻してから次の実験を行いました。) 実験0. 電源投入時に F12 を数回押すと、 Boot Menu という画面が現れます。 メニューアイテムは USB HDD/SDD LAN の5個で、2番目の HDD/SDD を選ぶと1-6と似た経過を取りますが、2の後もう一度 1となり、その後 >> Start PXE over IPv6 PXE-E21: Remote boot canceled. と一瞬表示された後、4,5,6となります。 実験1. Windowsのコマンドプロンプト(管理者用)で bcdedit /set {bootmgr} displaybootmenu no とすると、bcdedit /enum all の出力における {bootmgr}のエントリの最後の 部分は timeout 0 displaybootmenu No となり、この状態では電源投入後メニューは表示されずに、ただちにWindows8.1 が起動されます。 実験2. bcdedit /set {bootmgr} timeout 3 として、bcdedit /enum all の出力における{bootmgr}のエントリの最後の部 分を timeout 3 displaybootmenu Yes としておきます。この場合は電源投入後にラインモードのメニューが表示され て、そのまま3秒経過するとWindows8.1が起動しますが、その前にESCを押せ ば、2〜6の経過をたどります。 実験3. bcdedit /deletevalue {bootmgr} displaybootmenu とすると bcdedit /enum all の出力における{bootmgr} のエントリで displaybootmenu で始まる行が表示されなくなります。これを使って最後の部 分を timeout 0 としておくと、電源投入後メニューは表示されずに、ただちにWindows8.1が起 動されます。(この状態が工場出荷値であったように思います。) 実験4. bcdedit /deletevalue {bootmgr} displaybootmenu bcdedit /set {bootmgr} timeout 3 として bcdedit /enum all の出力における {bootmgr} のエントリの displaybootmenu という行表示を消し、最後の部分を timeout 3 としておきます。この状態では電源投入後、画面には Windows 8.1 Windows Recovery Windows Recovery Environment の3つの青い四角形のアイコンが現れ、3秒のカウントダウンが始まります。 そのまま3秒経過するか、Windows8.1を選べば通常通りWindows8.1が起動され ます。ここでESCを押すなどの操作を色々試してみても gnu grub のメニュー に辿り着くことはできませんでした。 実験5. bcdedit /set {bootmgr} displayorder {e97bf818-4850-11e5-beab-ca77328079f8} /addlast とすると、電源投入後に1の画面で、Windows 8.1 と Windows Recovery の二 つメニューアイテムに加えてGnuGrub というアイテムが現れますが、これを選 んでも、0xc000007b のエラーコードを表示してそれ以上進めません。 実験6. bcdedit /set {bootmgr} displayorder {e97bf818-4850-11e5-beab-ca77328079f8} /addlast bcdedit /deletevalue {bootmgr} displaybootmenu bcdedit /set {bootmgr} timeout 3 とすると、電源投入後、実験4のときの3つの四角形アイコンに加えてGnuGrub いう四角形のアイコンが現れますが、このアイコンを選んでも実験5と同じ結 果になります。 このエラーコード 0xc000007b をグーグル検索してみると、多くの人が同じエ ラーコードに遭遇していることがわかりますが、私の状況にぴったり当てはま る記事は多くはありません。今は見つけられないのですが、その中に 「bootmgrから起動できるのはWindows系のアプリだけであって他のOSを起動す ることは無理」というものがありました。これが私の状況に一番良くあてはま るのだと思います。実際 http://d.hatena.ne.jp/msll/20150527/1432708323 http://qiita.com/takawata19/items/3d1fb96cfde4f1626e3c などを見ても FreeBSD のブートローダーに対応するエントリは {fwbootmgr} の displayorder に追加しているのであって、 {bootmgr}の displayorderで はありません。しかし私の状況では {fwbootmgr} の displayorder には {e97bf818-4850-11e5-beab-ca77328079f8} つまりdescription GnuGrub のエントリを入れてあるのに実験0でGnuGrubというアイテムが現れないのは 何故でしょう?奇々怪々です。 実験5,6 はもう一つ重要なことを意味していると思います。それは電源投入時 に現れる1の画面が fwbootmgr のメニュー画面ではなく、 bootmgr のメニュー 画面だ、という点です。 {fwbootmgr} のメニュー画面を表示、あるいは変えるにはどうしたら良いか? この点を理解すために更に次のような実験をしてみます。 実験7. bcdedit /set {fwbootmgr} displayorder {dc984317-4850-11e5-beab-ca77328079f8} /remove bcdedit /set {fwbootmgr} displayorder {dc984318-4850-11e5-beab-ca77328079f8} /remove とすると、{fwbootmgr} の displayorder のところは identifier {fwbootmgr} displayorder {bootmgr} {e97bf818-4850-11e5-beab-ca77328079f8} となります。この状態で電源を入れると1〜6には全く何の変化も見られません。 これは驚きというべきだと思いますが、それどころか、もう一度Windowsを起 動して見てみると、 displayorder {dc984317-4850-11e5-beab-ca77328079f8} {dc984318-4850-11e5-beab-ca77328079f8} と勝手に書き直されています。 実験8. bcdedit /set {fwbootmgr} displayorder {e97bf818-4850-11e5-beab-ca77328079f8} /remove bcdedit /delete {e97bf818-4850-11e5-beab-ca77328079f8} として gnu grubのエントリをブート構成情報から完全に消し去って電源を入れると、 1〜6が全く同じように進行します。 実験9. bcdedit /set {fwbootmgr} displaybootmenu yes とすると、 この操作を正しく終了しました。 と表示されて、一見正常に終了しますが、 bcdedit /enum all の出力には何 の変化も見られず、電源投入時の挙動1〜6にも全く変化がありません。 要するに {fwbootmgr} をどういじろうとも、何も変化は起こらないというこ とのようです。 以上の実験から、dynabookN51 は「Windows以外には使わせない」というメー カーの方針のもとでUEFIファームウェアが規格とは違った作りになっていて、 唯一の抜け道が 1 の画面でESCを押すことである、と私は結論した次第です。 なお、 System BIOS Version は 1.00 となっています。 以上です。 ================================================================ 以上の実験の前提としたEFIブート構成データ(Windowsのコマンドプロンプト [管理者]で bcdedit /enum all としたときの出力) ファームウェアのブート マネージャー -------------------------------- identifier {fwbootmgr} displayorder {bootmgr} {dc984317-4850-11e5-beab-ca77328079f8} {dc984318-4850-11e5-beab-ca77328079f8} {e97bf818-4850-11e5-beab-ca77328079f8} timeout 0 Windows ブート マネージャー -------------------------------- identifier {bootmgr} device partition=\Device\HarddiskVolume2 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale ja-JP inherit {globalsettings} bootdebug Yes default {current} resumeobject {dc984315-4850-11e5-beab-ca77328079f8} displayorder {current} {e97bf812-4850-11e5-beab-ca77328079f8} {e97bf811-4850-11e5-beab-ca77328079f8} toolsdisplayorder {memdiag} timeout 0 displaybootmenu yes Windows ブート マネージャー -------------------------------- identifier {e97bf818-4850-11e5-beab-ca77328079f8} device partition=\Device\HarddiskVolume2 path \EFI\BOOT\BOOTX64.EFI description GnuGrub locale ja-JP displaybootmenu Yes ファームウェア アプリケーション (101fffff -------------------------------- identifier {10d18537-533f-11e5-8268-806e6f6e6963} description UEFI: IP6 Realtek PCIe FE Family Controller ファームウェア アプリケーション (101fffff -------------------------------- identifier {10d18538-533f-11e5-8268-806e6f6e6963} description UEFI: IP4 Realtek PCIe FE Family Controller ファームウェア アプリケーション (101fffff -------------------------------- identifier {dc984317-4850-11e5-beab-ca77328079f8} description EFI Network ファームウェア アプリケーション (101fffff -------------------------------- identifier {dc984318-4850-11e5-beab-ca77328079f8} description EFI USB Device Windows ブート ローダー -------------------------------- identifier {current} device partition=C: path \Windows\system32\winload.efi description Windows 8.1 locale ja-JP inherit {bootloadersettings} recoverysequence {e97bf811-4850-11e5-beab-ca77328079f8} recoveryenabled Yes isolatedcontext Yes allowedinmemorysettings 0x15000075 osdevice partition=C: systemroot \Windows resumeobject {dc984315-4850-11e5-beab-ca77328079f8} nx OptIn bootmenupolicy Standard detecthal Yes Windows ブート ローダー -------------------------------- identifier {e97bf811-4850-11e5-beab-ca77328079f8} device ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{e97bf812-4850-11e5-beab-ca77328079f8} path \windows\system32\winload.efi description Windows Recovery Environment locale ja-jp inherit {bootloadersettings} displaymessage Recovery displaymessageoverride Recovery osdevice ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{e97bf812-4850-11e5-beab-ca77328079f8} systemroot \windows nx OptIn bootmenupolicy Standard winpe Yes 休止状態からの再開 -------------------------------- identifier {dc984315-4850-11e5-beab-ca77328079f8} device partition=C: path \Windows\system32\winresume.efi description Windows Resume Application locale ja-JP inherit {resumeloadersettings} recoverysequence {e97bf811-4850-11e5-beab-ca77328079f8} recoveryenabled Yes isolatedcontext Yes allowedinmemorysettings 0x15000075 filedevice partition=C: filepath \hiberfil.sys bootmenupolicy Standard debugoptionenabled No Windows メモリ テスター -------------------------------- identifier {memdiag} device partition=\Device\HarddiskVolume2 path \EFI\Microsoft\Boot\memtest.efi description Windows Memory Diagnostic locale ja-JP inherit {globalsettings} badmemoryaccess Yes EMS 設定 -------------------------------- identifier {emssettings} bootems No デバッガー設定 -------------------------------- identifier {dbgsettings} debugtype Serial debugport 1 baudrate 115200 RAM 不良 -------------------------------- identifier {badmemory} グローバル設定 -------------------------------- identifier {globalsettings} inherit {dbgsettings} {emssettings} {badmemory} ブート ローダー設定 -------------------------------- identifier {bootloadersettings} inherit {globalsettings} {hypervisorsettings} ハイパーバイザー設定 ------------------- identifier {hypervisorsettings} hypervisordebugtype Serial hypervisordebugport 1 hypervisorbaudrate 115200 再開ローダー設定 -------------------------------- identifier {resumeloadersettings} inherit {globalsettings} デバイス オプション -------------------------------- identifier {e97bf812-4850-11e5-beab-ca77328079f8} description Windows Recovery ramdisksdidevice unknown ramdisksdipath \Recovery\WindowsRE\boot.sdi -------- 丸山直昌@統計数理研究所