
Ubuntu日本語フォーラム

ログインしていません。
Ubuntuの初心者で、勉強中の年をとった学生です。前に、この同じフォーラムの別なカテゴリーにご教示をお願いしましたが、途中でなしのつぶてになり、少しビビッております。もし、何か失礼等ありましたら、正直におっしゃって下さいます様お願い申し上げます。
こちらのカテゴリーでは皆様、ご親切に回答をされているのを拝見しまして、ここなら何らかの回答が得られるのでは?と思い投稿させて頂きます。また、一応フォーラムのトピックを見た積もりなのですが、既にご回答がありましたらご容赦願います。
今回、Windos7または、VistaとUbuntu9.04のデュアルブートをしたく、色々と勉強を兼ねて挑戦をしております。同じHDDへのインストールとデュアルブート、別HDDへのそれぞれのインストールとデュアルブート、トリプルブート、Ubuntuを別パーティションへ移動、WindowsやUbuntuのイメージを別に持ち緊急時のリカバリにする、または別のマシンに展開する、などです。
ここで、下記問題が発生しまして、対処方法が良く分かりません。どなたかご教示頂けましたら幸いです。
また、その際に、GRUBの流れや場所、動きなどもご教示頂けましたら大変助かります。特に、同じHDDだと問題ないのに
何故、別のHDDにインストールだと問題があるのか?
私なりにGrubの流れを調べました感じでは、
Stage1 - Stage1_5 -Stage2 と繋がり、
Stage1は、MBRまたはPBRに入り、昔のブートストラップローダーで単純に次のStage1.5を呼ぶだけのプログラム。
*MBRの場合には、Stage1.5は62番目のセクターに入れられる?? なら、PBRの時にはどうなっているの?
Stage1.5は、良く分かりません。何となくファイルシステムを決めるのか、ファイルシステムに合わせてStage2に
つなげるのか?
Stage2は、ファイルシステムを解釈できるので、/boot/grub以下の必要なファイルを使い、O/Sを起動する?
すみません、これ以上は、分かりませんでした。また、理解が間違っているかもしれません。
何故なら、Stage1がMBRやPBRの先頭に入るのであれば、Stage1.5やStage2は何処にあっても1プログラムとして
動きそうに思えるからです。であれば、どこのパーティションにあっても問題ないのでは?と、思えます。
ただ、Stage1がどのような形でStage1.5をアドレスしているのかが良く分かりません。また、GrubコマンドのInstallで
Stage1からStage2への指定だけでStage1.5はどのように指定するのかも良く分かりませんでした。
WindowsとUbuntuが同じHDDですと、今までに皆様がされておられます手順で問題なくWindowsのブートマネージャーで
ブートが出来るのですが、
-Windows を sda1(C:ドライブ) にインストール
-Ubuntu を sda2 にインストール
-Grubをsda2のPBRにインストール
-ddコマンドによりsda2の最初の512バイトを取り、sda1にコピー
-BCDにエントリを登録
<やりたい事>
2台あるHDDにそれぞれWindows7を1台目に、Ubuntu904を2台目にインストールして、Windowsのメニューでデュアルブート
をするです。
Windowsを1番目のHDD、Ubuntuを2番目のHDDにそれぞれインストールして、1台のHDDと同じ手順でやってもWindowsのブートマネージャーでブートをしようとすると、”GRUB_"が表示されてハングアップしてしまいします。
そこで、同フォーラムの別のトピックも見たのですが、最終結果が良く分かりませんでした。また、出来ましたら上記同じHDDの
手順と同じに統一したいと思っていますので、他プログラムを使わないで、とも思っております。
同フォーラムの別のトピックにもありましたが、
-Grubをsdb1(PBR)ではなく、sdb(MBR)にインストールして、DDコマンドで抽出し、sda1にコピーをして試しましたが、
”ERROR 17”が出てハングアップしました。
以上ですが、よろしくお願い致します。
オフライン
逆じゃダメですか?
手順としては、
HDD1にWindowsをインストール。
HDD2をブートドライブにして、Ubuntuをインストール。GrubもHDD2のMBRに。
機種によりけりですが、これでブートドライブを切り替えればHDD1の素のWindows起動も可能ですし、通常はHDD2からのブートにしておけば、GrubによりUbuntuとWindowsのデュアルブートが可能になります。
#場合によっては物理的な結線の変更が必要かも知れませんが。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
”ERROR 17”が出てハングアップしました。
エラーが出るパターンが対処しやすいかも。
OS選択画面でUbuntu選択後、カウントダウン中に[esc]キーを押す。
Ubuntu 9.04, kernel 2.6.??-??-generic
を選択して[E]キー。
root で始まる行は無いと思うので書き足します、(有れば、、、ゴメンなさい終わりです)
一番上段にカーソルを合せて大文字の[o]キー([shift] + [o]).
root (hd1,0)
↑↑↑を記入、カッコなどキー配列が狂うかも、探してください。記入後、エンターキー。
[b]キーで起動です。上手くいけばUUIDをただしく指定するかroot (hd1,0)を登録するかです。
----------------------------------------------------------------------------
GRUB_ で止まる現象はmenu.lstを見つけられない時にも起こるようです、前回レスが止まったのも読みましたがライブCDでHDDのシステムを起動出きるのですから何かしらの位置情報の設定がおかしい様ですね。
オフライン
皆様、早速のご回答ありがとうございます。
'kaorin'様ありがとうございます。GRUBの方がWindowsまで見てくれて良いとは思うのですが、今回は私としましては、Windows
のブートでUbuntuとのマルチブートを試したいと思っております。一応、同じHDDでのマルチブート(Vista,W7,Ubuntu)をGRUBからのブートでは、今回の勉強の最初のテストで行いました。何もせずにただUbuntuを最後にインストールするだけで、マルチブートが完成しました。未だ、2台のHDDでは試しておりませんが。一応最終目標がWindows Server 2003(2008)にVista,W7,Ubuntuのイメージを持ち、ワークステーションにマルチブートを展開する(調べる事がいっぱいありますが)。にしております。
でも、ご質問大変ありがとうございます。何でも言って頂けますと大変安心して投稿できます。
'CMasami'様、同じくアドバイスありがとうございます。今回マルチブートをするに当たって、このサイトも読ませて頂きました。他のサイトのトピックも合わせまして、参考にさせて頂き、インストール手順を上記’#1’のように、同じHDD内なら問題なくマルチブートが完成致しました。また、Ubuntuのパーティションも別に切ってそこへの移動も上手く行きました。でも、どうしても2台目のHDDにUbuntuを
入れてのマルチブートが出来ないのです。
でも、貴重なお時間を割いて調べて頂きまして、大変ありがとうございました。
'hiro'様、具体的な解決案、ありがとうございます。早速試しました所、「esc」キーが効きませんでした。OS選択画面でUbuntu選択後、即「esc」キーを押したのですが、直ぐにエラーメッセージが出て駄目でした。ちなみに、カウントダウン?もありません。
Ubuntu選択後、即下記エラーメッセージが出ました。(前から同じエラーメッセージです)
-OS選択
-即エラーメッセージ表示
GRUB Loading stage1.5,
GRUB Loading, please wait...
Error 17
です。尚、上記メッセージ間には時間差はなく、見た目には即全てが表示されます。
以上です。何か参考になりましたでしょうか?
ちなみに、もしご存知でしたらGRUBをPBRにインストールした場合、Stage1、Stage1.5は何処にあるべきなのでしょうか?
Stage2は、/boot/grub内にあるので通常のプログラムとして起動されるのですね?
Stage1はPBRの最初のセクターに配置されるのでしょうね?そしてStage1.5は? GRUBのインストールがMBRの場合には
Stage1はブートストラップの中に書かれ、Stage1.5はセクター62?に書かれるのですか?どうしても繋がりが理解できておりません。ご教示頂けましたら大変助かります。
以上、よろしくお願い致します。
オフライン
具体案と言っても正解かどうかは分かりませんが、Stage1.5は62ではなく第2セクター以降です。
Stage1.5は無事に機能しているが/boot/grub/stage2を見つけられない。
で、その位置、今回は2台目のHDDの/boot/grubを探し出せていない可能性を考えたのですが(エラー17)
GRUB_ もmenu.lstを読み込めない可能性が有ると言うことでやはり根本的な原因は同じかも。
--------------------------------------------------------------------------------
#4の続きですが、同じ内容を別のアプローチで行います。
2台目のHDDの/boot/grub/menu.lstを確認します。
編集するにはスーパーユーザーの権限が必要です、端末から
$ sudo gedit
でテキストエディタを開くと変更、保存が出来ます、/boot/grub/menu.lstを開いてください。
以下の箇所を探してください、menu.lstの後方に有ります(カーネルバージョンやUUIDの番号は同じでは有りません)
title Ubuntu 9.04, kernel 2.6.28-14-generic
uuid e38ome56-000-0005-8c7b-7735c677334d
kernel /boot/vmlinuz-2.6.28-14-generic root=UUID=e38ome56-000-0005-8c7b-7735c677334d ro quiet splash
initrd /boot/initrd.img-2.6.28-14-generic
quiet
折り返されていますがtitle,uuid,kernel,initrd,quietの5行です。
そうだ、変更前にバックアップを。menu.lst.bkなど別名で保存してください、改めてmenu.lstを開き
titleの下のuuidの行を削除します(先頭のuuidの文字も)代わりに以下を記述して保存します。
root (hd1,0)
hd1,0は2つ目のHDDの第一パーティションを指定しています(0が一つ目を表しています)
オフライン
以下のコマンド実行例で使用したのものは,此方の環境で
MBR にインストールした stage1 を stage1.mbr
PBR にインストールした stage1 を stage1.pbr
としてコピーしたものです.
また,「stage1 が 直接 stage2 にバトンを渡すのか?」,「stage1.5 は stage1・stage2 のどちらと同じドライブにインストールされるのか?」は状況によって違います.
以下の内容が orange634さんの状況に当てはまるかは現在の情報からははっきりとは解りません.
== 起動できない理由の推測 ==
stage1 が次にロードする stage1.5/stage2 の存在するドライブは stage1 のオフセット 64 の 1 バイトに格納されています.
$ hexdump -s 64 -n 1 -e'"%d\n"' stage1.mbr 255
数値 255 は 「ブートドライブと同じ」 を表しています.
grub-install での「ごく普通」のインストールでは stage1 と stage1.5/stage2 は同じブートドライブに配置されますので255 が通常の値です.
/dev/sdb の MBR/PBR に「ごく普通」にインストールした stage1 を /dev/sda にコピーして /dev/sda からブートした場合,
stage1 は「同じドライブ」の /dev/sda に stage1.5/stage2 を期待することになります.
== 解決法 ==
次の3つの方法が思いつきますが,どれも私には経験が有りません.結果も保証出来ません.人柱覚悟でしょう.
1) 既にコピーした stage1 のオフセット 64(0x40) の 1 バイトを hexedit 等で grub の表記で (hd1) にあたる 129(0x81) に書き換え.
2) grub-install で /boot のあるドライブ /dev/sdb とは別のドライブの PBR に stage1 をインストールした上でコピー.
注:MBR へのインストールではおそらく stage1 は 「同じ」ドライブのセクター 1 に stage1.5 を期待する.
3) grub シェルの setup コマンド または install コマンド(setup コマンドは内部でこのコマンドを呼び出す)のオプションを駆使して
stage1 のオフセット 64 に stage1.5/stage2 の存在するドライブを明示的に書き込みつつ stage1 をインストール,そしてコピー.
== インストール先を PBR から MBR に換えてメッセージが変わった理由の推測 ==
stage1 が次にロードする stage1.5/stage2 のドライブ上での位置(セクタ単位)は stage1 のオフセット 68 の 4 バイトに格納されています.
$ hexdump -s 68 -n 4 -e'"%d\n"' stage1.mbr 1 $ hexdump -s 68 -n 4 -e'"%d\n"' stage1.pbr 123044305
此方でブートドライブの位置を調べると,
stage1.mbr が次にロードする セクター 1 には stage1.5 が,
stage1.pbr が次にロードする セクター 123044305 には stage2 が
有りました.
orange634さんの状況で,stage1.pbr を /dev/sda にコピーして /dev/sda からブートした場合,
stage1.pbr は /dev/sda の セクター x ( x はかなり大きい数値)をロードしますが,それは stage1.5 でも stage2 でもありません.
その結果が
orange634さん による投稿:
GRUB_"が表示されてハングアップしてしまいします。
でしょう.
stage1.mbr を /dev/sda にコピーして /dev/sda からブートした場合は /dev/sda のセクター 1 をロードします.そこに以前の
orange634さん による投稿:
色々と勉強を兼ねて挑戦をしております。同じHDDへのインストールとデュアルブート、... 略 ...などです。
の stage1.5 が残っているのではと推測します.
その結果が
orange634さん による投稿:
”ERROR 17”が出てハングアップしました。
でしょう.
オフライン
<やりたい事>
2台あるHDDにそれぞれWindows7を1台目に、Ubuntu904を2台目にインストールして、Windowsのメニューでデュアルブート
をするです。
このやり方、何度か挑戦して失敗したり成功したりしています。
原因を絞り込めていないのですが、BIOS の設定がからんでいるかもしれません。
参考程度ですが、上手くいった時はたしかこんな手順だったと思います。
Ubuntu をインストールする前に HDD2 から起動する用に BIOS を設定。
↓
Ubuntu をインストール。grubは /dev/sdb に。
↓
Ubutnu が起動できる事を確認。
↓
端末を起動して、ddコマンドで /dev/sdb の grub のイメージを切り出す。
↓
Vista のブートローダーに登録。
↓
HDD1 から起動するように BISO を変更。
↓
起動。
#確実なのは kaorin さんが仰っている、HDD2 から起動をかけるやりかたです。
オフライン
私の環境では[sda1]Windows, [sda5]Ubuntuで
MBRはWindowsからでboot.iniからgrub4dosを呼んでいます。
/dev/sdaにStage1.5 , /dev/sda1にntldr , /dev/sda5 は空っぽです。
$ grub-install /dev/sda5
grub> root (hd0,4)
grub> setup (hd0,4)
全てエラー無く完了しましたが/dev/sda5にStage1.5はセットされませんでした、不思議です。
grubコマンドで"embed" Stage 1.5 ファイルを埋め込むと有りますがエラー12となり、、、
う〜ん一日これで楽しみたいですが残念、修復方法の2と3を考えていたのですが昼休みが終わりそうです。
オフライン
皆様、たくさんのアドバイスをありがとうございます。すぐにでも色々と試したいのですが、今日と明日時間が取れません。明日、仕事の
インタビューになり、それに集中しなければならなくなりました。明日の夜にはご返事が出来ると思いますので、大変申し訳ございませんが、結果は明日までお待ち下さいます様、お願い申し上げます。色々とアドバイス本当にありがとうございます。
オフライン
ブートシーケンスのメモ -- grub のソースコードから理解できること
BIOS は MBR のブートローダを呼び出す前に DL レジスタをブートドライブを示す値に設定することになっています.
注:その点 buggy な BIOS もあるそうです.
grub の chainloader コマンドでも DL レジスタを設定してから次のブートローダを呼び出します.
BCD のエントリの記述で stage1 呼び出し時の DL レジスタの値を設定できれば問題は解決できそうですが,Windows の BootMgr のことは全く知りません.
>> 詳しい方にバトンタッチ
以下コードタグによる図式では () 内は次の stage のドライブを指示するため埋め込まれたバイト.
stage1 ではオフセット 0x40 に,stage1.5(Version0.97)ではオフセット 0x21a の位置.
0xFF = 255 : x86 の DL レジスタの値を使用=「ブートドライブと同じ」
0x80 = 128 : (hd0)
0x81 = 129 : (hd1)
* ごく普通のケース
/dev/sda: stage1(0xFF)/MBR → stage1.5(0xFF) → stage2
* 起動ドライブと別のドライブに linux をインストールするケース
または,着脱可能メディア /dev/sdb に全てインストールするつもりで,grub を間違えて /dev/sda にインストールしてしまう「ありがちな」ケース
/dev/sda: stage1(0xFF)/MBR → stage1.5(0x81)
↓
/dev/sdb: stage2* 同じドライブの PBR にインストールした stage1 をコピーし,BootMgr を使って同じドライブの Linux を選択するケース
おそらく stage1.5 は介在しない.BootMgr は DL レジスタに期待通りの 0x80 を設定していると推測される.
/dev/sda: BootMgr → stage1(0xFF)/NTFS (→ stage1.5(0xFF)) → stage2
* 今回のケース
stage1 を別ドライブにコピーする場合,BootMgr の DL レジスタ設定を BCD エントリで 0x80 から 0x81 に変更出来ないならば,
stage1 に 0x81 が埋め込まれることが必要条件でしょう.
/dev/sda: BootMgr → stage1(0x81)/NTFS
↓
/dev/sdb: stage1.5(0xFF) → stage2または,stage1.5 を介さない場合で
/dev/sda: BootMgr → stage1(0x81)/NTFS
↓
/dev/sdb: stage2が目標の状態となります.
オフライン
しまった,書き忘れた.
einundzwanzighundertsechs による投稿:
ブートシーケンスのメモ -- grub のソースコードから理解できること
ソースコードを読み間違えている可能性は大いに有り得るので,「自分の目」で確かめて下さい.
オフライン
hir0さん による投稿:
全てエラー無く完了しましたが/dev/sda5にStage1.5はセットされませんでした、不思議です。
grubコマンドで"embed" Stage 1.5 ファイルを埋め込むと有りますがエラー12となり、、、
grub-0.97 の ソースコードによると PBR に grub をインストールする場合,stage1.5 を embed 可能なファイルシステムは JFS と ReiserFS に限られていました.
オフライン
BootMgr のことを全く知らないので単なる思いつきに過ぎないのですが,/dev/sdb に BootMgr が認識可能なパーティションを作って stage1 をコピー.
/dev/sda の BootMgr からそれを選択することは不可能なのでしょうか?
/dev/sda: BootMgr
↓
/dev/sdb: stage1(0xFF)/NTFS (→ stage1.5(0xFF)) → stage2オフライン
連続投稿,お見苦しくて申し訳有りません.
机上の論理に過ぎませんが,
#7 == 解決法 == のアイディアを図にしました.
何れも目標は
/dev/sda: BootMgr → stage1(0x81)/NTFS
↓
/dev/sdb: stage2の図式です.
1)現状の
/dev/sda: BootMgr → stage1(0xFF)/NTFS → エラー /dev/sdb: stage2
の stage1 の埋め込みパラメータ 0xFF を hexedit で 0x81 に変更して目標の図式へ
2) grub-install /dev/sdcX 等として,別のドライブの PBR に stage1 をインストール
/dev/sdb: stage2
↑
/dev/sdc: ??? → stage1(0x81)/PBRこの stage1 を /dev/sda の NTFS にコピーして目標の図式へ
3) grub シェルのコマンドを駆使して明示的に 0x81 を埋め込んで /dev/sdb の PBR にインストール
/dev/sdb: ??? → stage1(0x81)/PBR → stage2
この stage1 を /dev/sda の NTFS にコピーして目標の図式へ
オフライン
あ〜、早くPCの前に座りたいです。
いろいろ試したい衝動と深夜までのおつき合いとで板挟みです。
もう完全に個人的な興味になってしまい申し訳ないですが、本当に何時も勉強になります。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
オフセット 0x219 は パーティションです.
# 0x21? + 0x200 = 0x41?
# hexdump -s 0x40 -n 1 -C /dev/sda 00000040 ff |.| 00000041 # hexdump -s 0x419 -n 1 -C /dev/sda 00000419 02 |.| 0000041a # hexdump -s 0x41a -n 1 -C /dev/sda 0000041a ff |.| 0000041b
オフライン
しつこいですが,もう一つ.#11 の「ありがちな」ケースからの変化なので,確実性は高い?
現状の /dev/sda の Win の MBR のバックアップをとって,grub-install /dev/sda で /dev/sda の MBR に grub をインストール
/dev/sda: stage1(0xFF)/MBR → stage1.5(0x81) BootMgr
↓
/dev/sdb: stage2この stage1 を /dev/sda の NTFS 起動パーティションに移し,バックアップした Win の MBR を /dev/sda に書き戻す.
/dev/sda: BootMgr → stage1(0xFF)/NTFS → stage1.5(0x81)
↓
/dev/sdb: stage2オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
空論になってはイカンと思って,/dev/sda2 の linux を USBメモリ /dev/sdb の MBR から boot できるよう,
grub シェルで root (hd0,1) に続けて setup (hd1) として,埋め込みパラメータを確認してみました.
/dev/sda: stage2
↑
/dev/sdb: stage1(0x81)/MBR → stage1.5(0x80)stage1 の埋め込みパラメータは 0xFF ではなく 0x81 でした.
したがって,#11 の第 2 図式「ありがちな」ケースと #19 の変化形の 2 図式の
計 3 図式の記述において stage1(0xFF) を stage1(0x80) に訂正します.
オフライン
解決方法3はこんな感じで良いのかな?
なんだかGrubを色々弄っている時にgrubコマンドを見つけたので書いてみました。
またgrub弄りに戻ります、、、(う〜ん、よく解んないまま何だか知恵熱が出そう)
sda: BootMgr → Stage1(set.mbr) → Stage1.5 → Stage2 missing
↓
sdb: Stage1.5(new.1.5) → Stage2####################################################################################### #上記のsda(vista),sdb(Ubuntu)をsda(Ubuntu),sdb(USBメモリ)としてインストールした #sdb(USBメモリ)Stage1.5をUbuntuの物と入れ替え、sda(Ubuntu)のMBRをsda(vista)のCドライブに。 #構成を戻します。sda(vista),sdb(Ubuntu) #ライブCDからHDDを起動できると有りましたのでHDDから起動した場合です。 #Ubuntuは第一HDDの第一パーティションにインストールされていると認識されていると仮定。 #USBメモリは/media/diskにマウントされていると仮定。 #随時環境に置き換えてください。 #ホームフォルダに作成される backup.sdaは万一の事故の影響の及ばない場所へ退避させてください。 #その他のファイルは任意で保管して作業を。 ####################################################################################### $ sudo grub-install /dev/sda $ sudo cp -R /boot /media/disk $ sudo grub #↓ただの確認。 grub> find /boot/grub/menu.lst (hd0,0) #HDD (hd1,0) #USB grub> root (hd0,0) grub> setup (hd1) grub> install (hd1)+1 d (hd0) (hd1,0)/boot/grub/stage2 p (hd1,0)/boot/grub/menu.lst grub> quit $ cd $ sudo dd if=/dev/sda bs=512 count=2 > backup.sda $ sudo dd if=/dev/sda bs=512 count=1 > set.mbr $ sudo dd if=/dev/sdb bs=512 count=2 > shift.stage $ sudo dd if=sift.stage bs=512 skip=1 count=1 > new.1.5 $ sudo dd if=new.1.5 bs=512 skip=1 count=1 of=/dev/sda
#少し休憩。
オフライン
hirOさん、einundzwanzighundertsechsさん、GHOさん、kiyoshiさん
皆様、お忙しいのに大変すばらしいアドバイス、感謝いたします。
凄いですね!! 感動です!!
遅くなりました。私は今就活中で、今日インタビューがありました。しかし、3ヶ月の契約でしたので、検討中です。
自宅に戻り投稿拝見致しました。合わせて、できる限りの所で皆様のアドバイスを確認しました。einundzwanzighundertsechsさんの部分では確認できない部分がありますので、またよろしければご教示下さい。
先ず、hirOさんの#6ですが、云われました menu.lst を変更して試しましたが、全く同じエラーでした。この設定は以前に Ubuntu のパーティションを移動してブートした時に行いましたので間違いなく設定できていると思います。 --色々とやって行く内に分かったのですが、Error 17はGRUBのO/S選択画面が出る前、出た後にも出るエラーなのですね。今の所、WindowsのO/Sの選択画面は出ますがGRUBのO/S選択画面は出ていません。
einundzwanzighundertsechsさん、大変ご丁寧な且つ詳細な情報ありがとうございます。#7ですが、大変良く分かりました。ちょうど色々とためしている時に、云われておりますような感じで動いているのでは?とも思っておりましたが、具体的なアドレスの場所とか値、貴重な情報、本当にありがとうございました。私のも確認しましてオフセット64は255でした。そうですか、基本的にStage1,Stage1.5,Stage2は/boot と同じドライブにありますよね。まさか、GRUB開発時にMBRへインストールされたローダーが
分離され違うパーティションに置かされるとは考えなかったのでしょうね?また、基本的には hd0 がブートになるのですね。
また、hd0 内でのステージの分割までは考えられたのでしょうが、まさかhd0 と hd1~ とかに分かれようとは....と、云う所ですかね?Stage1ではこのブートドライブのパラメーターをちゃんと見ている分けですね。#21のテストにより確認された、と言う事にもなりますか? であれば、単純にGrubシェル、Grub-installコマンドにて、Stage1.5,Stage2のドライブをセットしてもらえれば、良いような気がします? (余談ですが、hexeditのリファレンスが分からないのですが、よろしければ教えて頂けますでしょうか?出来ればこのブートドライブの値を変えてブートしてみたいので)
”orange634さんの状況で,stage1.pbr を /dev/sda にコピーして /dev/sda からブートした場合,
stage1.pbr は /dev/sda の セクター x ( x はかなり大きい数値)をロードしますが,それは stage1.5 でも stage2 でもありません.その結果がorange634さん による投稿:
GRUB_"が表示されてハングアップしてしまいします。”
納得です。
”stage1.mbr を /dev/sda にコピーして /dev/sda からブートした場合は /dev/sda のセクター 1 をロードします.そこに以前の
orange634さん による投稿:
色々と勉強を兼ねて挑戦をしております。同じHDDへのインストールとデュアルブート、... 略 ...などです。
の stage1.5 が残っているのではと推測します.
その結果がorange634さん による投稿:
”ERROR 17”が出てハングアップしました。”
確かに可能性はありますし、このようであって欲しいです。そうすると良く理解できます。ですが、sda にはWindowsが最初からずっと
一貫して入れてありますので、GRUBを sda に入れた、と言う事はないように思います。また、フォーマットでは、セクター1は消されませんか?もし、消されなければPBRの方では可能性はあるかもしれません。
でも、すばらしい解析です。大変参考になります。ちなみに、GRUBを再度インストールしていた時に、ハタ、と気が付きました事がありますので、下記コピーを添付します。-もちろん、既にご存知の事とは思いますが、これを見まして何か更なるお気づきがあれば、と思い記します。
grub> root (hd1,0)
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 17 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+17 p (hd1,0)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.
grub> setup (hd1,0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1,0)"... failed (this is not fatal)
Running "embed /boot/grub/e2fs_stage1_5 (hd1,0)"... failed (this is not fatal)
Running "install /boot/grub/stage1 (hd1,0) /boot/grub/stage2 p /boot/grub/menu
.lst "... succeeded
最初が sdb (MBR) へのGRUBのインストールです。2番目が sdb1 (PBR) へのインストールです。
勝手な解釈ですが、MBRへのインストール時は、Stage1.5がセクター1から17セクター埋め込まれる。
PBRへのインストール時には、Stage1からStage2へ繋がり、Stage1.5は埋め込まれない。察する所、Stage1.5はファイルシステムにも関係していますが、実際にはStage1とStage2の距離を繋ぐのでは?Stage1は、わずか512バイトです。しかも昔の考えが継承されていれば、単純にファイルシステムも関係なしに、OSブートローダーに繋がれば良かったはずなので。でも、何故Stage1.5が埋め込まれたり、埋め込まれなかったりするのかは分かりませんが...全てStgae1.5を使うようにして、Stage1をPBRから抽出する時に、Stage1とStage1.5までの範囲で抽出(トータルで約10KB)できれば、いちいちStage1.5のために、MBRやPBRのセクター1に飛ぶ必要がないように思われます。これはあくまでも私の短い時間での調べた事なので、間違った解釈をしていましたら、申し訳ありません。取り合えず、長くなりましたので次に続くにします。
オフライン
おー間違っている(あっ私の事)#23
1k取らなきゃ行けないのに全部512bになっているorz
#23はなしで。
オフライン
あーっ#23ではなく#22をなしで。
いつの間にかorange634さんの書き込みが、すみません23ではなくて#22です。
オフライン