
Ubuntu日本語フォーラム

ログインしていません。
GHOさん、アドバイスありがとうございます。
今、その手順にて試しております。結果は後ほど。
オフライン
取りあえず気持ち悪いので訂正を。
$ 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=18 > backup.sda $ sudo dd if=/dev/sda bs=512 count=1 > set.mbr $ sudo dd if=/dev/sdb bs=512 count=18 > shift.stage $ sudo dd if=sift.stage bs=512 skip=1 count=17 > new.1.5 $ sudo dd if=new.1.5 bs=512 skip=1 count=17 of=/dev/sda
オフライン
orange634さん による投稿:
hexeditのリファレンスが分からないのですが、よろしければ教えて頂けますでしょうか?出来ればこのブートドライブの値を変えてブートしてみたいので
ghex パッケージをインストールすると GUI の hex エディタが使えるようになります.アプリケーション -> プログラミング に追加されます.
orange634さん による投稿:
確かに可能性はありますし、このようであって欲しいです。そうすると良く理解できます。ですが、sda にはWindowsが最初からずっと
一貫して入れてありますので、GRUBを sda に入れた、と言う事はないように思います。また、フォーマットでは、セクター1は消されませんか?もし、消されなければPBRの方では可能性はあるかもしれません。
念のため
$ sudo hexdump -C -s 512 -n 512 /dev/sda
で確認して頂けませんか?
00000300 00 eb fe 4c 6f 61 64 69 6e 67 20 73 74 61 67 65 |...Loading stage| 00000310 31 2e 35 00 2e 00 0d 0a 00 47 65 6f 6d 00 52 65 |1.5......Geom.Re|
の行が見えたら /dev/sda のセクター 1 に stage1.5 が有ります.
orange634さん による投稿:
grub> root (hd1,0)
grub> setup (hd1)
grub> setup (hd1,0)
最初が sdb (MBR) へのGRUBのインストールです。2番目が sdb1 (PBR) へのインストールです。
$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /dev/sdb $ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /dev/sdb1 $ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /dev/sdb $ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /dev/sdb1
の結果を貼付けて下さい.
もし,前回の試みで NTFS にコピーしたものが保存してあるならば,それらに対し,
$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' stage1.mbr $ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' stage1.pbr $ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' stage1.mbr $ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' stage1.pbr
の結果も欲しいです.
Stage1.5の周辺についてはまた次の機会に.
オフライン
GHOさん、
云われました手順を踏んでインストールしましたが、結果は同じエラーになりました。何処か違っていたのですかね?
後、変な事に出くわしました。と、言いますのは、GHOさんの手順を少し勘違いしまして、単純にHDD2(sdb)からUbuntuをブート
出来るのかな?を確認しようと思い、BIOSの設定を変更して、HDD2からブートをしました。つもりが下記のようになりました。
原因が分かりません。
1.GHOさんの言われますようにHDD2からのブートをしたのですが、この時ついうっかり、hirOさんの云われました#6 menu.lst の設定(hd1,0)のままブートしてしまいました。
2.下記エラーが出ました。
Error 17 : Cannot mount selected partition.
Press any key to continue....
3.次に、同じGRUBのO/S選択メニューに戻り、(recovery mode)を選択してブートしました。問題なくブートできました。
menu.lst 内のこの該当部分は、UUID(sdb1)のままで、変更していませんでしたので。
4.次に、menu.lst 内の変更した(hd1,0)を該当UUID(sdb1)に戻し、ブートした所、これも問題なくブートできました。
5.次に、念のために menu.lst 内を再度変更で(hd1,0)の所を(hd0,0)にして、ブートした所、問題なくブートができました。
**ここで、何故?BIOSの起動順位は変更したが、マザーボードのSATA1,STA2のコネクションもそのままですし、/boot/grub 内の device.map 内も (hd0) /dev/sda, (hd1) /dev/sdb のままでした。
更に、hd0,0 はWindows7が入っているし、GRUBはインストールした事はありませんので、Stage1 ~STAGE2は入っていないはずです。また更に、MENU.LST 内の該当ルートディレクトリ指定も UUIDからROOT=/dev/sdb1 に変更してもブートが上手く出来ました。ここでは、sdb1に指定しても問題なくブートが出来ているのです。なのに、/boot (Stgae1?) のディレクトリは hd0,0 で良いのか?
何となく理解できておりません。 明日学業があるので、失礼致します。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
Windows が HDD リカバリデータ等の格納に隠しパーティションを使うことがあるように,
ブートローダも出来るなら一般のアプリケーションの目に触れないようにしたいので,パーティションやファイルシステムの見えざる「隙間」を利用します.
stage1 は 1 セクターに収まるかわり,ファイルシステムを認識せず埋め込んだドライブ番号とセクター位置で次の stage をロードします.
stage1.5 は「隙間」に収まるよう低機能(単一のファイルシステムのみ認識可能)に抑えてあります.
ところが高機能(複数のファイルシステム認識可能,ユーザインターフェース装備)な stage2 は「隙間」には収まりきらないので,ファイルシステムに置くことになります.
* stage1 → stage1.5 → stage2 と stage1.5 の場合
stage1.5 は「隙間」に収まっていますので,通常の動作で動かされることはなく stage1 は確実に stage1.5 にバトンを渡せます.
stage2 は一般のアプリケーションに「見えて」いますが,stage1.5 がファイルシステムを認識するので パス /boot/grub/stage2 に変化なければロード可能です.
* stage1 → stage2 と stage1.5 を介さない場合
#13 にもあるとおり,ext2 ファイルシステムには「隙間」が無く stage1.5 は埋め込めません.
したがって ext2 パーティションの PBR へのインストールでは stage1.5 は使われません.
その状態で stage2 を何らかのファイルシステム操作で「動かして」しまう
-- 例えば /boot/grub/stage2 を他のディスクに退避して,後で元に戻す --
と stage1 は stage2 をロード出来なくなります.
FAT のデフラグの様なものでも stage2 のセクター位置は変わってしまうでしょう.
stage1.5 はできれば使いたいが,諸処の事情でそうもいかない場合があると言うことだと思います.
実は stage1 は 次の stage の最初の 1 セクターだけをロードする機能しか有りません.
stage1.5 は内部でセクター 0 と 残りのセクターに分けられていて,セクター 0 が残りのセクターをロードします.
stage2 も stage1.5 と同じ構造を持ち,stage1 からロードされる場合は stage1.5 と同じ様に動作します.
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
#7, #15 で,
3) grub シェルのコマンドを駆使して明示的に 0x81 を埋め込んで /dev/sdb の PBR にインストール
とだけ記し,コマンドを明記しなかったのは orange634 さんから
grub> setup (hd1) ...略... 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) ...略... Running "install /boot/grub/stage1 (hd1,0) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded
の情報(#23)がもらえるかどうか,わからなかったからです.これで setup コマンドが内部で install コマンドをどう呼び出しているかが判明しました.
そのままだと前に説明したように 0xFF が stage1 stage1.5 に埋め込まれます.
「d オプションを追加して (hd1) を示す 0x81を埋め込めるだろうか? #15 の最後の図式に持ち込めるか?」
と考えていたのです.
PBR に stage1, stage1.5 を介さない場合
grub> install /boot/grub/stage1 d (hd1,0) /boot/grub/stage2 p /boot/grub/menu.lst
または MBR に stage1, stage1.5 を介する場合
grub> embed /boot/grub/e2fs_stage1_5 (hd1) grub> install /boot/grub/stage1 d (hd1) (hd1)1+17 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst
思考しただけで試行はしていません.
オフライン
全くの空論はイカンと思って,と言うよりむしろ個人的興味に屈して #34 の一番下だけ FAT な USB メモリ に試しました.引数は多少異なります.
stage1 には 0x81 が stage1.5 には 0xFF が埋め込まれました.起動実験はしてません.
オフライン
grubのHDD認識順はBIOSの設定に従います。
ので、HDD2から起動する場合は、HDD2の最初のパーテーションはgrub上では(hd0,0)として認識されます。
ここは間違えやすいのでrootを設定する場合は、気をつけてください。必ずしも/dev/sda1=(hd0,0)ではないのです。
また起動に際しては、/boot/grub 内の device.mapは影響を与えないと思いましたので(この辺うろ覚え)変更する必要はないかと思います。
ただ、どちらのHDDから起動するにせよ、Ubuntu9.04ならroot (hdX,Y)の代わりにUUIDをつかっていますのでmenu.lstの書き換えなしでUbuntuを起動できるはずなんですよ。
HDD2からの起動で使い続けるなら、Winの起動設定に関しては手を加えてあげなければいけないのですが、今回はそうではないのでその手順は省略してます。
今、Win環境なのであれですが、時間がとれたら再検証してみます。
オフライン
少しオフトピックです.grub シェルで遊んで見ようと思っている人(hir0さん?)へ,
マニュアルには何故か載っていない dump コマンドで grub シェルからイメージのコピーがとれます.
grub> setup (hd1) grub> dump (hd1)+1 /home/stage1.mbr grub> setup (hd1,0) grub> dump (hd1,0)+1 /home/stage1.pbr
コピー先は root コマンドで指定した先ではなく grub シェルを起動したシステム上になります.
root 権限の書き込みになるので大事なファイルを上書きしないよう注意してください.
dump コマンドはシステム起動前の grub コマンドラインからは使用不可です.
オフライン
フォロー有り難うございます、入出力も間違っていたとは。
起動を省く確認作業は行ったのですが、どうも最後のまとめがアウトですね。
grubコマンドの引数は合っているでしょうからUSBデバイスを代用して応用出来るよって事で。
bootファイルの場所を明示する為に(hd1,0)を提案したのですがだめでしたか。
起動順序をHDD2にしたのなら(hd0,0)はおかしく無いですよ。HDD1が起動しないときはmapで入れ替えになるのかな?
einundzwanzighundertsechsさん、有り難うございます。
知ら無い事に興味を持つと、ついのめり込んでしまいます、暫くはハマりそうです。
オフライン
grub> install (hd1)+1 d (hd0) (hd1,0)/boot/grub/stage2 p (hd1,0)/boot/grub/menu.lst
grubインストール後の初期値は0x40=0xffでしたがコマンド実行後0x81になりました。
オフセット68の4バイトは0x44からかもしれません、すみません、分かりません。バージョン0.97です。
何だかeinundzwanzighundertsechsさんの言ってることの確認見たいで変ですが個人的にはこのスレッドを参考に各ファイルの比較などして楽しんでます。
各オフセットの値を取得することで便利ツールが出来そうですね、コマンドが解らないときはGUIでパラメーターを変更させると楽かも(やらないけど。そしてstage2はそっとしておきます、、、)
オフライン
皆様、夜遅くまで、また朝早くから、ご教示大変ありがとうございます。また、大変お疲れ様でした。
#11-大変ありがとうございます。非常に分かりやすいです。流れと今後の最終目標と良く分かりました。また、GRUBの流れが分かり、「もやもや」の気持ちが取れ、スッキリしております。お忙しいのに本当にありがとうございます。
#12-すみません、私には、ソースコードから解析出来る能力を今は持っておりません。遠い昔(懐かしいな~)でしたらアセンブラーのプロでしたが、今では命令もかなり変わっている事でしょう。
#15-#11と同じく大変分かりやすいです。最終目標は良く分かります。
#16-hirOさん、コンピューターに触るのが大好きなのですね?私もです。ですから気になった事とかを出来るだけ試してみたいのです。
#17-kiyoshiさん、気になる点などをその都度云って頂き、大変ありがとうございます。
#19-実際に試させて頂きました。単純に、Ubuntuをsdb1 にCDから印スt-ロして、GRUBを(hd0) にインストールしました。
結果、/dev/sda : stage1 (0x80)/MBR -> stage1.5 (0xFF) になっていましたので、そのまま終わりました。
#22と#27-hirOさん、夜遅くにお疲れ様です。解決策3のサンプルありがとうございます。
#28-夜遅くまでお疲れ様です。また、大変ありがとうございます。すみませんでした。#29の書き込みと交差したみたいで、
einundzwanzighundertsechsさんの書き込みに気が付きませんでした。まさか、未だどなたか起きておられようとは...
本当にありがとうございます。
-先ず、sda に stage1.5 が入っていました!! Windowsを入れても、セクター1はそのままなのですね??
-他ご依頼の情報添付致します。
00000300 00 eb fe 4c 6f 61 64 69 6e 67 20 73 74 61 67 65 |...Loading stage|
00000310 31 2e 35 00 2e 00 0d 0a 00 47 65 6f 6d 00 52 65 |1.5......Geom.Re|
00000320 61 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd |ad. Error.......|
00000330 10 46 8a 04 3c 00 75 f2 c3 00 00 00 00 00 00 00 |.F..<.u.........|
00000340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000003f0 00 00 00 00 00 00 00 00 02 00 00 00 0f 00 20 02 |.............. .|
00000400
ubuntu@ubuntu:~$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /dev/sdb
ff
ubuntu@ubuntu:~$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /dev/sdb1
ff
ubuntu@ubuntu:~$ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /dev/sdb
1
ubuntu@ubuntu:~$ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /dev/sdb1
49104896
ubuntu@ubuntu:~$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /mnt/pa1/sdb.mbr
ff
ubuntu@ubuntu:~$ sudo hexdump -s 0x40 -n 1 -e'"%x\n"' /mnt/pa1/sdb1.pbr
ff
ubuntu@ubuntu:~$ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /mnt/pa1/sdb.mbr
1
ubuntu@ubuntu:~$ sudo hexdump -s 0x44 -n 4 -e'"%d\n"' /mnt/pa1/sdb1.pbr
17696800
#30-kiyoshiさん、いえ、今回はVista/W7からの起動を目的としております。しかし、GHOさん#8のアドバイスもありましたので
実行させて頂きました。kiyoshiさんのアドバイス、大変ありがとうございます。GRUBでは起動されたHDDが(hd0,0)になるのですね?そして、ROOT=/dev/sdb1は、カーネルから見たファイルシステムでの指定になるのですね?勉強になりました。
また、云われました通り、 geometry (hd0) では、HDD2の内容、geometry (hd1) では、HDD1の内容でした。
cat (hd0,0)/boot/grub/menu.lst の内容も合っておりました。
云われております通り、全てをUUIDで指定をしていれば問題はありませんでした。今回たまたま ROOT (hd1,0) と ROOT=/dev/sdb1としていたためにブートが出来ず、更に (hd0,0)でブートが出来たので混乱をしました。でも、お蔭様で全て
納得致しました。ありがとうございました。
#31-これも良く分かりました。分も簡潔で大変分かりやすかったです。ありがとうございました。
#32-kiyoshiさんも夜遅くまで(朝早く??)お疲れ様です。
#34-これがファイナルですね。次の投稿にします。
#36-GHOさんも朝早くからありがとうございます。大変良く分かります。確かに、UUIDですとパーティションの移動や切り直しがなければ全く問題なくブートできました。
#37-GRUB内のDUMPコマンド、貴重な情報ありがとうございます。
#38-了解です。ありがとうございます。
すみません、また長くなりましたので、次に続くです。
オフライン
解決致しました。皆様、本当にありがとうございました。特に、einundzwanzighundertsechsさんのアドバイス、情報には大変勉強になりました。お蔭様でGRUBの流れも分かり、スッキリと次のステップに進めます。本当に感謝です。まだまだ日本もすてた物ではありませんね。嬉しいです。
私なりに、まとめます。ー間違っていましたら訂正をお願い致します。
<症状>
HDD1にWindows、HDD2にUbuntuのデュアルブートで、WindowsのBootmgrによるブートを試みた時、「GRUB_」の表示のみでハングアップする。ただし、両OSを同じHDDにインストールした場合には、今までに知られている手順で問題なくデュアルブート出来る。
<原因>
GRUBのstage1 が次にロードする stage1.5 または stage2 の存在するドライブが stage1 のオフセット64(0x40)の1バイトに格納されている。このドライブの値が的確な値ではなかった。その原因は、GRUBをインストールした後に、stage1 を別のドライブに移したために stage1.5 または stage2 に繋がらなかった。
<解決策>
#34にありますように、GRUBシェルにて、パラメーター ”d” を使い stage1.5 または stage2 のドライブを明示的に指定する。
<コマンド>
それぞれ、PBRとMBR対応にGRUBシェルでinstallコマンドで
コード:
grub> root (hd1,0)
grub> install /boot/grub/stage1 d (hd1,0) /boot/grub/stage2 p /boot/grub/menu.lst
または MBR に stage1, stage1.5 を介する場合
コード:
grub> root (hd1,0)
grub> embed /boot/grub/e2fs_stage1_5 (hd1)
grub> install /boot/grub/stage1 d (hd1) (hd1)1+17 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst
以上。
皆様、お忙しい中お付き合いを頂きまして大変感謝をしております。今後の皆様のご健勝をお祈り申し上げます。
オフライン
すみません、追加で可能性があればと思い記します。
GRUBシェルの'setup' コマンドに、stage1.5 または stage2 用のブート指定(もちろん省略可、通常は省略)のパラメーターを追加して頂けたらもっと簡単にGRUBのインストールが出来るのに?と思いました。ex; stage (hd1), stage (hd1,0)
でも、graub-install や システムをインストールする時にも追加しなければならないのでしょうね?
これは、あくまでも思った事を書いただけですので、気になさらないで下さい。
オフライン
少し間が空いてしまいましたが,oragnge634 さん,お疲れさまでした.お願いした情報提供有難うございました.
さて,今回の件では grub のソースコードと自分のマシンの grub を再確認しつつ投稿を書き,大いに発見がありました.
また,全くの空論はイカンと思い,USBメモリに grub を試験導入し,bash スクリプトを殴り書きして内部を調べていました.
その際のスクリプトを整理して書き直しています.現在のところ 約 390 行,8.2KB の大きさです.
需要も無いのにこの長さのスクリプトを貼り付けるは心苦しいですので,ご興味,ご要望のある方はお知らせ下さい.
使用例です.
$ sudo ./trace-grub.sh /dev/sda* stage1 on /dev/sda looks at sector 1 in /dev/sda (SAME_DRIVE) -> stage1.5 v0.97 looks for /grub/stage2 in /dev/sda1 (SAME_DRIVE,0) ERROR: /dev/sda1 is not mounted ERROR: no stage1 on /dev/sda1 ERROR: no stage1 on /dev/sda2 ERROR: no stage1 on /dev/sda3 stage1 on /dev/sda4 looks at sector 123044305 in /dev/sda (SAME_DRIVE) -> stage2 v0.97 at sector 28180480 on /dev/sda4 looks for /boot/grub/menu.lst -> /boot/grub/menu.lst $ sudo ./trace-grub.sh /dev/sdb* stage1 on /dev/sdb looks at sector 1 in /dev/sdb (SAME_DRIVE) -> stage1.5 v0.97 looks for /boot/grub/stage2.fedora in /dev/sdb1 (SAME_DRIVE,0) -> /media/disk/boot/grub/stage2.fedora v0.97 looks for /boot/grub/grub.conf -> /media/disk/boot/grub/grub.conf stage1 on /dev/sdb1 looks at sector 225719 in /dev/sdb (SAME_DRIVE) -> stage2 v0.97 at sector 225656 in /dev/sdb1 looks for /boot/grub/menu.lst -> /media/disk/boot/grub/menu.lst $ sudo ./trace-grub.sh /media/disk/boot/edited.* stage1 on /media/disk/boot/edited.mbr looks at sector 1 in /dev/sda (hd0) -> stage1.5 v0.97 looks for /grub/stage2 in /dev/sda1 (SAME_DRIVE,0) ERROR: /dev/sda1 is not mounted stage1 on /media/disk/boot/edited.pbr looks at sector 224607 in /dev/sdb (hd1) -> stage2 v0.97 at sector 224544 on /dev/sdb1 looks for /boot/grub/grub.conf -> /media/disk/boot/grub/grub.conf
オフライン
他のスレッド https://forums.ubuntulinux.jp/viewtopic.php?pid=36935#p36935 (そちらには書き込みたくない)で
拡張領域「先頭」の「隙間」の話題が出ていたので,
$ sudo fdisk -lu /dev/sdb ... 略 ... デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 * 63 14988644 7494291 83 Linux /dev/sdb2 14988645 15759764 385560 5 拡張領域 /dev/sdb5 14988708 15759764 385528+ 82 Linux スワップ / Solaris
の状況で拡張領域 /dev/sdb2 に grub をインストールしてみました.セクタ 14988645 には最初の拡張パーティションテーブルが有るだけで,続く 62 セクタは未使用です.
grub> root (hd0,0) grub> setup (hd1,1) 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,1)"... failed (this is not fatal) Running "embed /boot/grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal) Running "install /boot/grub/stage1 d (hd1,1) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded Done.
fdisk の結果に変化は無く,拡張パーティションテーブルに障りは無かったようです.警告は出るものの bootflag をつけることも可能でした.
コマンド (m でヘルプ): a 領域番号 (1-5): 2 警告: 領域 2 は拡張領域です ... 略 ... デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 * 1 933 7494291 83 Linux /dev/sdb2 * 934 981 385560 5 拡張領域 /dev/sdb5 934 981 385528+ 82 Linux スワップ / Solaris
個人的に期待していた stage1.5 は embed されませんでした.
$ sudo ./trace-grub.sh /dev/sdb2 stage1 on /dev/sdb2 looks at sector 1514087 in /dev/sda (hd0) -> stage2 v0.97 at sector 1514024 on /dev/sda1 looks for /boot/grub/menu.lst -> /boot/grub/menu.lst
此方には Windows の MBR は唯の 1 つも残っていないので,/dev/sda の grub からの chainloader で起動実験して成功しました.
Bootflag の設定で標準の MBR からブートできるならば,既存の MBR,基本領域・論理領域の既存の PBR のどれにも触れることが無いのでメリットが有りますね.
ただ,プリインストールマシンでは拡張領域「先頭」に独自の何かが入っている可能性は否定出来ません.
オフライン
Windowsとのマルチブートに最適ですよ。
OSが入った基本領域は最低一つ以上あるはずなので、Ubuntu(grub)が基本領域にインストールされて要ればワンタッチ感覚で設定が行えますね。
基本領域が増やせない、構成の変更が出来ないPCは残念ながら今迄の設定手順を行うしかないけど。
オフライン
まったく、どこが本来書く場所なんだか解らなくなってますけども、しっぽがここらしいので。
MBRは、本来あの場所で完結するべきで、446Byte+パーティションテーブルです。
かつてのHDDのアドレッシングの方法だったCHSのパラメータにおいて、第二トラックに第一パーティションの先頭があるので、CHSが実際の実装とは異なり、数値だけの存在になった為、続く63セクタは「未使用」領域になっています。位置的に近いことや、パーティション構成に関わらず、最初のパーティションより前で、場所が固定されることから、MBRに加えて使われる領域になってます。
拡張パーティションもMBRパーティションテーブルとほぼ同じ構造をとる(領域も4つ定義できる)再帰的な構造になっており、トラックの先頭にパーティションが存在するという本来の仕様を守った場合、同様に空き領域が生成されます。
ただ、PBRはパーティション構造が崩れると場所が変わりますし、削除、再生成するなど、普通にパーティション操作をした場合にも壊れてしまう可能性がありますし、大きな領域をとりたい場合、普通はパーティション内にまとまったデータを生成するので、そこまでトリッキーなコードで実装されることは無いのではないかとは思います。
ということで、余程ひねくれたシステムじゃない限りはそんなことはしないんじゃないかと。
空間が存在するのは盲腸的な仕様によるもの。使えるけども大きさも小さいので、何か補助的なデータの保存に使われることはあっても積極的には使われないと思われます。
心配だったら、全部バックアップして障害時に書き戻せば良いんじゃないかと思われます。
オフライン
すごく理解出来ました。
ただ購入時から有る場合や何らかのソフトが拡張パーティションを必要とする場合は確認するかバックアッブを取るのが無難と言う事ですね。
オフライン
仕様の穴なので、積極的に使うことは無いと思いますから、普通のWindowsなら大丈夫だと思います。^^;
前述のように「起動周りでちょっと足りない」ときに使われてしまう場所なので。
容量が欲しければ、システムコマンダーの様にファイルシステムにメインモジュールを生成するか、MBMの拡張メニューのようにファイルシステムの最終シリンダに間借りするなどするんじゃないかと。
ただ、特殊な機能(セキュリティーや、バックアップ、ファイルシステム周り)が実装されている場合は要注意ですが、民生品のPCはそこまで凝ったことははしないでしょうし、特殊な機能、実装が明記されていない機種で気にするのは「あの人」みたいに過剰な心配だと思いますよ。
わざわざシステムから見にくい穴に埋め込むような処理って悪意のあるウィルスか、余程トリッキーなシステムの深い場所で動作する物だと思いますので、そういう物が広告にも載ってないことはないんじゃないかと。
Gobackとか、パーティションテーブル丸ごと握られた上にMBRまで乗っ取られてしまうとちょっと普通の方法での共存は難しいですけど。
あとは、リカバリ等で使われるMBRのコードがきちんとブートフラグを見てくれるかって問題が有りますが…。
その辺りはどうでしょうねぇ?
オフライン
各位
ようやく見ていて会話が理解できるくらいにはなりました。
NTLDRと一緒にインストールされるMBRはNTLDRを探して処理を移すものだとばかり思い込んでいましたが、単純にboot flagの立っている基本領域のPBRに処理を移すもののようですね。自分はWin2kで検証してみましたが問題無くboot flagの変更で、sda1のNTLDRと、sda2のgrubを切り替えられることを確認しました。PBRをコピってboot.iniに書かなくてはならないと思っていたので目からウロコでした。非常に面白い情報ありがとうございました。
オフライン
こんにちは。Grubをインストールした領域にbootフラグを立てる件、目から鱗です。ありがとうございます。
あとは、リカバリ等で使われるMBRのコードがきちんとブートフラグを見てくれるかって問題が有りますが…。
その辺りはどうでしょうねぇ?
https://forums.ubuntulinux.jp/viewtopic.php?id=4690
のように、リカバリー領域にブートフラグが立っているのに、普段はブートフラグのないWindowsの領域からブートする不思議なシステムもあるようです。
(どんな仕組みなんだろう)
「0」を押しながら電源を入れるとブートフラグのあるリカバリー領域から起動するようです。
このようなPCでGrubをインストールした領域にブートフラグをつけると、「0」を押して起動するとUbuntu、普通に起動するとWindowsとそれはそれで素敵なデュアルブートになるかも知れませんが・・・・。
初心者が迂闊にブートフラグを移動すると本来あるべき場所を見失う可能性もありそうです。
オフライン