|
oasisspirit
新手上路
积分 15
发帖 6
注册 2008-4-11
状态 离线
|
『楼 主』:
【讨论】Gurb4dos 硬盘引导 - MBR, BIOS, menu.lst
昨天,因为使用一个 PE 光盘,导致硬盘无法自行引导,最后通过 GRUB4DOS 基本解决叻问题,但是仍然不知道导致问题得原因是什么。 相关讨论见链接:
http://bbs.wuyou.com/viewthread.php?tid=123806
在翻看grub资料和解决问题得过程中又遇到些新的问题,如下
1. MBR
“[讨论] DOS, Windows 等几大操作系统的 MBR 和 PBR 的重写方法”
http://www.cn-dos.net/forum/viewthread.php?tid=35676
中说(经过实践验证),WINXP 重新完全安装会改写MBR和DBR
那么,如果把 grub装到 MBR 中,是不是再重装 winxp后,也要重装grub到 MBR?
是不是安装grub到BIOS 是更好的解决方法?
【参考】
“硬盘无法启动,无光、软驱,没关系!不死系统让你电脑维护不耽误!” by 老毛桃
http://bbs.wuyou.com/viewthread.php?tid=64686
“尝试把grldr.mbr移植到RomOS写入Bios” by fastslz,实现 by Bean
http://www.cn-dos.net/forum/viewthread.php?tid=34760
2. menu.lst
在 winxp第一次安装过程(拷贝文件到硬盘)后,到 PE 下装了 gurb,并将menu.lst 部分编写如下:
title Microsoft Windows XP
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2
重启后,硬盘无法引导。
将 menu.lst 改写为:
title Microsoft Windows XP
find --set-root /ntldr
map +1 (hd0)
chainloader /ntldr
savedefault --wait=2
重启后,硬盘正常引导,完成 winxp 全部安装。
再将 menu.lst 改写为:
title Microsoft Windows XP
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2
重启后,硬盘正常引导。
【问题】
1) 为什么第1次无法引导?第2,3正常?
2) map +1 (hd0) 这里起到什么作用?
3. Boot.ini
通过 grub 引导 winXP 时,boot.ini 还起作用吗?
有朋友了解得,希望发表一下看法
[ Last edited by oasisspirit on 2008-4-11 at 05:55 PM ]
|
|
2008-4-11 15:37 |
|
|
不点
银牌会员
不甘寂寞的人
积分 2491
发帖 1115
注册 2003-9-24
状态 离线
|
『第
2 楼』:
Quote: | 那么,如果把 grub装到 MBR 中,是不是再重装 winxp后,也要重装grub到 MBR? |
|
当然是的,如果你需要 GRLDR 接管 MBR 的话。其实,如果微软接管了 MBR,你仍然有办法通过修改 boot.ini 来启动 grldr,所以,这也是不太要紧的。
安装到 BIOS?这个说法或许不太标准。把 grub 或者 DOS 安装到主板 ROM 或者扩展卡的 ROM 中,通常是称为 “刷新” BIOS。这一般不是普通人愿意做的,而且也有一定的危险性。
很可能第一次是从 U盘启动,此时 U 盘成了第一硬盘 (hd0),而你的真实硬盘变成了第二硬盘 (hd1)。微软的 NTLDR 不支持从第二硬盘启动,必须是从第一硬盘启动。因此你需要一次仿真 map +1 (hd0),这条仿真就是把当前的硬盘仿真为 (hd0),也就是让 NTLDR 认为 (hd1) 就是 (hd0),从而能够启动成功。
在第3次,由于 XP 系统已经安装成功,U 盘已经退去,不再引导机器,因此真实的硬盘本身已经是 (hd0) 了,这样就不需要仿真了。
Quote: | 通过 grub 引导 winXP 时,boot.ini 还起作用吗? |
|
grub 不能直接引导 XP,需要通过引导 NTLDR 才能间接引导 XP。NTLDR 的配置文件是 BOOT.INI,因此,BOOT.INI 也是有用的,它要被 NTLDR 读取。
补充:
在新版本中,“当前设备” 有个新的表达法,即 空括号:(),你可以像使用其它设备那样来使用 () 这个设备。比如:
map ()+1 (hd0)
map (hd0) () 以上这两条命令也可以同时使用。
[ Last edited by 不点 on 2008-4-11 at 07:51 PM ]
|
因为我们亲手创建,这个世界更加美丽。 |
|
2008-4-11 19:43 |
|
|
oasisspirit
新手上路
积分 15
发帖 6
注册 2008-4-11
状态 离线
|
『第
3 楼』:
非常感谢 不点 的精彩回复
另外, 楼上楼, 是我在dos论坛的第一篇帖子
想再问一下:
1.
之所以用 grldr 是因为硬盘不能自主通过ntldr引导 hd0
看帖子 http://bbs.wuyou.com/viewthread.php?tid=123806 所说的问题,能大概判断问题出在哪里吗?
2.
Quote: |
很可能第一次是从 U盘启动,此时 U 盘成了第一硬盘 (hd0),而你的真实硬盘变成了第二硬盘 (hd1)。微软的 NTLDR 不支持从第二硬盘启动,必须是从第一硬盘启动。因此你需要一次仿真 map +1 (hd0),这条仿真就是把当前的硬盘仿真为 (hd0),也就是让 NTLDR 认为 (hd1) 就是 (hd0),从而能够启动成功。
在第3次,由于 XP 系统已经安装成功,U 盘已经退去,不再引导机器,因此真实的硬盘本身已经是 (hd0) 了,这样就不需要仿真了。 |
|
不好意思, 没说清楚, 我用的是 pe 光盘. 而且, 第一次启动 没有通过 光盘引导, 而是 我在winXP 完成蓝平下拷贝文件需要重启的时候, 到 pe 下 安装 grub并设置menu.lst文件的. 这样的话, 会是什么原因那?
3. Boot.ini
按说应该是你说的道理. 可是, 我在 Boot.ini 里面, 将等待时间 设置成 1000, 可是没有任何等待 就启动 winXp了. 不知道为什么?
4. +1 的意思
看到过你关于 mp (hd0,0) +1 (hd0) 的解释
http://bbs.znpc.net/redirect.php?tid=1000
chainloader (fd0) +1 也是这样理解吗?
[ Last edited by oasisspirit on 2008-4-12 at 01:07 AM ]
|
|
2008-4-12 00:52 |
|
|
fujianabc
金牌会员
积分 3467
发帖 1616
注册 2004-6-21
状态 离线
|
『第
4 楼』:
Quote: | Originally posted by oasisspirit at 2008-4-12 12:52 AM:
按说应该是你说的道理. 可是, 我在 Boot.ini 里面, 将等待时间 设置成 1000, 可是没有任何等待 就启动 winXp了. 不知道为什么? |
|
设得太大了,超过上限了,设个10就可以了
|
|
2008-4-12 10:18 |
|
|
barton
中级用户
积分 480
发帖 197
注册 2006-9-20 来自 黄冈
状态 离线
|
『第
5 楼』:
timeout设为-1
基本可以达到你设为1000所想要达到的目的。
|
|
2008-4-12 11:56 |
|
|
oasisspirit
新手上路
积分 15
发帖 6
注册 2008-4-11
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by barton at 2008-4-12 11:56:
timeout设为-1
基本可以达到你设为1000所想要达到的目的。 |
|
对的哈, 我去看看
--
刚 试过了,好像没有用哈
[ Last edited by oasisspirit on 2008-4-13 at 11:34 PM ]
|
|
2008-4-13 23:25 |
|