勃てよ、国民!

下ネタあり、閲覧注意!

【EasyBCD】マルチブート環境の構築方法

備忘録。NeoSmart Technologies社の「EasyBCD」を使用したマルチブート環境の構築メモ。XP以前はboot.iniを弄るだけで、ブート環境を制御できましたが、Vista以降は変更されてbcdeditというコマンドラインツールでBCDストアを制御する必要があり、これは結構面倒です。bcdeditのフロントエンド+その他諸々のブート制御オプション機能を兼ね備えているのが、「EasyBCD」です。

neosmart.net

 

最新はバージョン2.4です。個人利用は無料。日本語化のパッチもあるようですが、難しい英語表記はないので特に日本語化する必要もありません。

 


〈目次〉


 

 

1. <例示>今回のマルチブート環境

今回の構築環境は以下のようになります。

 ・一番目のハードディスク

 OS:Windows7  EasyBCDインストール済み

・二番目のハードディスク(第一基本パーティション

 OS:RemixOS  Grub2を同じパーティションにインストール

 デバイス割当名:/dev/sdb1

・二番目のハードディスク(第ニ基本パーティション

 OS:Ubuntu20LTS  Grub2を同じパーティションにインストール

 デバイス割当名:/dev/sdb2

一番目のディスクには普通にWindowsをインストールし、EasyBCDの実行環境とします。二番目以降のディスクに追加となるOSをインストールしていきます。EFIパーティションは特に必要なく、MBRかGPTか、内蔵か外付けか、といった形態は問いません。今回の環境では2番目のディスクはMBR、内蔵です。肝となるのは、「OSをインストールしたパーティションと同じ個所にGrub等のブートローダをインストールする」ことです。ここを間違えると、最悪Windowsが立ち上がらなくなるといった悲惨な結果が待っています。

 

2. EasyBCDの設定

他OSをインストールしただけでは、再起動してもWindowsが立ち上がるだけです。追加インストールしたOSを立ち上げるためには、EasyBCDでの設定が必要になります。

EasyBCDはbcdeditコマンドのフロントエンドとして機能するので、基本操作はWindowsのブートメニューに他OSのエントリを追加していく形になります。Grubを使用して起動するOSならばほぼ確実に対応しています。

以下、Windows7で設定していますが、8でも10でも変わりません。

f:id:self_fella:20210222110052p:plain

EasyBCDを立ち上げ、「Add New Entry」→「NeoGrub」タブで「Install」ボタンを押下。

f:id:self_fella:20210222110523p:plain

すると、Cドライブ直下にNSTフォルダが作られ、「menu.lst」「NeoGrub.mbr」の2つのファイルが作られます。「NeoGrub.mbr」はEasyBCD自体が用意したGrubブートローダ―、「menu.lst」はNeoGrubがOSを選択するための設定メニューです。「menu.lst」は手作業で編集する必要があるので、後述。

f:id:self_fella:20210222111139p:plain

「Edit Boot Menu」を押すと、Windowsの下に先ほどインストールした「NeoGrub」が追加されています。「NeoGrub Bootloader」というのがWindowsブートマネージャーで表示される名前になるので、必要であればリネイムし「Save Settings」を押します。

f:id:self_fella:20210222111902p:plain

「View Settings」表示すると、2番目のエントリとしてNeoGrubが指定されていることが分かります。ブートローダとして、NSTフォルダの「NeoGrub.mbr」を示しています。因みに上記情報はWindowsレジストリに格納されており、図のBCD ID(赤塗りつぶし部分)で検索をかければ、表示されている情報がそのまま格納されています。

 

3. menu.lstの編集

次に「menu.lst」を編集します。このファイルに実際に起動させるOSのエントリを記述していきます。書式については公式Wikiに説明があります。

https://neosmart.net/wiki/easybcd/neogrub/linux/

以下が、例示環境での設定です。

# NeoSmart NeoGrub Bootloader Configuration File
#
# This is the NeoGrub configuration file, and should be located at C:NSTmenu.lst
# Please see the EasyBCD Documentation for information on how to create/modify entries:
# http://neosmart.net/wiki/display/EBCD/

default 0
timeout 10

title RemixOS
root (hd1,0)
find --set-root /RemixOS/kernel
kernel /RemixOS/kernel root=/dev/ram0 SERIAL=random logo.showlogo=1 androidboot.selinux=permissive quiet SRC=RemixOS/ DATA=
initrd /RemixOS/initrd.img

title Ubuntu
root (hd1,1)
kernel /boot/vmlinuz root=/dev/sdb2
initrd /boot/initrd.img


default:0は初期起動OSがブートマネージャーの一番上にあるもの(RemixOS)であることを示します。

timeout:初期起動OSが起動するまでの待ち時間

title:各OSのエントリポイント

root:各OSの物理パーティションを指定。一番目のハードディスクはhd0, 二番目のハードディスクはhd1、三番目のハードディスクはhd2・・・、二番目のハードディスクで第一パーティションはhd1, 0、二番目のハードディスクで第ニパーティションはhd1, 1、二番目のハードディスクで第三パーティションはhd1, 2・・・ ゼロ起点であることに注意が必要です。

find, kernel, initrd:これらはGrubコマンドそのままです。

 

要は1. エントリポイントを記述し、2. 物理パーティションを指定、3. Grubコマンドを記載 します。Grubコマンドの説明は各OSのリファレンス等にあります。

http://web.mit.edu/~mkgray/afs/bar/afs/athena.mit.edu/project/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-grub-commands.html

※上記はRedhatのものですがほぼLinux共通です。

RemixOS、Ubuntuともkernelで実カーネル本体を指定、initrdで初期RAMディスクを指定します。

 

4. 実際の起動シーケンス

では、実際の起動シーケンスを見てみます。スマホでの撮影なので写りが悪いですが、ご了承ください。


f:id:self_fella:20210222123245j:image

Windowsのブート画面。NeoGrubブートローダが追加されています。下のNeoGrub Bootloaderを選択。


f:id:self_fella:20210222123600j:image

NeoGrubによるブート画面。下のUbuntuを選択。


f:id:self_fella:20210222123903j:image

Ubuntuが起動しました。

 

5. NeoGrubを使用したマルチブート構成まとめ

Windowsブートマネージャー」→「NeoGrubブートローダ」という2段階の手順を踏むため面倒なように見えますが、今回採用した手順は非常に汎用性が高いものです。EasyBCDには直接Windowsブートマネージャーにエントリを書き込む機能も備わっていますが、比較的新しいOSに限定されます。それに対して、今回採用した手法はレガシーOSまで含めて幅広く対応しています。menu.lstに記載できるOSはLinux系OSにとどまららず、WindowsXPなどレガシーなものも可能です。

また、menu.lstにエントリを追加削除するだけなので、後からハードディスクの空き領域を利用してOSをインストールしたり、いらなくなったOSを削除したりするのも柔軟に行えます。しかも最初に述べましたが、追加ディスクはその形態を問いません。

 

図に示すと、以下のようになります。

f:id:self_fella:20210222130623p:plain

 図1-1 NeoGrubブートローダの起動イメージ

 

最後にトラブルシュートとして、NeoGrubブートローダが何かしらの理由でmenu.lstの解析に失敗した場合、Grubのチェインロードの仕組みを利用して各OSを起動する方法があります。(この方法はレガシーOSにも有効です)

title CentOS7
root (hd1,2)
chainloader +1

 CentOSが2番目のハードディスクの第3パーティションにインストールされている場合の例です。このとき、chainloaderコマンドを指定することで、そのパーティション先頭にあるブートローダが直接呼ばれます。すなわち、「Windowsブートマネージャー」→「NeoGrubブートローダ」→「CentOSブートローダ(Grub2)」の3段階でOSが起動されます。冒頭で、「OSをインストールしたパーティションと同じ個所にGrub等のブートローダをインストールする」と述べたのもこの点に由来します。