IBM PC/AT互換(BIOS/Intel CPU/Windowsプリインストール)機の場合、BIOSが正常なMBRを読み込み、MBRはActive(有効)となっている第1パーティションのPBRを読み込むことで第1パーティション内のOSを起動します。
この時、OSがインストールされていない場合は当然としてMBRが壊れていたり、Activeと設定されたパーティションが存在しない場合、OSを起動することはできません。
NetBSDでは、MBRが壊れている場合、fdiskコマンドを使ってMBRを(再)インストールすれば、簡単に修復することができますし、Activeフラグを立てることも、既存のActiveパーティションを変更することも簡単にできます。
また、マルチブート構成で2つめ含む以降のパーティションにインストールしたOSを起動させたい場合には、予め、起動するOSを選択するためのブートローダをインストールしておくか、別途、ブートローダを入れたLiveメディアを起動してからハードディスク内のOSを選択する必要があります。
NetBSDには、MBRに直接書き込むタイプの簡易ブートローダであるブートセレクタ[bootselect code]があり、システムインストール時に、これをインストールしてメニュー項目を設定することもできますし、これをするしないに関わらず、後からGRUB LegacyやGRUB2をインストールすることもできます。
インストールをしたにも関わらず、「起動可能なディスクがない」旨のエラーが表示された場合は、まず、これが原因で、そうだとすれば、実際には、NetBSD自体はインストールされているものの、「起動する手段がない」という状況にあるということになります。
こうした場合でも後述の汎用ブートローダのLiveメディアを使って一時的に起動させ、その後、通常起動できるようにしておけば、全く問題ありません。
その前に仮に英語キーボードしか使えないという状況があった場合、一時的ながらも不便なので、その日本語キーボードと英語キーボードの対応一例を挙げておきます。
こうした場合には、CD/DVD/USBメモリなどから汎用のブートローダを使えば、ハードディスク内のOSを起動させることができます。
GRUB2専用、もしくはGRUB2を使ったブートUSBを作成するつもり、または、持っているなら、grubプロンプトやmenuetnryでNetBSDをインストールしたパーティションを[set root=]して[knetbsd /netbsd]、または、[chainloader +1]及び[boot]などとすればOKです。
この時、パーティションのフォーマットをFATとした場合、(hd0,1)などとしても認識できなかったら(hd0,msdos1)などとすればアクセスできるでしょう。
GRUB LegacyでNetBSDを起動するなら[root (hd0,0,a)](GRUB Legacyでは1つめのパーティションは0、aはBSDパーティション内のルートパーティション)、[chainloader +1]などとしておけば起動します。
これらは、何れもルートにあるNetBSDのデフォルトのカーネル名[/netbsd]を使って起動することを前提としています。
もっと簡単な方法がよい場合には、起動できないPCを起動する方法やFUJITSU FMV C6320でUSBブートはできるのか?にあるようにPLop Boot Managerを使うと何を設定することもなく、メニューから選択するだけでUSBだけでなく、CD/DVDやHDDからも起動させることができるので重宝します。
これを使う場合、まず、PLop LinuxのISOディスクイメージ、もしくは、ブートマネージャのみのplpbt.isoを仮想マシンならそのまま、物理マシンならCD/DVD±RWなどに焼いてBIOSの設定でCD/DVDから起動するようにします。
PLop Boot Managerならそのまま、PLop Linuxの場合は、ブートメニューからPLop Boot Managerを選び、マシン全体にNetBSDをインストールした場合には、[HDA HARDDISK 1]を、マルチブート構成にした場合は、パーティションの順と同様に[HDA HARDDISK 2]や[HDA HARDDISK 3]もあるはずなので対応するメニューを選択します。
GRUB Legacy、GRUB2、PLoP Boot Managerなど何れを使ったにしてもNetBSDの簡易ブートセレクタ、もしくは、標準起動メニューが無事、表示されたことでしょう。
尤もこれは一時的な措置です。
次回からこれらブートメディアに入れたブートローダを使う必要なく、PCの起動後にNetBSDのブートセレクタや標準メニューが表示されるように、また、これらを含め、PC/AT互換機のMBRにNetBSD用ブートコードをインストールするには後述のようにします。
その前にこれらを行なう対象となるハードディスク名やハードディスクのキャラクタデバイス名を知る必要があります。
NetBSDの標準メニューが表示されたら一応、[02. Single User Mode]で起動します。(個人のPCなら[1. Boot normally](マルチユーザーモード)でも構いませんが、その場合は、説明の流れの都合上、rootでログインします。)
シングルユーザーモードで起動した場合、起動メッセージが流れて途中で停止したところで[Enter]を押すと/bin/shによるrootアカウント用シェルプロンプト[#]が表示されます。
シングルユーザーモードで起動していれば、プロンプトの2〜3行上あたりの起動メッセージの中にディスク名が書いてあると思いますが、NetBSDの場合、HDDがIDE/ATAなら[wd]、SCSIなら[sd]、ディスク全体、もしくは1つめのBIOSパーティション(スライス)にインストールした場合には、[0]、2つめなら[1]...のように順に数字が付くので1つめ(ディスク全体に1つだけインストールしてある)なら、それぞれ[wd0]、[sd0]のようになります。
また、NetBSDでは、i386版においては、BSDパーティションにおける[d]パーティションはディスク全体を表わすので[wd0d]、[sd0d]となり、これらは、一定の塊単位で読み書きできるブロックデバイス、これらの先頭に[r]を付加した[rwd0d]、[rsd0d]が、1バイト単位で読み書きできるキャラクタデバイスです。
以降の説明は、HDDがIDE/ATAの1つめのパーティションの場合(NetBSDではwd0)を想定するものとします。
尚、シングルユーザーモードにおいてプロンプトに入った段階では、ハードディスク上のルート[/]パーティションは読み取り専用となっているため、[mount -u -w /]とします。
マルチブート構成で複数のOSをインストール済みで他のブートローダではなく、NetBSDのブートセレクタ[bootselect code]をインストールしたい場合、また、これをインストール後にデフォルトで起動するOSを変更したい場合には、次のようにします。
ここでNetBSD用のブートセレクタ[bootselect code]を書き込み、これによるメニューを表示させたい場合には、[fdisk -u ...]のように指定します。
パーティション一覧が表示されるので各パーティションごとにパーティション番号を入力、サイズ指定などの変更が不要なら[Enter]、bootmenuでは、ブートセレクタで表示したいOSの(簡潔な)名称を入力などを経て書き込みます。
NetBSD用ブートセレクタがインストールされていてマルチブート構成になっている場合にデフォルトで起動するOSを変更したい場合には、[fdisk -B ...]のように指定、デフォルトとしたいパーティション番号を入力して書き込みます。
NetBSD標準のブートローダ(ブートメニュー)の内容は、[/boot.cfg]で設定されています。
仮想化ハイパーバイザXenのdom0やdomUやオリジナルカーネルを作成した場合などには、[/boot.cfg]を編集することになるでしょう。
ちなみにNetBSD標準ブートローダが存在しないとか壊れているということはないとは思いますが、[installboot]コマンドを使うと、これをインストールすることもできます。
NetBSDにおいてMBRを明示的に書き込みたい場合には、[fdisk -i ...]を実行します。
これでブートコードがMBRに書き込まれ、MBRが読み込まれるとアクティブなパーティションに処理を移します。
ただ、MBRに書き込まれたブートコードは、アクティブ(≒有効)となっているパーティションに処理を移す為のものなので何れかのパーティション(ディスク全体を使っている場合、1つめのパーティションと同じ)が[Active]になっていないと起動しません。
そこで念の為、[fdisk wd0]などとしてNetBSDのパーティションにあたる部分に[Active]という文字列があるかを確認、あれば、何もしなくてOKです。
もし、Activeとなっているパーティションがないとか、他のパーティションをActiveにしたい場合には、[fdisk -a wd0](IDE/ATAハードディスクの場合)とします。
そうすると「アクティブパーティションを変更したいですか?[n]」といった旨のメッセージが表示されるので[y]として[Enter]。
パーティション番号の指定でリストにある0から4までの内、該当する番号を入力、「この選択でいい?」といった旨のメッセージが出るので[y]。
「パーティションテーブルに書き込みますか?」といったメッセージに対して[y]としてシェルプロンプトに戻れば設定完了です。
ちなみに、それぞれdefaultの値なら[Enter]でも可です。
あとは、仮想マシンならISOディスクイメージ、物理マシンならCD/DVDやUSBメモリを取り出して[reboot]すれば、NetBSDの標準ブートメニューが表示されるはずです。
インストーラを使わないNetBSD/i386のインストールでは、NetBSDのfdisk、disklabel、installbootを使ったブートローダのインストール、セカンダリブートローダのコピーなどについても書いています。