気の向くままに辿るIT/ICT/IoT
システム開発

BIOSでブート未対応メディアのブートデバイス化

ホーム前へ次へ
BIOSでブート未対応でもブートできるの!?

BIOS未対応メディアでブートさせる方法

BIOSでブート未対応メディアのブートデバイス化

 1台のPCで複数のOSを起動する場合には、例えば以下のようにいくつかの方法が考えられます。

 ここでは、CD/DVD/BD(Blu-ray Disk)/USB(Universal Serial Bus)などの外部メディアからのブート(起動)を考えてみたいと思います。

 これらをブートデバイスとして使う場合には、当初ハードウェアの違いを吸収する(移植時の利便性の)為に考案され、デバイスドライバ的な役割を持ち、ブートローダともいえるBIOS設定でHDDよりも先に読み込むように設定しておく必要があります。

 しかし、あるデバイスの利用は可能でもブート(起動)には使えないというケースに遭遇することがあり得ます。

ブート未対応デバイスが存在する背景

 例えば、技術の進化と変遷により、カセットテープ/FDD/PO/MO/ZIP/CD/DVD/BD/USB...etc.と各種補助記憶メディアの栄枯盛衰も様々、近年カセットテープの流用はもちろん、FDD(フロッピーディスクドライブ)のないPCが一般的ですし、POやMOは影が薄く、ZIPは・・・USBは1.1/2.0・・・マシンやWindows 9x(95/98/98SE/Me)など旧タイプのOSはまだまだ現役、CDブートが可能となる以前から存在したUSB1時代の対応マシンでは、当然USBブートという発想もあるはずもなく・・・といったケースがあります。

BIOSに選択肢がないことが原因ならブート可能

 そうした中で物理的な故障は別としてPCでUSBポートがあるのにUSBでブートができないケースというのは、PCやOS、USBという規格やマシンのUSBポートがブートに対応していないというわけではなく、BIOSの起動順設定の選択肢にUSBメモリがないからブートできないというケースがあります。

 これは、逆に見ると手動(メニュー選択)など何らかの方法でUSBを選択さえできれば、起動できるということになります。

ブートメニューにデバイスを追加する方法

 その何らかの方法の中でも比較的安全な方法の1つがチェーンローダ(chain loader)を使ったマルチブートです。

 この方法は、冒頭のリストの[...etc.]にあたる(リストにない)ものでパーティション設定はしないけどマルチブートにするというものです。

 そんな時、Plop Boot Manager というチェインローダが重宝しますが、PlopとGrub4Dosを併用(Grub4DosメニューからPlopメニューを呼んでUSBを選択)するのもありでしょう。

 尤もファイルシステムが読み込まれる前の時点におけるUSBデバイスの識別子を簡単に特定できる人にとっては、Plop Boot Managerを使う必要は特になく、これを意識しなくても設定してくれるのでUSBデバイスの識別子を特定できない場合に重宝するということです。

[追記]

 下記事例は、ハードディスクの起動ドライブにブートローダを設定する方法ですが、USBポートはあるけどUSBブートはできない一方、CD/DVDドライブもあってCD/DVDドライブからならブートできるんだよねという場合には、Plop Boot Managerの入ったCD/DVDからUSBを起動することができます。

 その場合、Plop Boot Manager単体もしくは、これが入ったLinuxディストロやレスキューLiveCD/DVD用isoファイルをImgBurnなどで(ImgBurnなら[イメージファイルをディスクに書き込む]で)CD/DVDに焼き、CD/DVDから起動(後者ならブートメニューからPlop Boot Managerを選んで)Plop Boot Managerのメニューから[USB]を選択すればOKです。

 一見、遠回りに思えるかもしれませんが、作業は極めてシンプルなのでブートマネージャをいじるのが初めてという場合には、起動ドライブに仕込むよりは、わかりやすいし、手っ取り早いと思います。

 例えばこんな環境でも手順を踏めばUSBブートできるようになったりします。

[マシン環境]

マシン:SOTEC e-one (モニタ一体型iMacもどき)
OS:Windows 98 SE
CPU:Intel Celeron 500MHz
RAM:SDRAM 128MB
HDD:13GB
MONITOR:15inch CRTモニター
CD:x24 CD-ROM
FDD:1
USB:2

[USBメモリ]

Buffalo Clip Drive 256MB

[ブートOS]

・Puppy Linux(Puppy lupu528jp)*既定GUI
・Damn Small Linux / DSL*既定GUI
・Plop Linux (Base version)*CUI
*USBメモリ記憶容量による制約上、選択肢は限られるが、あるだけラッキー。

[諸事情・諸環境]

・Win98マシンは、FDD、CDドライブはあるが故障につきいずれも使用不能
・USB1.1は利用できる状態だが、BIOSにUSB関連の選択肢がなくブート不可。
・USBメモリスティックは超昔のUSB1.1/256MBがかろうじて1本健在だった。
・ツイストペアケーブルはなくPeer to Peerは不可、無線LAN/有線LAN環境でもない。
・後々LANにつなぐにしても98のままだとセキュリティを考えると面倒、だからと言って考えないと不安だ、となるとつなぐならOS入れ替えの後だが、これら環境ではネットブート(ネットワークブート)・ネットワークインストールも当然できない。

...環境が古いからUSBブート不可なんて冷たいこと言わないで、はてさて、なんとかUSBブートできないものか。。。

 おー、Plop Boot Managerっていうのがあるのか、Grub4Dosっていうのもあると。。。なんだかいけそう。。。

[手順概要]

 Grub4Dosメニューの選択肢にPlopを追加、Plopを選ぶと選択肢にUSBを含むPlopメニューが出力され、[USB]選択でUSBにインストール済みのOSをブート。

[要領・留意点]

・Grub4Dosをインストールするとルートドライブ(c:\)直下に[menu.lst]を含む複数のファイルが入ったGrubフォルダが作成される。
・Grub4Dosを起動するのに利用できるブートディスク直下にある(必要に応じて作成される)Windowsのシステムファイルにはboot.ini、config.sys、autoexec.batなど複数あるが、何れにしてもGrub4Dos用GUI設定プログラムWINGRUBを使うとより便利。
 (但し、boot.iniはマルチブートにする際に初めて作成されることから存在しないこともあるなど、戸惑う可能性、autoexec.batの設定を一歩間違えると起動不能になるなど危険、よって設定するならconfig.sysが比較的安全かも)。
・config.sysにGRUBメニューを追加する場合、メニュー表示部とラベルで関連付けされた起動プログラム(grub.exe)行の2行を追加することになり、grub.exeの引数で指定したパスの[menu.lst]をGRUBの構成ファイルとする(のでドライブ直下のGRUBフォルダ以外に置く場合にはそこからコピーして設定するとよい)。
 ・Grub4Dosが呼ばれている時点では、ファイルシステムが読み込まれておらず、ハードディスクのドライブレターも参照できない。
  ・この時、例えば、1番めのハードディスクの1つめのパーティションは、hd(0,0)(hd0,0) と表記すれば、デバイスとして認識される。
 ・[Original Config]となっている方は本来のブートOS起動メニュー。
・Grub4Dosの構成ファイルであるmenu.lstには、この例の併用ケースではPlopをメニューに加える為の設定をする。
 ・menu.lstの基本構成は、個別設定は、[title]で始まり、複数ある場合は、次の[title]の前の行までとなり、最初の[title]より前に設定がある場合は、共通設定。
 ・menu.lstの[title]の引数には、Plopメニューの選択肢となるテキストを設定。
 ・menu.lstの[kernel]の引数には、デバイス、起動ファイル名[plpbt.bin]、更に任意で起動ファイルへの引数を設定することもできる。
 ・menu.lstの[title]の後、[kernel]の前に[root]でデバイスを設定すれば、[kernel]ほか以降のデバイス指定は省略可能。

例:menu.lst

(共通設定)
...
title Plop Menu
root (hd0,0)
kernel /plpbt.bin
 
(title)...

・この例ではブートパーティションまたはブートディスク直下にある[plpbt.bin]を示している。
・[plpbt.bin]ファイルは、Plop Boot Managerを展開したフォルダ内にある[Windows]フォルダから[menu.lst]で指定するパスにコピー。
・USB1.0/USB1.1を利用の場合、(コマンドラインでplpbtcfgじゃなくてplpcfgbtを使ってブートパーティションまたはブートディスク直下におく)plpbt.binの起動引数[dbt=usb]、[usb1=1]の2項目を設定しておく。
 ・そのplpcfgbtもplpbt.binと同じパスに置く(これは必須ではない)。

例:DOSプロンプト/コマンドプロンプト
*Cドライブにplpbt.binをコピーした場合。

[prompt] > plpcfgbt dbt=usb usb1=1 c:\plpbt.bin


・USB1.0/USB1.1を利用の場合、Grub4Dosメニューから最初にPlopメニューを表示した時、[SETUP]メニューを選択、[dbt=usb]、[usb1=1]の2項目の設定が反映されていなければ改めて設定すること(反映されていないと起動するかに見えてフリーズする)。
 ・起動した状態で[SETUP]メニューから行った変更は、一時的なもの(その都度設定が必要)になる。
・尚、本設定の場合、Plopメニューのハードディスクを選択するとStart upメニューに遷移する。
・ちなみに特にメニューに表示される文言をいじっていなければGrub4Dosメニューの[Original Config]を選べばデフォルトOSを起動可能。
・この例の併用ケースでは、GRUBではStart upとPlopの2択、Plopのハードディスクに当たるメニューはStart upメニューに遷移し、結果的にOSブートはStart upメニューからのみとなる。
 ・このままだとOSを起動せず、ぐるぐる回って2度め含め以降にPlopメニュー表示した際のハードディスクに当たるメニューは利用できないかもしれないが初回はできるわけだし、ブートUSBはあくまでOS入れ替える前の一時利用で常用するわけでもないっていう想定ってことでとりあえず放置。

[注釈]

・そもそもGrub4DosまたはPlopのいずれか一方だけでもUSB起動させることもできるし、ブートローダ、チェーンローダには他にもGRUB、GRUB2、LILO、Syslinux、Isolinux、Extlinuxといったものもある。
 ・Grub4Dosだけで実現する場合、menu.lstの[kernel]でOSのカーネルを指定、また、あれば[kernel]の後に[initrd]を指定する必要あり。

 MBRにGRUBをインストールした場合のブートの流れとしては、電源投入、BIOSによるPOST(Power On Self Test)、デバイス検索、MBR読み込み、GRUB実行、カーネル実行、起動用RAMディスク/initrd/INITial Ram Diskの準備、カーネルがinitrdをルートとしてマウント、initrdにあるリソーススクリプトを実行、initrdが持つ必要なモジュールを読み込み、ルートパーティションをマウント、マウント完了で利用可能となるカーネルモジュールにより各機器の初期化、initプロセス実行、ブートスクリプト起動......と続くが、Grub4Dosとしては、[kernel]とOSが必要とする場合[initrd]までの指定が必要となる為。

 ・ここで併用案を示したのは、PlopがUSB1.0/USB2.0の指定が容易であり、USBメニューがデフォルトで表示されることからUSBディスク指定(文字列)などを意識する必要もない為、Grub4Dosより簡便、一方、Windowsシステムファイルの設定はPlopよりもGrub4Dosの方が簡便であるように思えた為、なるべく容易く導入するなら併用がベターな気がしたから。
・どちらもより多くの事ができるようになっているので詳細なカスタマイズや一方のみを用いる方法など詳細は、充実した各仕様書参照のこと。

[追記]

 場合によっては、MBRにGRUB Legacy/GRUB2をインストール、FreeDOS/NetBSDとPLoP Boot Managerをマルチブートする例の方がわかりやすいかも。

[前提条件]

  • 対象マシン以外にインターネットに接続しているマシン要(必要ファイルのダウンロードなど)
  • 対象マシン以外に別途USBブート(を確認)できるマシンがあれば(ネット接続マシンでもよいが他にあれば)尚可
 もし、USBが1本しかなく、他に転送手段がない場合は、必然的にGrub4DosやPlopをはじめとする必要ファイルの転送にはこれを使い、その後USBブートするOSをインストールすることになる。
 USBブート対応マシンについては、問題の切り分け(予めブートUSBに問題がないことの確認)ができていれば、何かあってもローダ設定に専念できるという意味。

今回USBメモリにLinuxをインストールした方法

 USBブートに使ったUSBメモリにPuppy Linuxをインストールする為に使った方法は、下記の如く偶然の産物でした。

 今回、常々有効活用できないものかを考えていたWindows 98SE搭載マシンにLinuxを入れよう、ついては同時に利用できないなら滅多に使うことがないものをマルチブートにしても限られたディスクスペースを有効に活用できそうにないからLinux専用マシンにしようとうっすら思っていました。

 スタンドアローンである当該マシンのFDD/CDドライブは破損していてUSBのみが使える状態であり、P2P、または、ネットワークにつながずにこのままインストールを考えた為、自ずとUSBという選択肢が残り、Linuxをインストールしたいわけだから、USBに入れるのは、当然ながらLinux、容量が限られたこのUSBメモリに入れられるLinuxは。。。ということでPuppy Linuxが有力候補となるに至りました。

 しかし、肝心の当該マシンでは、USBドライブがあるにも関わらず、USBブートに対応していなかったことから調べた結果、Plop Boot ManagerやGrub4Dosに辿りつきました。

 現実味が帯びてくるに連れ、OSであるWindows 98SEを消滅させるのはもったいない、データは必要ってほどでもないけど、捨てるには惜しいし、思い出として記念に残しておきたいと思うに至り、辿りついたのが、仮想マシンという便利なソフトウェアでした。

 思えば仮想マシンは、このOS選定する際にも便利なのでその1つであるVirtualBoxゲストOSとして各種Linuxをインストール、Puppy Linuxの使い勝手もまず仮想マシンで試してみることに。

 するとWindowsライクなGUIのデスクトップを持つPuppy Linux(だけでなくGUIデスクトップを持つ多くのLinux)では、メニューから選択するだけでHDDばかりでなく、USBに簡単にインストールしたり、書き込みソフトウェアを使って焼き込んでLive USB、Live CDといったブータブルメディアを作成でき、それらのドライブをブートデバイスとして利用できることを知り、かくして仮想マシンから物理マシンのUSBメモリにPuppy Linuxがあっという間にインストールされるに至ったというわけです。

 Linuxに慣れ親しんでいれば、GUIでなくても簡単にできることですが、この方法なら根っからのWindowsユーザーやLinuxを使い始めたばかり、今回のように期せずしてたまたま手間が省けてしまった人々にとって便利この上ないことでしょう。

 ちなみに当初の目的を達する為には、仮想マシンにWindows 98SEをインストールする為にインストールCD、もしくは、それに準ずるディスクイメージが必要となる訳ですが、購入当時リカバリCDは付属していたものの、インストールCDは付属しておらず、仮想マシンをいじり倒してる間に98SEもHDDから吸いだせるはずと思うに至り、結果、VirtualBoxにMS-DOS起動ディスクでWindows 98SEをインストールすることができました。

 ただ、Windows 98SEに関しては、特にVirtualBoxでは挙動がモッサリとしていて且つぎこちないので他の仮想マシンであるVirtual PC 2007なども試しつつ、仮想マシン上のWin 98SEにアプリケーションを入れてみたり、使ってみたり、バックアップの容易さを体感してみたりした後、予定通り、Puppyを対象マシンに入れてみるつもりでいます。

 Windows 98SEの入ったe-oneには、最終的にNetBSD+ウィンドウマネージャ(jwm)+日本語環境(scim-anthy)、LANに接続+Samba導入でNASとしても使えるようにしてみました。

 もちろん、より新しい他のWindowsマシン達もそれぞれサポート期限が切れる前までには、きっとBSDやPC-UNIX、Linuxマシンと化していることでしょう。

 ==> 古いパソコンの再利用

軽量Linux

 Windows 9x/Me/NT/2kなどを持ってるということは、USB1.1の256MBが現役・・・なんてこともあり得る・・・そんな時でもX Window Systemを組み入れないCUIベースとすること等で軽量化しているPlop Linux Basic versionや組み込みシステムでLinux軽量化に一役買っているBusyBoxなどを使ってPC用OSでも軽量化を図り、既定でWindowsライクなGUIが起動するDSL/Damn Small LinuxやPuppy Linuxならインストール可能です。

 尚、DSLやPuppy Linux(lupu 528jp)では各種インストールメニューの中でUSBへのインストールができる為、仮想マシン上のゲストOSからでもブートUSBを作ることができたりします。

 BusyBoxとは、UNIX系のcoreutilsに含まれるコマンド群の全てまたは任意に選択した一部のコマンドをbusyboxというコマンドに(シンボリックリンクをはり)集約、実質1つのコマンドとする仕組みで、より軽量化する為に各コマンドオプションの取捨選択をも可能とする軽量化に特化したコマンド及び技術です。

 よってBusyBoxを利用したDSLやPuppyでは、本来のコマンドとは、若干挙動が異なったり、オプションがフルスペックで実装されていない場合もあり得ます。

ファイルシステム

 ちなみにデバイスフォーマット時にはファイルシステムの指定が可能、Windowsならfat/vfat(fat16)/fat32/exfat/ntfs、UNIX/Linuxならextended file system(ext1)/ext2/ext3/ext4/Btrfsやネットワークファイルシステムnfs、擬似ファイルシステムproc(procfs/Process Filesystem)、メモリファイルシステムtmpfsなどがあります。

 LANを介してWindowsやUNIX/Linuxマシンが混在する場合には、Sambaを利用することもできますが、LANを介さずUSBなどの媒体でデータをやり取りする場合、Windows同士ならfat/fat32/ntfs、但しNTの場合fat32は不可なのでfatかntfs、UNIX/Linux同士なら(ext1/)ext2/ext3/ext4/Btrfs何れか、WindowsとLinux間ならfat(近年Liuxのntfsへの対応も進んでいる)でフォーマットするとよいでしょう。

PCの有効活用

 CD/DVD/BD/USBなど外部メディアからOSを起動できれば、例えば、挙動不審なWindowsマシンのレスキューメディアとしてLinuxでウィルスチェック含むマシンの状態チェックすることも可能になります。

 また、先の例のようにFDD/CD/DVD/BDがそもそもないとか、故障して使えないといった環境でもUSBからブートできるようになれば、HDDへのインストールもできるようになるので、別途外付けHDDなどにバックアップを取るなりして、そのままPuppyを使うもよし、必要なら思う存分セキュリティ設定した後にでもLANにつないで、またはネットに直でつなげて他のLinuxに乗り換えるのも自由自在です。

 どれだけ古いPCも常にフル稼働しているとか、毎日のように使用しているならまだしも、そうでないならセキュリティパッチ含むOSのサポートが切れるという理由だけでPCを廃棄したり、買い替えたりするというのも現実的ではないでしょう。

 捨てるには忍びない、かといって活用もしづらいと、これまで眠らせていた古い低スペックPCでさえも現役復活、モノを大切にし、断捨離というフレーズに一理あるとは思いつつ、多少なりとも抵抗を覚えて古いPCを持ち続けていた、そんな人も大いに報われ、十二分に利活用できることでしょう。

 ちなみにネットブックもメモリやHDD容量からしてDSL、PuppyなどRAMが64MB~256MBで十分動作するLinuxもあり、512MBとなるとまた幅が広がりますし、HDDにしてもシステムファイルや有用なアプリケーションを含めインストールしても700MB前後、1GB前後ともなれば選択肢も多く、何かとHDD容量が限られるネットブックには、むしろLinux環境の方が向いてるとも言えます。

 仮にあるLinuxディストリビューションの開発が止まるというリスクがあるにしても他に選択肢が多々あることで十分補え、X Window SystemによるLinuxのGUIも今やWindowsユーザーにも違和感がない程になっているので、多少の操作性の違いなどを考慮しても、GUIベースなら尚更、これまで玄人向けとか難しそうというイメージから敬遠されがちだったLinuxを使ってみるという選択は今や現実的なものと言えるでしょう。

 尚、Linuxディストリビューションには、他にもArch Linux、ArchBang、CentOS、Debian、Fedora、Gentoo、openSUSE、Vine Linux、Debian、KNOPPIX、Ubuntu、Tiny Core Linux、Turbo Linux...etc.、*BSDには、FreeBSD、NetBSD、OpenBSD、DragonFlyBSD...などがあります。

ホーム前へ次へ