実践編
コマンドをうまく組み合わせれば、あたながその内容を全く知らないパソコンの前に立って、GRUBのプロンプトを見たときでも、そのパソコンにインストールされているLinuxを起動させてしまうことができる。次のような手順である。
まずはとにかく接続ハードディスクとパーティションを確認しよう。これは「root (」と入力してTABキーだった。
grub> root (
Pssibile disks are: fd0 hd0 hd1
grub> root (hd0,
Pssibile partitions are:
Partition num 0, Filesystem type is ext2fs, partition type 0x83
Partition num 4, Filesystem type is ext2fs, partition type 0x83
Partition num 6, Filesystem type is ext2fs, partition type 0x83
Partition num 7, Filesystem type is unknown, partition type 0x82
|
沢山Linux Native(ext2fs)のパーティションがある。この中のどこかにカーネルがあるはずである。適当にあたりをつけて、ファイルを探してみる。どうせLinuxのカーネルなど、ルートか/bootにvmlinuzか何かの名前で存在しているに決まっているから、/vmlinzあたりで、探して見よう。
GRUB version 0.5.96.1 (640k lower / 3072k upper memory)
[Minimal BASH-like line editiing is supported. For the first word, TAB
lists possible command completion. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> find /boot/vmlinuz Error 15: File not found
grub> find /vmlinuz
(hd0,0)
|
/boot/vmlinuzでは見つからなかったが、「/vmlinuz」はあった。早速このパーティション(hd0,0)「/dev/hda1」をルートに指定して(これにより、そのパーティションに移動したイメージとなる)、更にルートディレクトリのファイルを見てみる。
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> find /
Possible files are: vmlinux-2.2.13-33 vmlinuz-2.2.13-33 vmlinuz initrd boot.b
chain.b os2_d.b boot.0200 boot.0308
|
ルートコマンドで、そのパーティションが確かにext2fs(Linux Native)であることも確認できた。「find /」のあとTABを打てば、/ディレクトリ配下のファイルを表示してくれる。ちょっとしたlsコマンドの役目を果たすという訳だ。
いろんなファイルが見つかったが、カーネルは「vmlinuz」で良さそうだ。きっとvmlinuz-2.2.13-33にシンボリックリンクが張ってあるのだろう。initrdもあるからRAMディスクも指定する必要があることも分かる。
次にルートパーティションを調べる必要がある。このパーティションが「(hd0,0)」であることから、ルートパーティションは「/dev/hda1」である可能性もあるが、昔からの習慣でカーネルをルートパーティションとは別のパーティションに置き、このブート用のパーティションを/bootとしてマウントしている可能性がある。それにルートパーティションは、SCSIハードディスクやセカンダリのハードディスクだという可能性もある。「cat」コマンドで「/etc/fstab」を確認しよう。
grub> cat /etc/fstab Error 15: File not found
grub> find /etc Error 15: File not found
|
「/etc」ディレクトリすら見つからない。やはりこのパーティション(hd0,0)「/dev/hda1」はルートパーティションではないようである。では、findで「/etc/fstab」を探しよう。
grub> find /etc/fstab
(hd0,4)
|
(hd0,4)「/dev/hda5」にあった。一応このパーティションに移って、/etc/fstabの内容を確認しよう。
grub> root (hd0,4)
Filesystem type is ext2fs, partition type 0x83
grub> cat /etc/fstab
/dev/hda5 / ext2 default 1 1 /dev/hda1 /boot ext2 default 1 1 /dev/hda6 /usr ext2 default 1 1 /dev/hda7 /home ext2 default 1 1 /dev/fd0 /mnt/floppy ext2 noauto,users 0 0
|
間違いない。ルートパーティションは/bootとは別のパーティションだ。さすがに「etc」ディレクトリは、別のパーティションにマウントはされていないようなので、/etc/fstabが見つかったこのパーティション(hd0,4)「/dev/hda5」が、ルートパーティションであることは間違いないようである。
これでカーネル、ルートパーティション、初期RAMディスクの位置を確認できたので当該Linuxを起動できる。
尚、ここで誤解されがちなのだが、ルートからみた場合、カーネルは/boot/vmlinuzなのだが、これはあくまで/dev/hda5パーティションをルートパーティションの/bootにマウントしているためにこう見えるのであって、/dev/hda5パーティション上ではあくまでファイルシステムのルートにこの「vmlinuz」は存在する。
従って、GRUBのカーネル指定では、root指定したパーティションのファイルシステム上で見える形、つまり、この場合は「/boot/vmlinuz」ではなく、「/vmlinuz」と指定する。initrdも同様である。
では、早速カーネルのあるパーティションにrootコマンドで戻って、起動してみよう。
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> kernel /vmlinuz root=/dev/hda5
[Linux-bzImage, setup=0xe00, size=0xa09e0]
grub> initrd /initrd
[Linux-initrd @ 0x7078000, 0x177000 bytes]
|
カーネルのロードも初期RAMディスクのロードもうまくいったようである。尚カーネルなどの指定は、直接パーティションも指定すれば、rootコマンドでそのパーティションを指定する必要はない。その場合、以下のような指定になる。
grub> kernel (hd0,0)/vmlinuz root=/dev/hda5
[Linux-bzImage, setup=0xe00, size=0xa09e0]
grub> initrd (hd0,0)/initrd
[Linux-initrd @ 0x7078000, 0x177000 bytes]
|
さあ、後はもうブートするだけだね。最後に「boot」コマンドを叩く。
grub> boot
・
ブートメッセージ
・
・
|
うまくLinuxが起動したらご喝采!!
同じような手法で、他のOSも起動できてしまう。Windows系のOSは特にカーネルなどの指定もないので、もっと簡単に起動できてしまうだろう。
こんな芸当ができるブートローダはGRUBをおいて他にはないだろう。