
Ubuntu日本語フォーラム

ログインしていません。
update-grubについて教えてください。
一つのデスクトップPC(Dell Optiplex GX620)に対して複数のOSをインストールして
マルチブート環境を作ろうとしています。そこでgrubについてよくわからないことが
あるので質問させてください。
XP
Vista
Debian 3
Debian 4
Ubuntu 8.04
Ubuntu 9.04
を同じHDに入れようとして、何度か失敗した末、現在はMS系以外は入れることができました。
インストールする順番によってgrubのmenu.listが正しく書き換えられないのが原因だと思っています。
発生した症状
Debian 3の後にDebian 4を別のパーティションにインストールすると、grubのメニューではそれぞれが
選択できるのに実際にDebia 3を起動するとDeiban 4が起動してしまう。
Ubuntu 8.04の後にDebian をインストールするとUbuntuが起動途中にカーネルパニックでとまってしまう。
Debian 3 →Ubuntu 8.04 →Debian 4 →Ubuntu 9.04という順番で入れると
すべてのOSが選択でき、起動もできるようになりました。
grubについて調べてみるとupdate-grubというコマンドを使うとmenu.listを書き換えてくれることがわかりました。
Ubuntu 8.04上で実行しましたが、実行する前と内容は変わりませんでした、そこで同じ階層にある
default と menu.listの名前を変更して再実行したところ。今度はそれまであったDebian 3の記述がない
menu.listが作成されました。
man update-grub
には/bootに入っているカーネルとinitrdをmenu.listに書き込むと書いてあるのでUbuntu 8.04の/bootに
一つしかなければ、menu.listにUbuntu 8.04だけになってしまうのだとおもいます。
ただ、期待していた動きはUbuntu 8.04上でupdate-grubを実行すると、後からインストールしたDebian 4
とUbuntu 9.04を追加したmenu.listが作成されることでした。
どうすれば期待しているmenu.listが作成されるのか教えてください。
よろしくお願いします。
オフライン
こりゃ大変ですな(汗)
先ず、基本からということでそれぞれの起動プログラムを整理してみて下さいなw
XP(NTLDA)
Vsta(Bootmgr)
debian(GRUB)
Ubuntu(GRUB)
洗い出したらこれだけブートローダーがでてきた訳です。
あとは、これを整理して上手くそれぞれのOSを立ち上げる訳ですがw
ごめん急用が入りましたこの次はまた後で説明します。
そのうち識者が出てきたりして(汗)
オフライン
tncさんお忙しいところありがとうございます
誤解を招いている感じなので 追記しておきます
XPとVistaがもともと入っていたところに後からDebianとUbuntuを入れました
その段階でうまくGrubから起動できていましたのでブートローダの問題では
ないのです。
Grubを使うOSのメニューがうまくいかないという話です。
Windows系はうまくGrubからチェーンブートできていました。
お帰りお待ちしています :D
オフライン
Kenqa による投稿:
XPとVistaがもともと入っていたところに後からDebianとUbuntuを入れました
Kenqa による投稿:
Windows系はうまくGrubからチェーンブートできていました。
上記のことから現在は、debianとUbuntuのデュアルブートということですね。
う〜む??? 正確にいうとパッケージが各OSごとに2つだからマルチブートという訳か(汗)
いずれにせよ面倒くさいことしたねw
いっそのこと双方とも最新版のみにしたらどうでしょうかw
Kenqa による投稿:
その段階でうまくGrubから起動できていましたのでブートローダの問題では
ないのです。Grubを使うOSのメニューがうまくいかないという話です。
先ずは、人の話は最後まで聞きましょうねw
取り敢えず中途半端で終わってしまったので続きを説明しますね。
前述の通りそれぞれのOSでそれぞれのブートローダーを使用している訳ですが
WindowsとUbuntuだけの場合は何もせずともチェインロードしてくれた訳です。
しかしながらLinuxどうしのデュアルブートもしくはマルチブートの場合はそれぞれ個々のGRUBで起動しなくてはなりません。
現在の状況からして最後に導入したのが9.04であるならば、9.04のGRUBがメインで立ち上がっているのだろうと思います。
その9.04のGRUBから各OSのGRUBを呼び出す為にチェインロードする訳ですが。これはWindowsは自動的にできたのですがLinuxの場合は、同じGRUBを使っているので手動で行わなくてはなりません。
簡単に云うと、各OSからgrubコマンドを使って9.04のGRUBから呼べるように設定してあげる必要があります。
で、それをやる前に確認したいことが幾つかありますので、今立ち上がるGRUBのmenu.listをCodeタグを使ってコピペして下さい。
あとパーテーションエディタで表示されたデータをコピペして下さい。
それと申し訳ありませんがこれからまた出かけます。
帰宅が遅くなりそうなので下記のリンク先を参考にして下さい。
私よりも詳しい方が初心者向けに解説されております。
それではまた後ほど。
http://fedora.forums-free.com/topic-t67.html
最後の編集者: tnc (2009-05-20 07:03:04)
オフライン
それなら以前メンバのkiyoshiさんが参考に示したgrubの数珠繋ぎがピッタリ来るかと。
http://wikiwiki.jp/disklessfun/?multipleboot
順にチェインロードして全てのmenu.listを通過するので変更などもアップデートされるのでは?
2〜3のデュアルブートでは余り意味をなさないかと思いますが4以上になるとダントツに効果が有ると思いますが論点がずれた解答だったらすみません。
オフライン
Linuxどうしのデュアルブートもしくはマルチブートの場合はそれぞれ個々のGRUBで起動しなくてはなりません。
間違っています。
Grubは直接カーネルを起動できますので個々のGrubを起動しなければマルチブートができないわけではない。
9.04のGRUBがメインで立ち上がっているのだろうと思います。
Grubの起動にメインの概念はありません。
これはWindowsは自動的にできたのですが
自動で間違いないのだがインストーラーに依存する事なのでこれから先Windowsがチェインロードできるとは限らない。
同じGRUBを使っているので手動で行わなくてはなりません。
同じGrubを使っているからではなく元のブートローダーから異なるブートローダーに制御を移すからです。
GrubからGrubへのチェインロードでmenu.lstを自動で生成してくれるツールがないので手動なのでしょう。
オフライン
jackalope による投稿:
Linuxどうしのデュアルブートもしくはマルチブートの場合はそれぞれ個々のGRUBで起動しなくてはなりません。
間違っています。
Grubは直接カーネルを起動できますので個々のGrubを起動しなければマルチブートができないわけではない。9.04のGRUBがメインで立ち上がっているのだろうと思います。
Grubの起動にメインの概念はありません。
これはWindowsは自動的にできたのですが
自動で間違いないのだがインストーラーに依存する事なのでこれから先Windowsがチェインロードできるとは限らない。
同じGRUBを使っているので手動で行わなくてはなりません。
同じGrubを使っているからではなく元のブートローダーから異なるブートローダーに制御を移すからです。
GrubからGrubへのチェインロードでmenu.lstを自動で生成してくれるツールがないので手動なのでしょう。
御指摘ありがとうございます。どうも書き方が不味いので誤解を招いたようです。
ほぼ仰る通りです。
起動させたいOSのmenu.lstの一部をBIOS起動後に起動するGRUBのmenu.lstへコピペするだけで起動できるのですが
それでは、カーネルがアップデートする度に同じ作業をしなくてならないのでよくないです。
で、メインと書いたのはBIOS起動後に立ち上がるGRUBのことです。
そのGRUBから各GRUBを呼び出して各OSを起動できるのが望ましいと思います。
で、Windowsについては、スレ主の投稿によるとWindowsがあった領域へdebiannとUbubtuを上書きインストールしたようです。
ですからもう飛んでしまっているようです。
とりあえず、前レスにて指示したパーテーションの内容とmenu.listを読んでみないことには先へ進めません。
そのパーテーションの構成によっても違ってくるので・・・
私じゃ不甲斐ないので私がUPしたリンク先をみて貰えたら理解して頂けると思います。
最後の編集者: tnc (2009-05-20 13:29:33)
オフライン
皆さんご回答ありがとうございます。
機材のテストをするのに、いろいろなバージョンから行う必要があるのですが、それぞれのOS専用のPCが用意できないのに、
OSごとにテストする必要があるので、このようなややこしい形になっていました。一般的には古いバージョンのLinuxを一台の
PCに入れることはないんでしょうね。
現在は自分の意図しているようなmenu.listをUbuntu 9.04が作ってくれたのですが問題ないのですが、どうして今回は自動作成されて、その前は出来なかった、これをどのようなコマンドでやれば生成されるか、(インストーラーはどのようなオプションで走っているか)が知りたかったのが、もともとの質問の趣旨だったのですが、うまくお伝えできなかったようです。
日本語力の問題ですね:>
一般的な運用としてはこういう場合は一つのmenu.listを更新するのではなく、それぞれgrubとmenu.listをもって
自分が起動する分の情報だけにするってことですね。
もう少し読み込んで この運用方法に修正してみます。
オフライン
Kenqa による投稿:
一般的な運用としてはこういう場合は一つのmenu.listを更新するのではなく、それぞれgrubとmenu.listをもって
自分が起動する分の情報だけにするってことですね。
もう少し読み込んで この運用方法に修正してみます。
う〜む???
砕けた状態で云うとmenu.listは目次見たいなものです。
で、BIOS起動直後に現れる目次に別の目次から単純にコピペしたらそのOSは起動するのですが、それをやるとカーネールが
バージョンアップする度に書き換えなくてはなりません。これは非常に効率が悪いですよね。
そこで、いま起動する目次に起動したいOSの目次にリンクしなさいと命令を出してあげるんですよw
その命令を出すのにちょっとコツがあってですね。
その目次(ややこしいからGRUBと以後書きますね)を各OSをインストールしたパーテションの先頭(PBR)にきちんとインストールしてあれば、BIOS起動直後に現れるGRUBに呪文を書くだけでいいんですけど。
問題は、Kenqaさんがどうやってインストールしたのか現時点では断定できません。
そこで、BIOS起動直後に現れるGRUBのmenu.listをコピペして頂いてかつパーテーションエディタの結果を投稿して頂けると、ある程度、検討が付くのではないかと思います。それと同じデストリですからどちらかひとつで構わないと思いますよw
どうしても心配ならライブCDで起動してみて様子を見るのもいいかと思います。
まあ用心深いのであれば長期サポートのLTSでいいと思います。
とにかく出来るかぎりの情報を提供して頂けると識者の方々がらアドバイスが頂けると思います。
最後の編集者: tnc (2009-05-20 22:42:52)
オフライン
そうですよねKenqaさん、インストール時の動きが再現できればいいですよね。
Windowsの判断方法の説明はたまに見かけますけど、後は謎です。
grub4dosが各パーティションの /boot以下を探し出す見たいですが
grubの場合もオプションではないかもしれませんね。
作ると面白いかも。起動時の実行は難しいけどOS上で実行して各パーティションを順に巡り /boot 以下の
kernel,initrd.img,vmlinuzの名前を拾い出してmenul.istに追加、、、ボツっすよね。
オフライン
私も色々なOSを1台のPCに入れています.
当初は同じような失敗、カーネルパニックにあい、やり直しをさせられましたので、フムフムと読ませて頂きました。
Kengaさんの最初の質問のなかに、”MS系以外”とありますが、私はMS-XPもマルチブートできています。
これはGRUBのマニュアルにも書いてあると(思いましたが)、XP,VISTAは1番最初にInstallします(そうしないとかなり厄介です)。
LINUXの環境のMBR、PBRをXP(VISTA)がInstall時に書き換えてしまうので、後からではGRUB(Linux)がBootできなくなります(ました)。
Kengaさんと同じですがUbuntuを最後にするのが結論になります。経験上の手順ですが、
1.XPをインストール
XPのBoot Loaderは(HD0)書き込まれます(MBR)。
XPそのものはパーティション2(HD0,1)にいれています。普通だとP1(HD0,0)に入れるところですが。
2、3、他のLinuxをインストール。
ここではGOS(=Ubuntu 8.04)のインストール時にGRUBもP5に入ります。
Puppy LinuxはP6に入れています。ここでもGRUBのインストールはします。
最後にUbuntuのMENU.LSTにマニュアルで 書き直したほうがうまくいきます。
PuppyのGRUBがROOT=UUIDをうまく認識できないようですので、root=/dev/sda6
ように単純化して入れます。
4.Ubuntu8.10(9.04)を最後にインストール(P1)
GRUBはP1以外にインストールする。ここではP5をUbuntuとGOSの共用のGRUBにしています。
GRUBのMENU.LSTはこの時自動生成され、XP、GOS, Puppy, Ubuntuがメニューにでてきます。
Puppyだけはマニュアルで書き換えます。これはGRUBが /boot/vmlinuz を自動検索する際、Ubuntu, GOSと
カーネルの名前が同じためBootの位置を間違え、カーネルパニックをおこすからです。
Ubuntu系はvmlinuzにVersion番号を与えるためGRUBが混乱しないようです。
Debianでのカーネルパニックも同じような原因かと推測します。
まとめると、夫々のLINUXの夫々のパーティションにGRUBを入れる(PBRとして)。
MBR(HD0)はXP(VISTA)のまま。
MENU.LSTは最後に入れたGRUBのMENU.LSTを使う。
GRUBのBoot Imageは
STAGE1.0
STAGE(1.5)2.0
でこれが各パーティションのPBRに描かれ、夫々の/BOOT/GRUB/MENU.LSTにリンクするようです。
つまりLinuxのインストール毎(GRUBを使う場合は)にPBRが作られていきます。
このPBRのGRUBは独立していると考えたほうがいいです。
起動時のGRUBがMENU.LSTに従い、/dev/SDAx にある vmlinuz を読むのがBoot Sequenceのようです。
ですから例えば使われない GRUB(Puppy の/boot/grub)を削除してもPuppy はP5からブートできます
ブートイメージはGRUBのコマンド(立ち上げ時のブートメニューから起動できます)で:
>root (hd0,3) :GRUBのboot imageのある場所を指定。
>setup (hd0,4) :GRUBのイメージをPBRにコピーできます。
あまりお薦めではありませんが希望のGRUB(MENU.LST)がうまく使えない場合の対処法です。Partition EditorでBoot位置の変更ができるバックアップ(Boot CD)を用意してから使うことになります。
下記は私のMENU.LSTの一部です。御参考に。UUIDはLinuxの hwlst コマンドでご自分のPCのHDDのIDを見れます。UbuntuのGRUBだと指定のパーティションIDをMENU.LSTに取り込みます。PUPPY,KNOPPIX等はしてくれません。GRUBの設定SHELLが夫々のLinuxで違う一例です。
default 0
fallback 4
timeout 15
color white/blue cyan/black
title gOS, kernel 2.6.24-19-generic (on SDA4)
root (hd0,4)
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=802d3d16-a796-4e1a-b2ef-c18ca7608ca1 ro quiet splash loglevel=0
initrd /boot/initrd.img-2.6.24-19-generic
title Ubuntu 8.10 Primary GX1 Linux kernel 2.6.27-7 JP (on SDA1)
root (hd0,0)
kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=616789ec-2cf7-4e3a-8adf-a3be183d7783 ro quiet
initrd /boot/initrd.img-2.6.27-7-generic
savedefault
title Microsoft Windows XP SP3 Edition
root (hd0,1)
chainloader +1
savedefault
makeactive
title Puppy 4.1.2 GX1-P6 (on SDA6)
root (hd0,5)
kernel /boot/vmlinuz root=/dev/sda6
** END
GRUBの特性で、(HD0,5)=/dev/sda6 のようにパーティション番号がずれるのにご注意ください
オフライン
default 0 fallback 4 timeout 15 color white/blue cyan/black title gOS, kernel 2.6.24-19-generic (on SDA4) root (hd0,4) kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=802d3d16-a796-4e1a-b2ef-c18ca7608ca1 ro quiet splash loglevel=0 initrd /boot/initrd.img-2.6.24-19-generic title Ubuntu 8.10 Primary GX1 Linux kernel 2.6.27-7 JP (on SDA1) root (hd0,0) kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=616789ec-2cf7-4e3a-8adf-a3be183d7783 ro quiet initrd /boot/initrd.img-2.6.27-7-generic savedefault title Microsoft Windows XP SP3 Edition root (hd0,1) chainloader +1 savedefault makeactive title Puppy 4.1.2 GX1-P6 (on SDA6) root (hd0,5) kernel /boot/vmlinuz root=/dev/sda6 ** END GRUBの特性で、(HD0,5)=/dev/sda6 のようにパーティション番号がずれるのにご注意ください
これひょっとして他のOSのGRUBからそのままコピペしただけなのでしょうか?
それだったらカーネルの更新毎に同じことを繰り返さなくてはいけませんよ。
単純にいうと古いカーネルしか使えないです。
チェインロードすれば、BIOS起動直後に現れるGRUBから各OSのブートローダーを呼び出せるので、各OSが最新版のカーネルにバージョンアップしたら最新版のカーネルで起動できる訳です。ですから態々menul.istを手動で更新するプログラムなんて必要ないんですけどorz
とりあえず先日、ひさしぶりにマルチブート環境を作ってみましたので私のmenul.istを参考にして下さいな。
splashimage (hd0,1)/boot/grub/splashimages/98478-gentoo-splash.xpm.gz default 0 timeout 10 ### BEGIN AUTOMAGIC KERNELS LIST ## lines between the AUTOMAGIC KERNELS LIST markers will be modified ## by the debian update-grub script except for the default options below ## DO NOT UNCOMMENT THEM, Just edit them to your needs ## ## Start Default Options ## ## default kernel options ## default kernel options for automagic boot options ## If you want special options for specific kernels use kopt_x_y_z ## where x.y.z is kernel version. Minor versions can be omitted. ## e.g. kopt=root=/dev/hda1 ro ## kopt_2_6_8=root=/dev/hdc1 ro ## kopt_2_6_8_2_686=root=/dev/hdc2 ro # kopt=root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro ## default grub root device ## e.g. groot=(hd0,0) # groot=b7cdc323-caf1-4314-82d0-35aae8efd373 ## should update-grub create alternative automagic boot options ## e.g. alternative=true ## alternative=false # alternative=true ## should update-grub lock alternative automagic boot options ## e.g. lockalternative=true ## lockalternative=false # lockalternative=false ## additional options to use with the default boot option, but not with the ## alternatives ## e.g. defoptions=vga=791 resume=/dev/hda5 # defoptions=quiet splash ## should update-grub lock old automagic boot options ## e.g. lockold=false ## lockold=true # lockold=false ## Xen hypervisor options to use with the default Xen boot option # xenhopt= ## Xen Linux kernel options to use with the default Xen boot option # xenkopt=console=tty0 ## altoption boot targets option ## multiple altoptions lines are allowed ## e.g. altoptions=(extra menu suffix) extra boot options ## altoptions=(recovery) single # altoptions=(recovery mode) single ## controls how many kernels should be put into the menu.lst ## only counts the first occurence of a kernel, not the ## alternative kernel options ## e.g. howmany=all ## howmany=7 # howmany=all ## specify if running in Xen domU or have grub detect automatically ## update-grub will ignore non-xen kernels when running in domU and vice versa ## e.g. indomU=detect ## indomU=true ## indomU=false # indomU=detect ## should update-grub create memtest86 boot option ## e.g. memtest86=true ## memtest86=false # memtest86=true ## should update-grub adjust the value of the default booted system ## can be true or false # updatedefaultentry=false ## should update-grub add savedefault to the default options ## can be true or false # savedefault=false ## ## End Default Options ## title Ubuntu 9.04, kernel 2.6.28-11-generic kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro quiet splash initrd /boot/initrd.img-2.6.28-11-generic title Ubuntu 9.04, kernel 2.6.28-11-generic (recovery mode) kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro single initrd /boot/initrd.img-2.6.28-11-generic title Ubuntu 9.04, memtest86+ kernel /boot/memtest86+.bin ### END DEBIAN AUTOMAGIC KERNELS LIST title Other operating systems: root title Microsoft Windows XP Home Edition root (hd0,0) chainloader +1 savedefault makeactive title openSUSE 11.1 root (hd0,5) chainloader +1
これは、以下の構成になっております。
sda1 XP
sda2 Kubuntu 9.04
sda3 拡張パーテーション
sda5 NTFS(共有領域)
sda6 Open SUSE Linux
sda7 swap
ちょと画像が見にくいかもしれませんが御了承下さい。
まず注意しなくてならないのは、最初導入したLinux以外はPBRにGRUBをインストールすることです。
後でインストールしたLinuxのGRUBをMBRにインストールするとそのGRUBに書き換えられてしまいます。
ですから、USBデバイスの記録某体へインストールする際に誤ってMBRに突っ込んでトラブルのはそれです。
で結局、今回の場合はマスタードライブのみを使用するわけですから、各パーテーションがドライブになる訳です。
新規にインストールしたOSが拡張パーテーションにあるのであれば
title openSUSE 11.1
root (hd0,5)
chainloader +1
ただこれだけで目的のGRUBにアクセス出来る訳です。
これがプライマリー(基本領域)だと
title Microsoft Windows XP Home Edition
root (hd0,0)
chainloader +1
savedefault
makeactive
でよい訳です。
ただし、注意しなくては行けないのはXPはNTRDAですから別のブートローダーであり先頭領域に置いとかないと厄介です。
あとのGRUBは最初に導入したもの以外はすべてPBRにいれておいて下さい。
尚、GRUBのインストールの仕方(Ubuntu系デストリの場合)は、以下のリンク先を参考にして下さい。
https://wiki.ubuntulinux.jp/UbuntuTips/UsbInstall/InstalltoUSBStorage
拡張ボタンに注目して下さい。
あとその他のOSについてはそれぞれです。
因みにOpen SUSEは自動的にGRUBがインストールされたようで後で手直ししました。(汗)
と言う訳で、詳しいことは前レスで上げたリンク先で先輩が初心者向けにまとめてありますので参考にして下さい。
私の不味い説明よりも分かり易いと思います。
一部、パーテーション構成の表記に誤りがありました。その後、訂正いたしましたので御了承下さい。
最後の編集者: tnc (2009-05-23 05:01:33)
オフライン
構築されたmenu.lstは日常使われているのでしょうか。
menu.lstは手打ちで入力されたのですかw
tncさんの仰っている事が理解出来るようになれでばなぁwww
解らない所が有るので教えていただきたいのですが
ただし、注意しなくては行けないのはXPはNTRDAですから別のブートローダーであり先頭領域に置いとかないと厄介です。
あとのGRUBは最初に導入したもの以外はすべてPBRにいれておいて下さい。
これはNTRDAを先頭領域にというのはMBRですか?PBRですか?
GRUBは最初に導入した物はMBRに入れろと言う意味ですよね。
と言うことはNTRDAというのはPBRですか?
#13で訂正されたと言うことは普段使用しているmenu.listではなかったのですね。
参考にするのは止めますw
以下もよく参考にしてみますよwww
tnc による投稿:
とりあえず先日、ひさしぶりにマルチブート環境を作ってみましたので私のmenul.istを参考にして下さいな。
コード:
splashimage (hd0,1)/boot/grub/splashimages/98478-gentoo-splash.xpm.gz
default 0
timeout 10
### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below
## DO NOT UNCOMMENT THEM, Just edit them to your needs
## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
## kopt_2_6_8=root=/dev/hdc1 ro
## kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro
## default grub root device
## e.g. groot=(hd0,0)
# groot=b7cdc323-caf1-4314-82d0-35aae8efd373
## should update-grub create alternative automagic boot options
## e.g. alternative=true
## alternative=false
# alternative=true
## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
## lockalternative=false
# lockalternative=false
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash
## should update-grub lock old automagic boot options
## e.g. lockold=false
## lockold=true
# lockold=false
## Xen hypervisor options to use with the default Xen boot option
# xenhopt=
## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0
## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
## altoptions=(recovery) single
# altoptions=(recovery mode) single
## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
## howmany=7
# howmany=all
## specify if running in Xen domU or have grub detect automatically
## update-grub will ignore non-xen kernels when running in domU and vice versa
## e.g. indomU=detect
## indomU=true
## indomU=false
# indomU=detect
## should update-grub create memtest86 boot option
## e.g. memtest86=true
## memtest86=false
# memtest86=true
## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false
## should update-grub add savedefault to the default options
## can be true or false
# savedefault=false
## ## End Default Options ##
title Ubuntu 9.04, kernel 2.6.28-11-generic
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro quiet splash
initrd /boot/initrd.img-2.6.28-11-generic
title Ubuntu 9.04, kernel 2.6.28-11-generic (recovery mode)
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=b7cdc323-caf1-4314-82d0-35aae8efd373 ro single
initrd /boot/initrd.img-2.6.28-11-generic
title Ubuntu 9.04, memtest86+
kernel /boot/memtest86+.bin
### END DEBIAN AUTOMAGIC KERNELS LIST
title Other operating systems:
root
title Microsoft Windows XP Home Edition
root (hd0,0)
chainloader +1
savedefault
makeactive
title openSUSE 11.1
root (hd0,5)
chainloader +1これは、以下の構成になっております。
sda1 XP
sda2 Kubuntu 9.04
sda3 拡張パーテーション
sda4 NTFS(共有領域)
sda5 Open SUSE Linux
sda6 swap
最後の編集者: hir0 (2009-05-23 16:13:31)
オフライン
Kenqaさん、そして皆さんこんにちわ!
私のノートPCの一台も下記のようにマルチブートで使用しています。(中身は頻繁に変わっています。)
sda1 Windows 7 RC
sda2 swap
sda3 Ubuntu 9.04
sda4 論理パーティション
sda5 Fedora 11 rc
sda6 PCLinux
sda7 MEPIS
sda8 Moblin 2.0
sda9 Dreamlinux 3.5
私はブートローダーはMBMを用いているのですが、結局「2段階式」にはしなくなりました。理由は次の方法で簡単に対処できてしまっているからです。(あくまでも対症療法的なものなので、釈然としない思いで用いてはいるのですが。。。)
Kenqaさんが書いておられた通り、「update-grub」コマンドは便利で、まずはこれを試みます。これでうまく行けばシメタもの。とても簡単に済んでしまいます。
・・・が、書いておられる通り、完全ではないんですよね。
うまくいったり、行かなかったり。。。うまく行ったと思っても、一部が認識されていなかったり。。。
・・・というのも、「update-grub」コマンドが万能ではないという以前に、ディストリビューションごとに、Grubのインストールの仕方(できること)がまちまちという事もあって、どうしようもない事もありますし。。。
「update-grub」コマンドでうまく行かなかった場合、すなわち、grubのmenu.listが正しく書き換えられなかった場合、第2の方法として、次の方法(有名なGrubの再インストール方法)で対処してしまっています。
■Ubuntu上でGrubの再インストール
sudo /usr/sbin/grub-install /dev/sda
*「sda」の部分は環境によって異なります。
*Windowsや他のディストリビューションを後から入れて、Grubが書き換えられてしまいUbuntuが起動できない場合には、以下の方法で起動後に、上のコマンドを実行すればいいものかと。
1、ライブCD/USBで起動、2、起動画面で「F6キー」押下 3、boot=casper・・・以降を全部消して、root=/dev/sdaX などに書き換えて起動。(XにはUbuntuが入っているパーティション番号。IDEタイプのドライブの場合にはhdaX等に)
Ubuntuに乗り換えてから、かなりの回数この方法を試みてきて、今のところは一度も失敗した事はないのですが、私も何かもっといい方法はないものかなぁ・・・と常々思っているところでした。
皆さんの情報、とても参考になります。
オフライン
hir0さんへ
返そうかどうしようか迷ったのですが、やっぱり返すことにしました。
hir0 による投稿:
構築されたmenu.lstは日常使われているのでしょうか。
menu.lstは手打ちで入力されたのですかw
tncさんの仰っている事が理解出来るようになれでばなぁwww
解らない所が有るので教えていただきたいのですが
はい、あなたが引用されたmenu.listをそのまま使っております。
尚、すべてを手打した訳ではありません。
チェインロードするには一部、書き加えなけれはならないので下記の部分だけ書き加えてあります。
よく読んで頂ければすぐ判ると思います。
title openSUSE 11.1
root (hd0,5)
chainloader +1
hir0 による投稿:
#13で訂正されたと言うことは普段使用しているmenu.listではなかったのですね。
参考にするのは止めますw
参考にして頂いて構いませんよw
ただあなたの環境でそのまま使えるかどうか判りません。
お気付きかと思いますが他のデストリを導入しておりますので若干の違いはあるかと思います。
訂正したのは、パーテーション構成の表記に誤りがありましたので書き直しました。
hir0 による投稿:
これはNTRDAを先頭領域にというのはMBRですか?PBRですか?
GRUBは最初に導入した物はMBRに入れろと言う意味ですよね。
と言うことはNTRDAというのはPBRですか?
私が解説すると不味いのでこちらを参考にして下さい。
http://ja.wikipedia.org/wiki/NTLDR
hir0さんは、これくらいのことは知っておられるものと思っておりました。
そうでないとGRUBに関する数々の投稿は出来なかったのではと思っております。
わたしの思い違いであれば誤ります。
ただ、あなたが何か意図的に問いかけたのであれば不愉快です。
最後の編集者: tnc (2009-05-23 17:45:01)
オフライン
そうですか、不愉快な気分にさせてしまいましたね。
直接カーネルをロードせずに各PBRのローダーをキックして個々の起動ファイルを読み込む手法はしっていましたし、一般的な手法と言われるメンバもいますよ。(多数のOSを使用しないので、そのメリットについては以前は余り考えていなかったけど)
今までの流れでfm280さんのmenu.lstを引き合いに出して語るほどの何かが有ると思ったのですがどうでしょう、tncさんにはそう言うオーラが有る!!
理解できない部分が幾つか残りますので今回は参考は見送ります。
脱初心者、やっと初級者なのでお許しを。
オフライン
hir0 による投稿:
そうですか、不愉快な気分にさせてしまいましたね。
直接カーネルをロードせずに各PBRのローダーをキックして個々の起動ファイルを読み込む手法はしっていましたし、一般的な手法と言われるメンバもいますよ。(多数のOSを使用しないので、そのメリットについては以前は余り考えていなかったけど)
なぜ理解できているのにNTRDAを引き合いにだしたのですか?
あなたがやっていることは揚げ足取りですよ。
当然、そのことを理解していないと、このスレッドはもとより他のスレッドでお答えになられていたことと辻褄が合わないですよね。
すべて、御存知であるのなら合えて問いかける必要はないと思います。
hir0 による投稿:
今までの流れでfm280さんのmenu.lstを引き合いに出して語るほどの何かが有ると思ったのですがどうでしょう、tncさんにはそう言うオーラが有る!!
fm280さんからお返事をいただいてないので未だに解決してないのです。
ただ単にコピペしただけではどうにもならいのですが、何かある方法を用いて手を加えているのなら
それを教えて下されば納得するのですが・・・
いずれにせよ回答が無いのでなんとも云えません。(汗)
hir0 による投稿:
理解できない部分が幾つか残りますので今回は参考は見送ります。
脱初心者、やっと初級者なのでお許しを。
何か奥歯にモノが挟まったような事を云われると後味わるいんですけど。
一度、行動規範をよくお読みになられたほうがいいのではないのでしょうか。
そのようなお考えでおられるのなら今後、一切あなたへ回答することはないでしょう。
最後に、私も識者ではありません。
いろんなサイトで揉まれて勉強させて頂いてここまで来ました。
その中でも当サイトとリンク先のサイトでは大変御世話になっております。
双方とも大変優れたサイトだと思われます。
その優れたサイトの雰囲気を壊す事だけはやめていただきたいと思います。
とは云うモノの、そんな私もまだまだ初心者の域を越えておりません。(残念ながら)
でも持ちうる情報は、なるだけ提供し皆さんのお役に立てば良いと思っております。
そういった中で得る物も沢山あるのでどんどん活用していって、皆の備忘録になっていけば良いと思います。
最後の編集者: tnc (2009-05-23 20:40:51)
オフライン
これは想像ですが、Kenqaさんはそれぞれの OS の選択画面の間を自由に行き来できるように設定したいのではないでしょうか。
であるならば次のように設定してみて下さい。
話をわかりやすくする為に
sda1=(hd0,0) XP
sda2=(hd0,1) Vista
sda3=(hd0,2) Debian 3
sda4=(hd0,3) Debian 4
sda5=(hd0,4) Ubuntu 8.04
sda6=(hd0,5) Ubuntu 9.04
にインストールするとします。
ます、上から順にインストールして行きます。
この時、Linux系 は全て Grub をそれぞれの PBR にインストールします。
そして以下のサイトなどを参考に Ubuntu9.04の Grub を Vista のブートマネージャーに『Grub』の名前で登録します。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a013dualbootvista.html
その後それぞれの menu.lst の ### END DEBIAN AUTOMAGIC KERNELS LIST 以下を次のように書き換えます。
### END DEBIAN AUTOMAGIC KERNELS LIST title Microsoft Windows root (hd0,0) chainloader +1 title Debian 3 root (hd0,2) chainloader +1 title Debian 4 root (hd0,3) chainloader +1 title Ubuntu 8.04 root (hd0,4) chainloader +1 title Ubuntu 9.04 root (hd0,5) chainloader +1
書き換えた部分でそのOS自信のチェインロード設定をコメントアウトします。
例えば Ubuntu9.04 だったら次のようにします。
### END DEBIAN AUTOMAGIC KERNELS LIST title Microsoft Windows root (hd0,0) chainloader +1 title Debian 3 root (hd0,2) chainloader +1 title Debian 4 root (hd0,3) chainloader +1 title Ubuntu 8.04 root (hd0,4) chainloader +1 #title Ubuntu 9.04 #root (hd0,5) #chainloader +1
いずれにしろ、menu.lst の手修正は必要になります。
ちょっとコマンドを打つだけで全ての OS の起動設定が全て自動で記載されるという訳には、どうやらまだいかないようです。
オフライン
などと偉そうに書きましたが、未検証です。
さすがにこれだけの環境は構築できませんので。
#VistaとXPのマルチブートがそもそも無理。
#もしかしたら、grub4dos使った方が楽かも?
##そこまでするならむしろMBM使った方がいいか?
オフライン
GHO による投稿:
などと偉そうに書きましたが、未検証です。
さすがにこれだけの環境は構築できませんので。
#VistaとXPのマルチブートがそもそも無理。
#もしかしたら、grub4dos使った方が楽かも?
##そこまでするならむしろMBM使った方がいいか?
GHOさん
わかりやすく解説をしていただきましてありがとうございました。
結局これはVistaのブートマネージャから呼んでいるということでよろしいのでしょうか?
おかしなことを云っているようでしたら御指摘下さい。(汗)
なんかXPのNTLDAでも同じようなことが出来ると聞いたことがあります。
私も、ずいぶん前ですがKNOPPIXをクリーンインストールしたときにNTLDAに乗っけた記憶があります。
あとで不要になり削除することになりました。その際にboot iniを書き換えるのを知らずにいたそんな時期もありました。
それはさておき、それだったらいっそのことMBMもありかと思います。
ただ私自身、MBMを使ったことがないので具体的な情報は示せません(汗)
個人的には、GRUBでチェインロードすることで要領を得ているので、いまのところ問題はありません。
あとVistaとXPのデュアルブートについては、GHOさんのお考えと同感です。
どうしても、どちらかの環境が欲しければバーチャルボックス等を利用して仮想化すれば用をなすと思います。
実際、私のノートPCはそうしております。
最後の編集者: tnc (2009-05-24 00:29:39)
オフライン
VistaとXPのデュアルブートの場合は、Vistaのブートマネージャから呼ばないと だめなんですよ。
Vista のローダーからは XP を呼べるけど、XP のローダーからは Vista は呼べないので。
XPだけなら NTLDA に乗っけてもいけます。
MBMは私もよく分りません。
とりあえずGrubで済まそうとするので(笑)
きちんと使えば便利そうですけどね。
最後の編集者: GHO (2009-05-24 00:19:45)
オフライン
GHO による投稿:
VistaとXPのデュアルブートの場合は、Vistaのブートマネージャから呼ばないと だめなんですよ。
Vista のローダーからは XP を呼べるけど、XP のローダーからは Vista は呼べないので。
XPだけなら NTLDA に乗っけてもいけます。
ですよね。
なんか私も聞いたことがあります。(たしか以前、お会いしたトピックでMBRを復旧する際にあぼ〜んされてた記憶が(汗))
GHO による投稿:
MBMは私もよく分りません。
とりあえずGrubで済まそうとするので(笑)
きちんと使えば便利そうですけどね。
よかった、同じ仲間がいてホットしましたw
オフライン
tnc による投稿:
たしか以前、お会いしたトピックでMBRを復旧する際にあぼ〜んされてた記憶が(汗)
そこは忘れて下さい(滝汗)
オフライン
ちょっとコマンドを打つだけで全ての OS の起動設定が全て自動で記載されるという訳には、どうやらまだいかないようです。
全てのOSは無理ですがLinuxとWindowsならうまくいくかもしれないシェルスクリプトを作ってみました。
1台のHDDに2種類のUbuntuでのテストですがチェインロードのメニューができました。
#!/bin/sh
## This is copied from Debian Installer for generate with otherOSes menu.lst ##
echo "*** generate /boot/grub/menu.lst.otheros.........."
menu_file_orig=/boot/grub/menu.lst
menu_file_new=/boot/grub/menu.lst.otheros
tmpfile=/tmp/menu.lst.tmp
device_map=/boot/grub/device.map
probed_os=$(os-prober)
newline="
"
IFS="$newline"
write_otheros() {
cat >> $tmpfile <<EOF
# This entry added by custom script for other OSes on $partition
title $title
root $grubdrive
EOF
case $shortname in
MS*|Win*)
grubdisk="$(echo "$grubdrive" | sed 's/^(//; s/)$//; s/,.*//')"
case $grubdisk in
hd0)
cat >> $tmpfile <<EOF
makeactive
EOF
;;
hd*)
cat >> $tmpfile <<EOF
map (hd0) ($grubdisk)
map ($grubdisk) (hd0)
makeactive
EOF
;;
esac
esac
cat >> $tmpfile <<EOF
chainloader +1
EOF
}
convert () {
tmp_disk=$(echo "$1" | sed -e 's%\(\(s\|h\|v\|xv\)d[a-z]\)[0-9]*$%\1%')
tmp_part=$(echo "$1" | sed -e 's%.*/\(s\|h\|v\|xv\)d[a-z]\([0-9]*\)$%\2%')
tmp_drive=$(grep -v '^#' $device_map | grep "$tmp_disk *$" | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%')
if [ -z "$tmp_drive" ]; then
echo "$1 does not have any corresponding BIOS drive." 1>&2
exit 1
fi
if [ -n "$tmp_part" ]; then
echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%"
else
echo "$tmp_drive"
fi
}
num=$(grep -n "END" $menu_file_orig | cut -d: -f1)
head -n $num $menu_file_orig > $tmpfile
for os in $(echo $probed_os); do
title=$(echo "$os" | cut -d: -f2)
shortname=$(echo "$os" | cut -d: -f3)
partition=$(mapdevfs $(echo "$os" | cut -d: -f1))
grubdrive=$(convert "$partition") || true
if [ -n "$grubdrive" ]; then
write_otheros
fi
done
cat $tmpfile > $menu_file_new
rm -f $tmpfile
clear
echo "Success make a new menu.lst.otheros file !"
## end of scriptオフライン
2つ以上のOSでは期待した結果が得られないので下記の3箇所を変更。
11行目probed_os=$(os-prober)を削除して下記2行追加
probed_os=/tmp/probedos.tmp
os-prober > $probed_os || true
69行目for os in $(echo $probed_os); doを
for os in $(cat $probed_os); do
に変更
80行目に
rm -f $probed_os
を追加
注:スクリプトを実行するにはデフォルトでインストールされているパッケージだけではエラーが出るかもしれません。
エラーが出たときは必要なパッケージをインストールして下さい。
オフライン