FreeBSD のブートローダーといえば boot0 ですが、
linuxではおなじみの GRUB を使って FreeBSD をロードしてみます。
使用する PC には、ハードディスクは 1台 。FreeBSD 4.8 がインストールされているだけで、ブートローダーは使用していません。
mico# fdisk -s /dev/ad0
/dev/ad0: 526 cyl 255 hd 63 sec
Part Start Size Type Flags
1: 63 8450127 0xa5 0x80
mico# cat /etc/fstab
# See the fstab(5) manual page for important information on automatic mounts
# of network filesystems before modifying this file.
#
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1f /tmp ufs rw 2 2
/dev/ad0s1g /usr ufs rw 2 2
/dev/ad0s1e /var ufs rw 2 2
/dev/acd0c /cdrom cd9660 ro,noauto 0 0
proc /proc procfs rw 0 0
/stand/sysinstall で、grub-0.92 をインストールします。
各stageが、以下に保存されます。
mico# pwd
/usr/local/share/grub/i386-freebsd
mico# ls
e2fs_stage1_5 minix_stage1_5 vstafs_stage1_5
fat_stage1_5 reiserfs_stage1_5 xfs_stage1_5
ffs_stage1_5 stage1
jfs_stage1_5 stage2
その他
mico# pwd
/usr/local/sbin
mico# ls -la grub*
-r-xr-xr-x 1 root wheel 115540 Mar 23 2003 grub
-r-xr-xr-x 1 root wheel 11697 Mar 23 2003 grub-install
-r-xr-xr-x 1 root wheel 2429 Mar 23 2003 grub-md5-crypt
フロッピーディスクを一枚用意して、stage1 と stage2 を コピーします。
mico# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
512 bytes transferred in 1.181090 secs (433 bytes/sec)
mico# dd if=stage2 of=/dev/fd0 bs=512 seek=1
dd: /dev/fd0: Invalid argument
192+1 records in
192+0 records out
98304 bytes transferred in 4.282234 secs (22956 bytes/sec)
このフロッピーディスクに grub が入りました。
これを使ってブートさせてみますので、PC を再起動させます。
BIOSで、フロッピーディスクがハードディスクより先にブートするようになっている環境で、PCの電源を入れると、
以下のようなメッセージが表示されます。
GRUB Loading stage2......
その後、以下のような入力画面になります。
GRUB version 0.92 (639 lower / 195520 upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
ヘルプを出してみる。コマンドがズラリ。
grub> help
blocklist FILE boot
cat FILE chainloader [--force] FILE
color NORMAL [HIGHLIGHT] configfile FILE
device DRIVE DEVICE displayapm
displaymem find FILENAME
geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm]
help [--all] [PATTERN ...] hide PARTITION
initrd FILE [ARG ...] kernel [--no-mem-option] [--type=TYPE]
makeactive map TO_DRIVE FROM_DRIVE
md5crypt module FILE [ARG ...]
modulenounzip FILE [ARG ...] pager [FLAG]
partnew PART TYPE START LEN parttype PART TYPE
quit reboot
root [DEVICE [HDBIAS]] rootnoverify [DEVICE [HDBIAS]]
serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY]
setup [--prefix=DIR] [--stage2=STAGE2_ terminal [--dumb] [--timeout=SECS] [--
testvbe MODE unhide PARTITION
uppermem KBYTES vbeprobe [MODE]
grub には入力補完機能があります。結構便利。
「root (hd0,」の状態で tabキーを押すと補完されて、いかのように表示されます。
grub> root (hd0,0,
Possible partitions are:
Partition num: 0, [BSD sub-partitions immediately follow]
BSD Partition num: 'a', Filesystem type is ffs, partition type 0xa5
BSD Partition num: 'b', Filesystem type unknown, partition type 0xa5
BSD Partition num: 'e', Filesystem type is ffs, partition type 0xa5
BSD Partition num: 'f', Filesystem type is ffs, partition type 0xa5
BSD Partition num: 'g', Filesystem type is ffs, partition type 0xa5
'a' , 'b' , 'e' , 'f' , 'g' は、パーティション番号(BSD風に言うとスライス)にあたり、
先の /etc/fstab を対応できることがわかります。
で、こんな感じに入力。
grub> root (hd0,0,a)
Filesystem type is ffs, partition type 0xa5
各々の説明
| root |
カーネルの存在するデバイスとパーティションを指定するコマンド。 |
| (hd0,0,a) |
BIOSから認識される最初のハードディスク(hd0,0,a) で、最初のパーティション(hd0,0,a) で、パーティションタイプが ffs (hd0,0,a) |
次は、kernel コマンドで、カーネルファイル名を指定します。
grub> kernel /boot/loader
[FreeBSD-a.out, loadaddr=0x200000, text=0x1000, data=0x24000, bss=0x0, entry
=0x200000]
最後に、boot コマンドでブートさせます。
grub> boot
これで、FreeBSD が起動されるはず。
今度は、ハードディスクにインストールしてみます。/boot/grub ディレクトリを作成して、stage2 をコピーします。
mico# mkdir /boot/grub
mico# cp stage2 /boot/grub/
次に、ロードするOSを選択するメニューを作成します。/boot/grub/menu.lst を作成して、
mico# cd /boot/grub/
mico# pwd
/boot/grub
mico# vi menu.lst
以下のような内容を設定します。
mico# cat menu.lst
timeout 3
default 0
title FreeBSD
root (hd0,0,a)
kernel /boot/loader
再度フロッピーディスクで起動させて、grub の画面になったら、インストール。
grub> install=(fd0)+1 (hd0) (hd0,0,a)/boot/grub/stage2 0x8000 p
フロッピーディスクを抜いて、再度電源を入れなおすと、grub のメニューが表示される。