boot loader grubの install
sorry Japanese only
PAGE作成日 2005/04/22
最終更新日 2004/04/22
page size = Mbyte
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し
configureします
結果はこちら =>
grub-configure.txt
makeをして
結果はこちら =>
grub-make.txt
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に不一致がある。とかでしたが、私の場合はこれが原因ではありませんでした。
これは何やって直したでしょうか。
忘れました・・
19880
戻る