« ST:The Exhibition(CNET-JPより) | トップページ | 雑誌(タイムコレクション1月)&こみっく(とりぱん、70'愛ライフ)購入 »

Ubuntu grub2のWindows領域の表示名あたり

 Linuxのディストリビューションの1つ、ubuntuで、2009/10にバージョン9.10が出てきました。このバージョンから、起動に用いている仕組みがgrubからgrub2に変わり、いろいろ、いろいろとあるんですが・・・その中でも、メニューの構成方法が大きく変わっています。
・grub-legacy(以前のgrub。grub1と呼ばれることも。)
 menu.lstというファイルで管理。このファイル内にマーカーとなる行と、コメントの形式で自動生成する項目へのオプションの指定が存在していて、それにより、ubuntuがkernelをアップデートした際などにエントリを書き換える。ユーザ固有のメニューはマーカーの外側に記述する。ubuntu自身以外のOSはインストール時に自動的に作れる以外は、基本的にユーザが指定する。ファイル内のマーカーが認識できなくなると、ファイルを総入れ替えされちゃう。
・grub2
 各ルールファイルと、オプションを指定する為のファイルで管理。最終的にはgrub.cfgというファイルが生成されるが、このファイルはユーザは変更しない(常に生成されなおされる)。ユーザ固有のメニューはルールファイルに追加する形。既存のルールファイルからの生成の制御はオプションで可能。ubuntu以外についても、見つかった全てのHDDとパーティションについて、起動可能っぽいところを、それらしい名称で自動登録する。

この自動登録の際、MS-Windowsの場合には、バージョンも表示するんですが・・・名称が確実では無い(マルチブートやアップグレードやアンインストールしたとき)という問題が。これは、MS-Windows側の構成のされかたに問題があるといえばあるんですが。まず、MS-Windowsの起動まわりから順に説明。
※IPLは、Microsoftのサイトでは「Master Boot Code」と呼ばれる分部になります。MBCだと、MBRと互換が似ているので、この記事ではIPLとしています(IPLは他の用途でも用いられることが多いですが、この記事の中では、IPLをPBRに設定されてOSとして最初に動く分部として定義します。なんか、他に良い語があれば指摘してもらえると)
MS系OSは、シングルブートでは、こんなかんじに起動されます。これは、(起動優先順位が1番高いHDDデバイス内の唯一の)Activeな基本パーティションになっているはずです。
・95/98をインストールすると、IO.SYS+MSDOS.SYSで構成される。
 95/98のカーネル(IO.SYS)の読み込みは、IPLが直接行う。
 bootsectでIPLを戻すことは出来ない(95/98のSYSコマンドを使用する)
 MSDOS.SYSがMS-DOS(の6.3まで)と異なり、テキストの設定ファイルであることに注意。
・NTをインストールすると、NTLDR+boot.iniで構成される。
 NTのカーネルの読み込みはntdetect.comが用いられる。
 bootsectで指定するIPLはNTLDR用なのでNT52。
 なお、NTのNTLDRは、NTFS5を解しないので、2000以降の起動の際は注意。
・2000/XPをインストールすると、NTLDR+boot.iniで構成される。
 2000/XPのカーネルの読み込みはntdetect.comが用いられる。
 bootsectで指定するIPLはNTLDR用なのでNT52。
・WindowsVista/7をインストールすると、bootmgr+BCDで構成される。
 Vista/7のカーネルの読み込みはwinload.exeが用いられる。
 bootsectで指定するIPLはbootmgr用なのでNT60。


ややこしいのは、さらにMS系OSをインストールしてデュアルブートしている場合(後ろの方は失敗しているケースですが)
・95/98系にさらに95/98は・・・試したことが無いので不明。IPLはIO.SYS用。
・NTLDR系にさらにNTLDR系を入れると、単純にboot.iniのエントリが増える。IPLはNTLDR用。
・bootmgr系にさらにbootmgr系を入れると、単純にBCDのエントリが増える。IPLはbootmgr用。
・95/95系にさらにNTLDR系を入れると、95/98のIPLがbootsect.dosというファイルに書き出され、NTLDRからそのファイルを用いるエントリが増える(2段になる)。IPLはNTLDR用。
・95/95系にさらにbootmgr系を入れると、95/98のIPLがbootsect.dosというファイルに書き出され、bootmgrからそのファイルを用いるエントリが増える(2段になる)。IPLはbootmgr用。
・NTLDR系にさらに95/98系を入れると、おそらく、95/98系のOSのインストーラはNTLDRを知らない為、IPLがIO.SYS用に置き換えられてしまい、NTLDRは呼び出されなくなる。
・NTLDR系にさらにbootmgr系をいれると、BCDにNTLDRを呼び出すエントリが作成され、ブートローダが2段になる。IPLはbootmgr用。
・bootmgr系にさらに95/98系を入れると、おそらく、95/98系のOSのインストーラはbootmgrを知らない為、IPLがIO.SYS用に置き換えられてしまい、bootmgrは呼び出されなくなる。
・bootmgr系にさらにNTLDR系を入れると、NTLDRを用いるOSのインストーラはbootmgrを知らない為、IPLがNTLDR用に置き換えられてしまい、bootmgrは呼び出されなくなる。

※ブートローダ(OSの選択画面まで)は、あくまでも、(起動優先順位が1番高いHDDデバイスの)Activeな基本パーティションにインストールされることに注意。インストールの際に選んだパーティションではありません。

grub2では、以下のように判定している模様。あくまでも、パーティション単位で判定されます。
・bootmgrがあり、bootディレクトリがあり、その中にbcdがあると、bootmgr系と判断。
 さらに、見つけたBCDの中にUnicodeで"Windows 7"の文字があると、タイトルを"Windows 7 loader"とする。
 もし、見つけたBCDの中にUnicodeで"Windows 7"の文字がないと、タイトルを"Windows Vista loader"とする。
・NTLDRがあり、ntdetect.comがあると、NTLDR系と判断。
 さらに、boot.iniの各行を解析して、有効な起動が1行しかないなら、default行のオプションを、default行のタイトルでをもってくる。default行のタイトルが使えない(非ASCII文字がある)場合は、タイトルは"Windows NT/2000/XP"とする。
 有効な起動が複数ある場合、"Windows NT/2000/XP loader"と判断(上記とはloaderの付く/付かないに注意)
・dosがあると、タイトルを"MSD-OS 5.x/6.x/Win3.1"とする。
・windowsがあり、その中にwin.comがあると、タイトルを"Windows 95/98/Me"とする。
・どれもちがったら、外れ。

上から順に判定する為、マルチブート環境において複数のファイルやフォルダがある場合には、より上にあるものが表示に用いられる。後から入れたOSのアンインストール(インストールしたパーティションの削除とか)等が無い限り、正しくなっているはず。

grub自身は、MS系のOSについて、個々のOSが起動できるわけではなく、IPLにchainロードする形になるので、明確な場合を除くと"loader"と表記するようです。また、どれ(IO.SYS/NTLDR/bootmgr)を呼び出すIPLなのか というところは見てないので、後から古いバージョンを入れたり、1度他のパーティションに入れた新しいバージョンを消した(そしてIPLを戻した)場合、より優先順位の高いゴミが残ることになり、正しくない情報になる可能性があります。これは、使わないファイルや使えない起動エントリのゴミ掃除すれば誤表示は直るはず。
# 誤表示されるのは、ケースとしては稀かと思うのと、より正確にするには結構な手間が掛かるので、落としどころとしては無難なところ・・・だと思います。はい(これ以上は、IPLの中身を見た上でBCDの中身やboot.iniの中の記述が本当に起動可能な領域を指しているのかどうかも見ないと判らない・・・)。あ、無理せず、「Windows NT/2000/XP Loader」と「Windows Vista/7 Loader」にしちゃえばIPLだけでよいのか・・・

|

« ST:The Exhibition(CNET-JPより) | トップページ | 雑誌(タイムコレクション1月)&こみっく(とりぱん、70'愛ライフ)購入 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Ubuntu grub2のWindows領域の表示名あたり:

« ST:The Exhibition(CNET-JPより) | トップページ | 雑誌(タイムコレクション1月)&こみっく(とりぱん、70'愛ライフ)購入 »