その他の特集(2011年) | |||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
||||||||||||||
|
||||||||||||||
検証人:塩田紳二 | ||||||||||||||
|
||||||||||||||
|
||||||||||||||
Intel製CPUを搭載したMacは、PC/ATをベースにした現在のPCと、CPU、チップセットをはじめとした多くのパーツが共通している。しかし、システムの起動にBIOSではなくEFI(Extensible Firmware Interface)を採用する点が大きく異なる。 EFIは、現在のBIOSに代わる新しいファームウェアとして設計され、すでにItanium(IA-64)のシステムで採用されている。また、次期WindowsであるWindows Vista 64bit版では、EFIを採用したシステムへの対応も予定されている。 |
||||||||||||||
|
||||||||||||||
EFIは、BIOSに代わる新しいシステムファームウェアとして設計されたもの。現在のBIOSは、IBM PCが開発されたときに作られたものがベースで、多少の拡張はあったものの、基本的には最初のBIOSと互換性を保っている。BIOSは、Basic Input/Output Systemの略で、本来は、OS登場以前に、アプリケーションに対してコンピュータの基本的な入出力ルーチンを提供するために作られたものだ。 IBM PCは、その当初こそROMを用いてOSとなるBASICを搭載していたが、その後、一般的には外部記憶装置からOSを読み込んで起動するようになった。このときに、OSの起動プログラムを読み込んで必要なメッセージを表示させたり、キーボードなどから読み取りなどを行なったりするプログラムとして搭載されたのがROM-BIOS。起動時のシステムテスト(POST)や各種基本ハードウェア(チップセット)の初期化や設定といった処理もになっている。 BIOSはROMとして固定されているため、とくに起動にかかわる新しいハードウェアデバイス(バスや外部記憶装置など)への対応が難しい。さらに長期間使われ続ける間にも互換性を維持し続けたため内部がかなり複雑化している。また、リアルモードで実行されるため、1MB以下のいわゆるコンベンショナル領域のみにメモリ割り当てが限定され、サイズを増やすことも不可能な状態なのだ。 EFI(図1)では、こうした問題を考慮し、最初から32bitモードで起動するよう設計されている。またハードウェアは、原則としてデバイスドライバを介して制御するようになり、かつHDD上にEFI専用のパーティションも作成可能になっている。いわば、EFIとはMS-DOSに近いミニOSのような構造と言えよう。 実際、Intelが公開しているツールには、「EFI Shell」と呼ばれるコマンドラインインターフェースのシェルプログラムが含まれており、コマンドなどを介した作業が可能だ。こうした構造となっているEFIでは、従来のBIOSの存在を前提として動作するOS向けにBIOSエミュレーションを行なうようなプログラムを開発することもできる。ちなみにi945/955以降のチップセットを採用するIntel製のマザーボードは、すでにEFIを採用し、BIOSをエミュレーションしている。 |
||||||||||||||
|
||||||||||||||
HDDの容量が増大すると、Big Drivesと呼ばれる問題(実際の容量以下しか認識されない)が発生することがある。通常、OSが起動する際に、ローダーと呼ばれるプログラムが動作して環境を整えた上で、OS自体が起動を開始する。OSが動き出せば、デバイスドライバを介して、どのようなハードウェアもアクセスできるが、その前段階にあるローダーでは、BIOSの提供するサービスに頼らねばハードウェアにアクセスできない。ここで、BIOSがいくつまでのセクタを扱えるかといった問題が発生する。Big Drivesは、BIOSが本来、ヘッド、シリンダ、セクタの三つのパラメータでHDD上の位置を指定していたために起きるが、これまでの問題は、BIOSの全面的な改修が不可能なこともあって、場当たり的な拡張しか行なえなかった。 もう一つ、BIOSに起因するHDD関連の問題にパーティションがある。BIOSはHDDの先頭にあるMBR(Master Boot Record)と呼ばれる領域から、最初にIPLプログラムというものを読み込んで実行する。このIPLプログラムが、各パーティションからOS起動用のローダーを必要に応じて読み込むことで、その後、OSが起動する仕組となっている。こうした関係であるため、BIOSはパーティションやMBRを管理できるようになっている必要がある。基本領域は四つまでというパーティションの制限は、BIOSが読み込むMBR上のパーティションテーブルに四つしかエントリーがなく、拡張できないのが理由なのだ。それ以上にしたければ、基本パーティションのうち一つを拡張パーティションとし、内部を論理パーティションに分割する必要がある。 こうした問題を解決するため、EFIでは、GUID Partition Table(GPT)と呼ばれる新しいパーティションテーブル構造(と言うかHDDの基本的なフォーマット)を定めている(図2)。従来のパーティションテーブル(俗にMBRフォーマットなどと呼ぶ)との互換性を保つため、先頭部分にはMBRが置かれているが、その直後にGUID(Global Unique ID。重複しないように割り当てた128bitのID)でパーティションタイプを表現するテーブルが並ぶ。このGPTは、HDDの最後にも同じものが書き込まれ、ディスクエラーに備えている。GPT自体は、エラーチェックが可能なようにMBR直後のGPTヘッダ部分にCRC(Cyclic Redundancy Check)値が書き込まれており、整合性をチェックできる。 各エントリーは128byte(512byteの1セクタに4エントリー格納できる)で、パーティションのタイプ(GUID)、固有GUID、開始、終了位置を表わすLBA(Logical Block Addressing)、属性などが記述してある。 MBRのパーティションテーブルは、HDD全体が1パーティションとなるよう設定され、パーティションタイプとしてGPTフォーマットを表わす0xEEが設定される。これは、GPTを理解しないHDDユーティリティなどが、未フォーマット状態と誤認するのを防止するためだ。なお、このタイプのHDDをWindowsのディスクユーティリティなどから見ると「GPT保護パーティション」と表示される。 |
||||||||||||||
|
||||||||||||||
EFIを採用したシステムでは、EFIの初期化が終わった後、EFIが提供するAPIで動作するブートマネージャ(Windowsなどと同じPEフォーマットを採用)が、各パーティションのブートプログラムを起動、その後OSが立ち上がる仕組だ(図3)。Intel Macの場合、Mac OSのローダープログラムは/System/Library/CoreServices/にある「boot.efi」である。 Boot Campに含まれるユーティリティの「Boot Campアシスタント」は、パーティションを作成し、Windows XPのインストーラを起動するところまで行なうが、ここでは、GPT形式のHDD内のパーティションに対して、XPがパーティションを認識できるようにMBRにあるパーティションテーブルをセットするのだと思われる。 Windows XPの起動時には、MBRに書き込まれたIPLプログラムが、システムボリュームのルートにあるNTLDRを起動する。NTLDRは、32bitモードへ移行し、次にWindows XPのカーネルファイルをメモリに読み込んで実行させる。このときには、Windowsの起動ディレクトリの位置が指定されたBoot.iniを参照している。Boot CampでWindows XPをインストールした場合、multi(0)disk(0)rdisk(0)partition(3)\WINDOWSが指定されている。簡単に言えば、最初のHDD内の第3パーティションにある\WINDOWSから起動せよという内容だ。 NTLDRでは、内部に組み込まれたディスクアクセスドライバを使ってディスクアクセスを行なう。ここを見る限り、NTLDRは、内蔵のIDE/ATAインターフェースを介して起動を行なっている。つまり、Boot Campを使ってNTLDRが実行される時点では、BIOSと同等の環境が提供されていると考えられる。 実際、Boot Campのインストール前、HDDのMBR領域には何も書き込まれておらず、パーティションテーブル0はHDD全体が0xEE(GPT)であるように設定されていた。Boot Campを使ってWindowsをインストールした後にはIPLが書き込まれ、パーティションテーブル0、1、2は、それぞれ0xEE、0xAF(Mac)、0x07(Windows XP)に変更される。 Windows XPは、0xEEを「GPT保護パーティション」として認識する。ただし、パーティションの変更などを行なうことはできない(現状、Windows Server 2003とWindows XP x64 EditionだけがGPT形式を扱える)。Windows XPは、Mac OSの領域をほかのOSの領域として認識するため、Boot Campが作成した第3パーティションのみにOSのインストールが可能だ。インストール自体は、XPのインストーラがそのまま実行する。このときはGUIがない状態だが、実際にはWindows XPが起動している。基本的な起動の手順は、通常のXPと同じで、MBRのIPLがNTLDRを起動し、NTLDRがXPのカーネル(NTOSKRNL.EXE)を起動している。 NTLDR、NTDETECT.COMともに32bitモードで動作するので、BIOSの機能の中でNTLDR/NTDETECT.COMが利用するものは限られており、BIOSすべての機能を実装する必要はない。参照されるメモリ領域を設定し、いくつかのINTベクタを設定するだけでよいはずだ。 Intel Macでは、EFIからMac OSのブートセレクタが最初に起動される。ここではまだEFIの内部で実行されており、Mac OSパーティションが選択されたとき初めてMac OSのロードが開始される。ブートセレクタでWindows XPパーティションを選択した場合には、一旦BIOS互換環境を作成してからNTLDRを呼び出すのだと思われる。NTLDRが動いてしまえば、内部にあるディスクドライバが動くので、EFIがこれ以上めんどうを見る必要はない。後は、通常と同じようにXPの起動シーケンスが開始される。 |
||||||||||||||
|
||||||||||||||
さらにEFIを詳しく追究したい人のためにEFI Shellの動作方法を解説しよう。今回の記事も、この方法でEFI Shellを起動し、さまざまな解析・調査を行なった。 Mac OSパーティション上のBoot.efiを書き換えるのが一番簡単だが、これではMac OSが起動しなくなる。IntelのWebサイトではEFIのサンプル実装のソースコードを公開しており、これを使ったIntel Mac用のEFI Shell起動ツール「rEFIt」が開発されている。ブートメニューとして起動するほか、EFI Shellの起動もできる。 インストールもできるが、提供されているCDブート用のISOイメージを用いれば、Mac OSのパーティションに手を付ける必要がないため安心だ。これを挿入して起動時にOptionキーを押し続け、Bootメニューを表示させると、Mac OSやWindowsと並んでrEFItのアイコンが表示される。これを選べば、MS-DOSに似たコマンドラインのインターフェースで操作するEFI Shell環境が表示される。なお、EFIコマンドのリファレンスは、IntelのサイトからダウンロードできるEFIのサンプル実装に含まれているので参照してほしい。 |
||||||||||||||
rEFItのCDイメージから起動した後のブートセレクタ。Mac/Windowsの起動のほか、EFI Shellのブートメニューがある | ||||||||||||||
EFI Shellの起動画面。DOSライクなコマンドラインインターフェースを備える | ||||||||||||||
dblkコマンドで内蔵HDDのパーティションテーブルを表示させてみたところ | ||||||||||||||
|
||||||||||||||
|
発売日:12月28日
特別定価:2,310円
発売日:2022/11/29
販売価格:1,800円+税
発売日:2019/05/29
販売価格:1,780円+税
発売日:2019/03/25
販売価格:1,380円+税
発売日:2018/02/28
販売価格:980円+税
発売日:2017/03/17
販売価格:1,680円+税
発売日:2016/09/23
販売価格:2,400円+税
発売日:2016/03/29
販売価格:1,480円+税
発売日:2015/12/10
販売価格:1,280円+税
発売日:2015/06/29
販売価格:2,500円+税
発売日:2015/06/29
販売価格:2,500円+税
発売日:2015/02/27
販売価格:980円+税
発売日:2014/12/05
販売価格:1,280円+税
発売日:2011/12/22
販売価格:980円+税
アンケートにお答え頂くには「CLUB IMPRESS」への登録が必要です。
*プレゼントの対象は「DOS/V POWER REPORT最新号購入者」のみとなります。
ユーザー登録から アンケートページへ進んでください