外付けドライブの2番目のパーティションにインストールされたFreeBSDを起動する方法

外付けドライブの2番目のパーティションにインストールされたFreeBSDを起動する方法

外付けハード ディスクの 2 番目のパーティションに FreeBSD 9.1 をインストールしましたが、コンピューターをそこから起動できません。FreeBSD は、USB フラッシュ ドライブに dd された FreeBSD memstick イメージを使用してインストールされました。

最初のパーティションは、バックアップが入っている ntfs パーティションです。FreeBSD のインストールが必要になったとき、FreeBSD をインストールするための空き領域を確保するために、最初のパーティション (Windows 内) を「縮小」し、その後 FreeBSD をインストールしました。ブート マネージャーのインストールを要求されることはありませんでした。

最初に起動しようとしたとき、エラー メッセージも表示されずに失敗しました (ブート マネージャーがインストールされていなかった可能性があります)。そこで、フラッシュ ドライブから起動し、コマンドを実行しましたboot0cfg -B /dev/ad1)(ad1 は外付けハード ディスクを指します)。起動すると、次のようなメニューが表示されます。

F1 Win
F2 FreeBSD
F5 First disk

F1 または F2 を押すと、「BOOTMGR が見つかりません」というエラー メッセージが表示されます。何が問題なのでしょうか?

FreeBSD インストールを起動するのを手伝ってください。

答え1

ハード ドライブ ad0 と ad1 の両方に boot0 ブート コードが必要であり、FreeBSD が配置されている ad1 のスライス (MBR パーティション) には boot1 が必要です。これは少しわかりにくいですが、MBR パーティション内で bsd ディスクラベルを使用するという昔のアーキテクチャ上の決定の結果です。

Boot0 は非常に小さく動的であるため、他の OS の適切なブートローダが続行できます。基本的に、boot0 は MBR にあります。Boot0 はディスクラベルを読み取ることができないため、パーティション (スライス) の最初のブロックをロードして、そのコードの実行にジャンプするだけです。

Boot1 は FreeBSD 固有のコードが実際に開始される場所です。メモリは FreeBSD カーネルに適したモードで設定され、boot1 コードは BSD ディスクラベルを読み取り、/ を検索し、名前でカーネル ファイルを検索できるほどファイルシステムを読み取ることもできます。Boot1 は非常に複雑で、ブート コード、モジュール、カーネルをさらにロードしてカーネルの実行を開始するなど、多くの処理を実行します。

ディスクレイアウトは次のようなものだと思います:

ad0 - 内蔵ハードドライブ (boot0)
ad0s1 - 内蔵ハードドライブの最初のパーティション (スライス)、C:\

ad1 - 外付けハードドライブ (boot0)
ad1s0 - 外付けドライブ上の FAT または NTFS パーティション (スライス)、D:\
ad1s1 - FreeBSD パーティション (スライス) (boot1)
ad1s1a - FreeBSD /
ad1s1b - FreeBSD スワップ
ad1s1c - FreeBSD /usr
...

boot0 および boot1 ローダーが必要な場所をメモしました。

これを手作業で行うと、FreeBSD の起動方法についての貴重な教訓が得られます。次に行うべき教訓は、/boot/ 環境の設定、カスタム イメージの変更、カーネル自体をロードする前にカーネル モジュールを選択して設定することです。

おそらく、これは主に学習目的で実行されており、インストールを簡素化することに興味があるのでしょう。NanoBSD は検討する価値があります。

関連情報