2014年1月23日木曜日

UEFIブートについて調べてみました

Windows8を使っていると、ちょっとしたことでブートできなくなることがちょいちょいありましたので、この際UEFIブートについて調べてみました。結論としては、
やっぱりよく分からない
ということなのですが、分かったことだけでも備忘録として残しておこうかと思います。

事の始まりは、いまこれを書いているThinkpad Edge E430がUEFIブートではなく、BIOSブートになっていることです。せっかくだから、UEFIブートにしようと思って調べてみますと、再インストールしなくてもBIOSブートからUEFIブートに変更する方法があるそうではないですか!さっそく試してみたくなりました。

ここでやろうとしていることをまとめてみます。間違っている可能性も大ですが・・・。

  • 従来のMBRパーティションに、GPTパーティション情報を追加する。
  • EFIブートファイルを置くパーティションを作る。
  • EFIブート用のファイルを作成する。
  • BCDを正しく設定して、Windowsを起動できるようにする。
だいたい、以上のようなことをやっているようです。
  • 従来のMBRパーティションに、GPTパーティション情報を追加する。

    MBRとGPTは共存できるようです。
    MBRパーティション情報は、従来の方法でディスクのセクタ0に置かれている。一方、GPTパーティション情報はセクタ1以降に置かれている。
    gptgenというツールで、MBRパーティション情報からGPTパーティション情報を構築するようです。

  • EFIブートファイルを置くパーティションを作る。

    diskpartコマンドを使って操作します。UEFIブートでは、「EFIシステムパーティション」というパーティションタイプのパーティションから起動することになっているようです。
    パーティションタイプがこの特別なタイプですが、ファイルシステムとしては普通のFAT32です。つまり、UEFIファームウェアはFAT32を直接認識してファイル/ディレクトリにアクセスできるようになったようです。以前のMBRブートでは、単にセクタ0の内容を読んで所定のアドレスに飛ぶだけだったことを考えると、かなり柔軟性・拡張性が出たと思います。

  • EFIブート用のファイルを生成する。

    bcdbootコマンドを使うと、BIOS/UEFIブート用のファイルを作成できるようです。これにより、先に作ったEFIシステムパーティションに、EFIブート用のファイル(\EFI\Boot\bootx64.efi)を作成します。推測ですが、BIOSブートのときはMBR(セクタ0)の内容をメモリに読んで+1Eオフセットにジャンプしていたのに代わって、UEFIブートではこのファイル(ファイル自体は普通のexeと同じ形式?)を呼んでそれを実行することになった、と理解しています。
    先のdiskpartコマンドとこのbcdbootコマンドを使うために、Windows8の起動ディスクかシステム修復ディスクが必要となります。

  • BCDを正しく設定して、Windowsを起動できるようにする。

    先のbcdbootコマンドを使う段階でブートするWindowsの場所も教えますので、BCDの情報も適宜作成・更新されるようです。
BIOSブートからUEFIブートに変更する具体的な操作については、こちらをご覧ください。

こんな解釈で合っているのかなぁ。間違いがあれば、指摘していただけると幸いです。

で、結局良くわからなかったのは・・・
  • UEFIブートにすると、なぜブートが速くなる(と言われている)のか?
  • UEFIブートにすると、なぜセキュアなブート方法が実現できるのか?
という点です。
前者については、ThinkPad Edge E430ではBIOSブートでも十分速かったです。いわゆる「BIOS設定」画面に入るのに、電源ボタンを押してからキーボードを連打してようやく入れるくらいです。
後者については、結局はEFIシステムパーティションの内容を勝手に書き換えられたら、意図しない方法でブートされてしまうのでは?と思うのですが。もしかし、UEFIファームウェアと連携して、ダイジェストでも保存していて、ダイジェストが合わないブートファイルは読まないようになっているのでしょうかね。


0 件のコメント:

コメントを投稿