boot loader grubの install
sorry Japanese only
PAGE作成日 2005/04/22
最終更新日 2004/04/22
page size = Mbyte


関連するページ SCSIからSCSIにコピー

grubを installすることになったきっかけ

vine linuxを再インストールやり直さず、単純コピーで楽して HDDの交換をしようと思ったのですが、
/bootパーティーションの容量変更したりすると LILOが起動しなくなってしまうのですね。

もう LILOと戦うのは嫌なので、Fedoraなどでは使用されているという grubという boot loader
へ乗り換えることにしました。


このページにて出てくるデバイス名の説明ですが、
/dev/sda は、現状で使用しているコピー元の HDD
/dev/sdb は、コピーして新しく起動させたい HDD

それぞれの HDDのパーティーション構造は以下のようになっています。
/dev/sda1    /boot
/dev/sda2    /usr
/dev/sda3    /home
/dev/sda6    /tmp
/dev/sda7    /
/dev/sda8    /var
/dev/sda9    /home/localhost/douga
/dev/sdaから vine linuxは起動していて /dev/sdbは umountの状態。
/dev/sdbは fdisk,mkfs終了し、/dev/sdaから /dev/sdbへのファイルのコピーも終了したけど、
/bootのパーティションのサイズを変えた為 LILOで起動しなかった。(LIで止まる /boot/boot.bの物理位置が変わった為)
/dev/sdaから起動してる状態で /dev/sdbへ /dev/sdbから起動するよう grubを書き込もう!
って所からスタートです!

grubの download

vine linuxでは aptとかでは提供されてないのかな?
本家から download出来ます。GNU GRUB - GNU project
(download => alpha.gnu.org:/gnu/grub と選ぶと ftpサイトに繋がります。)
私は、一番新しかった grub-0.96.tar.gzを downloadしましたが、拡張子が ext2fsというのもあります。
何がどう違うのか、どこにも説明が無いみたいで分かりませんが。
ちなみに grub-0.96.tar.gzにて ext3のパーティーションから問題無く boot出来ています。

install

まずは解凍します
[root]# tar zxvf grub-0.96.tar.gz

解凍したディレクトリーへ cdし
[root]# cd grub-0.96

configureします
[root]# configure
結果はこちら => grub-configure.txt

makeをして
[root]# make
結果はこちら => grub-make.txt

make installします
[root]# make install
結果はこちら => grub-make-install.txt

ここまで実行しても MBRの書き換えなど、現状起動している LILOの環境が
破壊されるようなことはありませんでした。
安心して make installやって下さい。

現状の boot環境の保存

まあ MBR書き換えて起動しなくなったら、現状の環境をファイルで保存しておいても
意味無いわけですが、一応。

保存するのは /bootディレクトリーと MBRです。

[root]# cd /boot
[root]# tar cvf /tmp/boot050422.tar .
./
./lost+found/
./kernel.h-2.4.22
./kernel.h
./initrd-2.4.22-0vl2.16.img
./System.map-2.4.22-0vl2.17
./autoconf-up.h-2.4.22-0vl2.17
./module-info-2.4.22-0vl2.17
./vmlinuz
途中略
./vmlinuz-2.4.22-0vl2.16
[root]# cd /tmp
[root]# dd if=/dev/sda of=MBR050422.dat bs=1 count=447
読み込んだブロック数は 447+0
書き込んだブロック数は 447+0
[root]#

もし、上記ファイルを書き戻す必要のあるときには、
cd /boot
tar xvf /tmp/boot050422.tar
cd /tmp
dd if=MBR050422.dat of=/dev/sda bs=1 count=447
で行くと思います。

又 MBRを抽出したファイルは、本当に MBRが書き換わったんだろうか?
前回エラーで起動しなかったときと違うデーターが書かれたのだろうか?
などを比較するのにも便利かもしれません。

diff MBR050422.dat MBR050422-2kaime.dat
などとやると、全く同じなら何も表示が出ませんが、少しでも違っていれば違うと表示が出ます。

grub boot環境の install

現状起動している HDDに対して grubの MBRを書き込むなら、以下のコマンドで良いでしょう。
[root]# grub-install /dev/sda

上記コマンドを実行すると、こんな結果となります。
[root]# grub-install /dev/sda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

# this device map was generated by anaconda
(fd0)     /dev/fd0
(hd0)     /dev/sda
(hd1)     /dev/sdb

あっという間に終了します。
私は 2度目なので何もコピーされませんでしたが、最初に行うと /boot/grubディレクトリーへ
ファイルが色々とコピーされたと思います。

後は /boot/grub/grub.confの編集です
私の現状の正常に起動する grub.confは以下のようになっています

default=0
timeout=3
title Vine Linux 2.17
        root (hd0,0)
        kernel /vmlinuz-2.4.22-0vl2.17 ro root=/dev/sda7
        initrd=/initrd-2.4.22-0vl2.17.img

vmlinux-2.4.22-0vl2.17
initrd-2.4.22-0vl2.17.img
は /dev/sda1の直下にあります。
/dev/sda1は /dev/sda7の bootディレクトリーへマウントしています。

変則的な環境での grubの install

私が今回行ったのは、/dev/sdaから立ち上げていて、べつ HDDの /dev/sdbへファイルをコピー
grubも /dev/sdbへ書き込む。
/dev/sdaを外して /dev/sdbが /dev/sdaとして bootするようにしたい!

ってのを行いたかったのですが、なかなか難しかったです。
特に grub-installを行うときのオプション、--root-directory= の指定は一体何なの?
と言うのが分かりづらかったです。

要は、grubで起動させたい / と boot の関係がある / がある所を指定しろ
って事だったのですね。

私は / と bootが別パーティーションなのですが、
/ は /dev/sdb7
bootは /dev/sdb1

これに対して grubを installするには以下のようにしておく必要がありました。

[root]# mount /dev/sdb7 /mnt
[root]# mount /dev/sdb1 /mnt/boot
/mnt下に bootさせたい HDDが立ち上がったときの mountされた状況を構築しておいて

[root]# grub-install --root-directory=/mnt /dev/sdb

いやいや、色々やってみましたよ、ホント。

grubの errorメッセージ色々

色々戦ったので、その時経験した errorの対処方法を書いておきます


grubの起動メニューで起動させる項目を選ぶと Error 15が出る

/boot/grub/grub.confの記述が間違っています
kernel行 root= など思いつく限り色々な組み合わせで色々記述して、
正常に立ち上がる書き方を見付けましょう。

default=0
timeout=30
title Vine Linux 2.17-1
        root (hd0,0)
        kernel /vmlinuz-2.4.22-0vl2.17 ro root=/dev/sda7
        initrd=/initrd-2.4.22-0vl2.17.img
title Vine Linux 2.17-2
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.22-0vl2.17 ro root=/dev/sda7
        initrd=/boot/initrd-2.4.22-0vl2.17.img
title Vine Linux 2.17-3
        root (hd0,6)
        kernel /vmlinuz-2.4.22-0vl2.17 ro root=/dev/sda7
        initrd=/initrd-2.4.22-0vl2.17.img
title Vine Linux 2.17-4
        root (hd0,6)
        kernel /boot/vmlinuz-2.4.22-0vl2.17 ro root=/dev/sda7
        initrd=/boot/initrd-2.4.22-0vl2.17.img
思いつく限りの色々な書き方を記述しておき、ERROR 15が出たらメニューへ戻って次の項目。
とやっていけば、どの書き方が正規な書き方なのかがすぐに分かります。
上記では 2.17-1が正解です。


GRUB HARD DISK ERRORが出る

grub-installが成功したように見えて、作られた MBRが失敗してます。
オプション、実行するときの環境などを見直して grub-installやり直しが必要です。

MBRが成功すると GRUBメニューが出ます。


does not have any corresponding BIOS drive.が出る

/boot/grub/device.map内の記述が不足しています。
viエディターなどで、MBR書き込み先のデバイス名を記述しましょう。

エラーが出たときの実行例
[root]# grub-install /dev/sdd
/dev/sdd does not have any corresponding BIOS drive.
[root]#
device.map内に sddなんてデバイス名が書かれてないのに、書き込み先に指定したのでエラーとなった。


/boot/boot/grub になってしまう

grub-installするときの --root-directory= の指定先が間違ってます。

指定したディレクトリーから相対的に見て boot/grub以下に grub-installは
ファイルを書き込み、読み込みに行きます。
ですから /mntへ何かマウントして --root-directory=/mntと指定したら、
/mnt下は /mnt/boot/grub のような構造になっていなければなりません。


/boot/grub/stage1 でエラーが出る

googleすると /etc/fstabと /etc/mtabに不一致がある。とかでしたが、私の場合はこれが原因ではありませんでした。
これは何やって直したでしょうか。
忘れました・・

15532
戻る