デュアル・ブートのLinuxシステム上でOSの切り替えを自動化する

1台のマシン上で手動操作を介さずにLinuxとWindowsを切り替える

これから順を追って説明する手順に従ってデュアル・ブート・マシンを設定することにより、あるオペレーティング・システムから別のオペレーティング・システムへ、手動操作を必要とせずに切り替えることができるようになります。この記事で紹介するスクリプトを使用して、今お使いのマシン上でLinux® とWindows® の両方のOSを実行する手順を試してみてください。

Marc Carter, WebSphere MQ/JMS performance specialist, IBM United Kingdom

Marc CarterはIBM HursleyのWebSphere MQ JMSパフォーマンス・チームのPerformance Specialistです。彼は開発チームと共にWebSphere MQの新しいリリースの評価を行い、また、WebSphere MQに関係する設計、コンフィギュレーション、チューニングなどの問題に関して顧客へのコンサルティングを行っています。また、内部テスト自動化システムにも長年従事してきました。



Phil Willoughby, XMS Developer, IBM

Phil Willoughbyは、IBM Message Service Clients開発チームの一部として、CやC++用のXMS APIに関する業務を行っています。移植可能なハイパフォーマンスCコードを書く専門家でもあります。



2006年 3月 08日

手動で切り替えるだけでも十分なのに、なぜ自動的に切り替える必要があるのでしょうか? 単純に答えるならば、複数のOSを使用する場合は自動的に切り替えることができたほうが便利だからです。たとえば、複数のOSプラットフォーム上でソフトウェアをテストする場合、OSを自動的に切り替えることができれば大変便利です。

この記事は、今お使いのマシンにすでにLinuxとWindowsの2つのOSがインストールされていて、GRUBを使用するマルチ・ブートが構成されていることが前提となっています。GRUB(GRand Unified Bootloader)は、マシンの起動時にシステムの制御をロードし、OSのカーネル・ソフトウェアにその制御を転送します。GRUBの設定については、この記事の終わりにある「参考文献」のセクションを参照してください。

この記事で扱うもの

  • Microsoft® Windows XP Professional
  • Microsoft Windows Server 2003
  • Debian Linux 3.1 (Sarge)
  • Red Hat Enterprise Server (RHES) 3
  • GRUB 0.97; 他のブートローダーと併用した場合、正常に機能する保証はない

手順1. ディスクのパーティションを設定する

システムの構成を始める前に、最新のシステム・バックアップが取られていること、復旧CDが手元にあることを確認してください。これから説明する手順の途中で不具合が発生した場合、マシンが起動しなくなります。これ以上進むのは危険だと判断した場合は、処理を中断してください。

ブート制御パーティションを作成する

いずれかのハード・ディスクに小さなパーティションを1つ作成してください。このパーティションには、インストールされているいずれのOSからでもマウントと書き込みが可能なファイルシステムを設定する必要があります。ここではFAT32を使用します。ブート制御システム全体でも必要なディスク領域は1MBに満たないのですが、FAT32の場合はデフォルトの最小値が256MBに設定されているため、より多くのディスク領域が必要になります。

十分な空き領域がディスクにない場合、既存のボリュームを圧縮または削除して空き領域を確保してください。Linuxの場合であれば、GNU Partedコマンドを使用して既存ボリュームの圧縮/削除を行ってください。このParted操作によって既存のパーティションの順序が変更された場合は、/etc/fstabファイルを更新する必要があります。詳しくは、Parted操作のマニュアルを参照してください。

Parted操作を使用してテスト・マシン上に必要なパーティションを作成した場合、結果はリスト1のようになります。

リスト1.必要なパーティションの作成
repton:~# cat /etc/fstab
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda2 / ext3 defaults 0 1
/dev/hda6 /home ext3 defaults 0 2
/dev/hda7 /opt ext3 defaults 0 2
/dev/hda5 none swap sw 0 0
/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
repton:~# umount /home
repton:~# parted
Using /dev/hda
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49999.174 logical ext3
7 49999.206 57231.562 logical ext3
(parted) resize 6 26458 49739
(parted) mkpartfs logical fat32 49739 49999
(parted) print
Disk geometry for /dev/hda: 0.000-57231.562 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 18412.734 primary ntfs boot
2 18418.271 25085.874 primary ext3
3 25085.874 57231.562 extended
5 25085.905 26458.615 logical linux-swap
6 26458.646 49740.314 logical ext3
8 49740.346 49999.174 logical fat32
7 49999.206 57231.562 logical ext3
(parted) q
repton:~# mount /home

Linuxパーティションをマウントする

ブート制御用のパーティションを作成したら、Linuxから認識できるようにそのパーティションをマウントします。ここでは、以下の記述を/etc/fstabファイルに追加します。

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/hda8 /boot/control vfat umask=022,dmask=022,fmask=022 0 2

次に、以下の記述を使用してマウントポイントを作成し、ファイルシステムをマウントします。

mkdir /boot/control
mount /boot/control

また、パーティション構造上でGRUBが管理する情報も更新する必要があります。ここでは、grub-install /dev/hdaを使用して更新します。

Windowsパーティションをマウントする

システムを手動でWindowsに再起動し、上記の作業後もWindowsの起動に影響がないことを確認してください。次に、上記の手順で作成したブート制御パーティションに1文字のドライブ名を割り当ててください。Windowsの新しいバージョンの場合、[コンピュータの管理] のMMCスナップイン([マイ コンピュータ] を右クリックし、[管理] を選択)を使用してドライブ名を割り当てます。古いバージョンの場合は、[スタート] から [管理ツール] を選択します。

図1は、ブート制御パーティションに「W:」を割り当てたことを示しています。

図1. ブート制御パーティションへのWindowsのドライブ名の割り当て
図1.ブート制御パーティションへのWindowsのドライブ名の割り当て

手順2. GRUBブート・メニューをリダイレクトする

GRUBの構成ファイルである /boot/grub/menu.lstを、ブート制御パーティションに移動してください。このパーティション内であれば、WindowsとLinuxのどちらからでも構成ファイルに書き込むことができます。こうすることにより、どちらか一方のOSで実行されるスクリプトからデフォルトのブート設定を更新することができます。デフォルトでは、GRUBはブート制御パーティション内の構成ファイルを参照しない設定になっているため、構成ファイルが元々あった場所に、このファイルへの簡単なハックを追加する必要があります。

元の構成ファイルのハードコピーを印刷してください。GRUBが読み込みに失敗した場合でも、このハードコピーを参照してシステムの起動に必要なコマンドを入力することができます。詳しくは、GRUB情報のページを参照してください。

この例では、最初にファイルをコピーし(cp /boot/grub/menu.lst /boot/control/menu.lst)、次に以下のスタンザ(リスト2を参照)を元の /boot/grub/menu.lstに追加します。こうすることにより、/boot/grub/menu.lstが既存のブート候補の前面に配置されます。

リスト2.一方のOSからのブート・ファイルへのアクセスを許可
title BOOTCONTROL REDIRECT : PLEASE WAIT
root (hd0,7)
configfile /menu.lst
boot

rootコマンドのパラメータが現在のシステムに対して正しいことを確認してください。確認の際のおおよその目安として、ドライブ番号がaからzではなく0から始まっていること、パーティション番号も1からではなく0から始まっていることを確認してください。この例の場合、/dev/hda8は (hd0,7) になります。ここでは、その他のすべてのスタンザからsavedefaultコマンドを削除し、以下の設定を変更してブート制御候補がシステムの起動10秒後に選択されるように設定します。詳しくは、GRUBの資料を参照してください。

default 0
timeout 10

これでGRUB構成をリダイレクトすることができました。システムを再起動して、メニューが正しく表示されることを確認してください。

この際に最もよく見られるエラーは、パーティションが正しく定義されていないことによるエラーです。Partedのパーティション番号("Minor")が /etc/fstabの番号と一致していること、GRUBが /boot/grub/menu.lstで使用しているパーティション番号がPartedのパーティション番号("Minor")から1を引いたものであることを確認してください。


手順3. ブート制御を構成する

この記事の下にある「ダウンロード」のセクションからZipファイルをダウンロードし、ブート制御パーティション内で解凍してください。このZipファイルには、一般的な方法でOSの切り替えを処理するPerlスクリプトが入っています。そのほかにも、WindowsとLinuxの切り替えを処理するサンプル・スクリプトが入っています。これらのスクリプトを実行する場合、作業対象カレント・ディレクトリをブート制御パーティションに設定する必要があります。

処理スクリプト

これは処理スクリプトです。

bootcontrol.pl <grub-config-file> <platform-title>

grub-config-fileパラメータには、編集する構成ファイルへのパスを指定します。通常はmenu.lstを変更しますが、ファイルが正しく変更されたことを確認したい場合は、menu.lstを新しい名前でコピーしたファイルを使用してください。

platform-titleパラメータは、/boot/control/menu.lst内のタイトル・フィールドを比較検証するためのサブストリング(正確には通常の式)として使用されます。このパラメータ値は大文字と小文字を区別し、この値と最初に一致したタイトル・フィールドを持つインスタンスがbootcontrol.plによって選択されます。platform-titleパラメータに数字が指定された場合、この数字は起動するメニュー・オプションとして処理されます(プラットフォームとしては処理されません)。メニュー・ファイル内のエントリー番号は0から始まります。

ヘルパー・スクリプト

付属のbootcontrol.plは、テンプレートとして提供される簡単な2つのスクリプトです。WindowsとLinux間の処理を単純なものにします。to_linux.plまたはto_windows.plと入力することにより、どちらのOSからでも起動することができます。これらのスクリプトを実行しても、必要がない限りシステムが再起動されることはありませんが、GRUBのデフォルト設定は常に更新されます。


手順4 システムを管理する

インストール済みのOSに対して変更や更新を行った場合、ブート制御が使用する設定に影響を与えることがあります。そのため、GRUBまたはLinuxのカーネルに対して影響を与えるような変更を行った場合は、常に再起動が正しく機能することを確認してください。こうした変更を行うと、/boot/control/menu.lstの内容は変更されずに /boot/grub/menu.lstの内容だけが変更される場合があります。


ダウンロード

内容ファイル名サイズ
Sample scripts for this articlel-osswitch-bootcontrol.zip3KB

参考文献

学ぶために

製品や技術を入手するために

  • GNU Partedは、パーティションや、パーティション上のファイルシステムの、作成、破棄、リサイズ、チェック、コピーのためのパッケージです。
  • 皆さんの次期Linux開発プロジェクトを、IBM ソフトウェア試用版を使って構築してください。developerWorksから直接ダウンロードすることができます。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=226805
ArticleTitle=デュアル・ブートのLinuxシステム上でOSの切り替えを自動化する
publish-date=03082006