GRUB と USB 接続 FDD とブート FD
さとうふみやす です。 雑談にしようかと思ったのですが、起承転結が思いつかなかったので技術ネタ。 USB フロッピーディスクドライブを利用したときの GRUB ブートフロッピーディスクの作成方法を書きます。 MBR に stage1 を、その後ろに stage2 を入れる方法ではなく、 MBR に stage1 を、ファイルシステムの中に stage2 を入れる手順です。 ブートローダーが壊れたシステムに対してはもちろん便利ですが、 フロッピーディスクのファイルシステム内に memtest86 や memtest86+, BusyBox の静的リンクバイナリを入れておけば、 様々な場面で役に立ちますよ。 以上でピンと来ない方は、ここでさようなら…。
以下は MIRACLE LINUX V4.0 での手順ですが、ほかの Linux でも同様です。
まずは USB 接続のフロッピーディスクドライブをマシンに接続します。
するとカーネルが認識し、dmesg
(8) で確認すると次のようなメッセージが見られます:
usb 3-2: new full speed USB device using address 2
Initializing USB Mass Storage driver...
scsi3 : SCSI emulation for USB Mass Storage devices
Vendor: MATSHITA Model: FDD CF-VFDU03 Rev: 1026
Type: Direct-Access ANSI SCSI revision: 02
Attached scsi removable disk sdb at scsi3, channel 0, id 0, lun 0
Attached scsi generic sg2 at scsi3, channel 0, id 0, lun 0, type 0
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
SCSI device sdb: 2880 512-byte hdwr sectors (1 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 46 94 00
sdb: assuming drive cache: write through
SCSI device sdb: 2880 512-byte hdwr sectors (1 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 46 94 00
sdb: assuming drive cache: write through
sdb: unknown partition table
この場合、フロッピードライブは /dev/sdb
として認識されました。
それではドライブにフロッピーディスクを入れ、フォーマットします。
Linux だけでなく Windows システムでの利用も考慮すると、
ファイルシステムは VFAT がよいでしょう。
パーティションは必要ないので、デバイスまるごとフォーマットします。
デバイス名を間違えると悲惨なこと (ハードディスク内のファイルシステムが上書き) になるので、くれぐれも慎重に!
# mkfs -t vfat -v -I /dev/sdb
mkfs.vfat 2.8 (28 Feb 2001)
/dev/sdb has 1 head and 3 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 2880 sectors;
file system has 2 12-bit FATs and 4 sectors per cluster.
FAT size is 3 sectors, and provides 710 clusters.
Root directory contains 512 slots.
Volume ID is 44db30c4, no volume label.
次にフロッピーディスク内のファイルシステムをマウントし、 その中に GRUB の stage1, stage2 ブートローダーに入れ、 アンマウントします。
# mount /dev/sda /media/floppy
# mkdir -p /media/floppy/boot/grub
# cp -p /usr/share/grub/i386-asianux/stage? /media/floppy/boot/grub
# umount /media/floppy
stage1 は MBR に入れるのでファイルシステムにも置いておく必要はないと思うのですが、 それがない場合にこの後に実行する GRUB の操作方法を知らないので、今回は深く追求しません。 (ごめんなさい。知っている方、コメントください)
次に grub
(8) を起動します。
# grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.95 (640K lower / 3072K 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
(8) に対し、
/dev/sdb
が (BIOS から見たときに?) (fd0)
であること、
GRUB の stage2 (あるいは stage1_5) や grub.conf (menu.lst) などがあるファイルシステムが (fd0)
であることを教えてから、
フロッピーディスクの MBR に stage1 を書き込みます:
grub> device (fd0) /dev/sdb
device (fd0) /dev/sdb
grub> root (fd0)
root (fd0)
Filesystem type is fat, using whole disk
grub> setup (fd0)
setup (fd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/fat_stage1_5" exists... no
Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.conf "... succeeded
Done.
これで完成!
マシンを再起動しましょう。
BIOS の POST が完了後、フロッピーディスクがアクセスされているでしょうか?
その後、
と表示され、
GRUB のプロンプト GRUB Loading stage2...
まで表示されれば成功です。
grub>
以上は USB フロッピーディスクドライブ向けの解説でしたが、 ふつうのフロッピードライブでもほぼ同じ手順で作成できます。 また、それぞれの手順で作成したフロッピーディスクは相互に流用可能です。
コメント