grub 问题综合讨论

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re:

#46

帖子 billbear »

billbear 写了:m$ 的 分区引导信息是寻找 本分区 中的 ntldr
而装在分区引导扇区里的 grub 却没有一个寻找 本分区 里的 stage2 的功能,必须清晰地指明是第几个分区,而分区的编号可能因为某些操作而发生变化。
今天想了一下,这话说得不对。做 ghost ubuntu 的经验说明,分区引导扇区里的 stage1 恰恰是指向 本分区 里的 stage2 的,只是 stage2 找不到住在他隔壁的 menu.lst。现在我越搞越糊涂了。

我做的 ghost 是一个装在活动第3主分区的 ubuntu 的镜像,grub 安装在了分区引导扇区里;
当恢复到活动第一主分区的时候,启动时会进入 grub 命令行,很明显,stage2 已经正确加载了,因为所有的 grub 命令已经可用,只不过没有找到菜单而已。这时候手动输入命令可以正确启动:
kernel (hd0,0)/vmlinuz root=/dev/sda1 ro quiet
initrd (hd0,0)/initrd.img
boot

而这个时候修复 grub 只要在启动后已经进入的完整的 grub 环境下输入
root (hd0,0)
setup (hd0,0)
重启就有菜单了。

我比较了一下修复前后的分区引导扇区里的 stage1,没有任何变化。
只是 stage2 改变了。改变的大概就是对 menu.lst 的引用。
这和我一直以来的认识相左。混乱中。
不过这样倒是可以很方便地用 grub4dos 的 stage2 代替 grub 的 stage2 来改造这个镜像,不用再修复 grub 了。下次试试。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: grub 问题综合讨论

#47

帖子 ptptptptptpt »

这个似乎我也遇到过

我做过实验,把 grub 装在某分区引导扇区 比如 hd0,9 ,进入 grub4dos 用 chainloader (hd0,9)+1 ,可以启动该分区的 grub 及 menu.lst

然后删除 该分区之前的一个分区使得该分区序号发生变化 ,再 chainloader (hd0,8)+1,就进入 grub 命令行了,没能加载menu.lst

具体怎么回事我还没细想

据说,只是据说,我没有验证:查找 stage2 时候,备有两个方案,一是通过文件系统,也就是 (hd0,x)/boot/grub/stage2 ,一是通过扇区(安装时候 stage2 所占扇区信息存在stage1.5)。当通过文件系统查找失败时,就会通过扇区加载
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: grub 问题综合讨论

#48

帖子 billbear »

ptptptptptpt 写了: 据说,只是据说,我没有验证:查找 stage2 时候,备有两个方案,一是通过文件系统,也就是 (hd0,x)/boot/grub/stage2 ,一是通过扇区(安装时候 stage2 所占扇区信息存在stage1.5)。当通过文件系统查找失败时,就会通过扇区加载
印象里好像 stage1 是找扇区,如果有 stage1.5,是找文件的。
我曾经试过,把 stage2 文件删掉,都能正常启动,直到 stage2 所在扇区被新的文件覆盖。
另外,如果 stage1 在分区,这个对 stage2 的扇区位置的引用应该是相对于分区的位置,因为分区3的映像恢复到分区1都能用,它肯定不是对于整个硬盘的位置。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: grub 问题综合讨论

#49

帖子 ptptptptptpt »

billbear 写了: 印象里好像 stage1 是找扇区,如果有 stage1.5,是找文件的。
我曾经试过,把 stage2 文件删掉,都能正常启动,直到 stage2 所在扇区被新的文件覆盖。
另外,如果 stage1 在分区,这个对 stage2 的扇区位置的引用应该是相对于分区的位置,因为分区3的映像恢复到分区1都能用,它肯定不是对于整个硬盘的位置。
应该是这样的。现在要解决的,就是 换分区后 找不到 menu.lst 的问题

对了,前面你说那个 标准 mbr ,我琢磨了一番,觉得应该能做到,正想通过修改 grub 代码搞一个出来 。。。不过不要报太高希望,不太敢确定我能不能做出来 hoho
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: grub 问题综合讨论

#50

帖子 billbear »

ptptptptptpt 写了:正想通过修改 grub 代码搞一个出来 。。。
:em38
如果能搞出来真的很好,现在所见的都是列主分区的(好多都是卖钱的),还没有见到列逻辑分区的呢。
不过要判断那个分区是否能启动就好像很困难。比如 xp 在格式化分区的时候,会在每个分区里写 ntldr 启动信息,可是只有 c 盘那个是有用的,其他不过是垃圾。
可以默认启动某一个分区(可设置),然后需要启动其他分区的,按某个键给出分区列表,至于能不能启动,用户自己心里要知道。
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: grub 问题综合讨论

#51

帖子 ptptptptptpt »

其实 那个 mbr 所要实现的, grub 现有功能中都包含了。

列分区:输入 (hd0 后按 tab 键 ,就会列出 hd0 所有分区

启动: chainloader (分区号)+1 即可从该分区启动

所要做的只是拼凑一下 :em06

要是交给 bean ,睡梦中就能搞定。但是我嘛,呵呵,您耐心点。。
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: grub 问题综合讨论

#52

帖子 billbear »

ptptptptptpt 写了:其实 那个 mbr 所要实现的, grub 现有功能中都包含了。

列分区:输入 (hd0 后按 tab 键 ,就会列出 hd0 所有分区

启动: chainloader (分区号)+1 即可从该分区启动
这个我怀疑是 stage2 才能做到的? mbr 里不知道能不能挤得下?
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: grub 问题综合讨论

#53

帖子 ptptptptptpt »

确实。先用stage2实现,成功后再裁去无用代码,但即使这样,估计一个扇区也装不下。但可以像 stage1.5那样,装在 0磁道

还可以作成 grldr 的形式,通过 ntldr 加载
ikewow
帖子: 2
注册时间: 2008-03-22 17:06

Re:

#54

帖子 ikewow »

ptptptptptpt 写了:
tonytam 写了:我的电脑没有boot.ini,用的也是UTC时间。不可以吗?
老实说,grub没有困扰过我,虽然我是一个菜鸟。
只要用 xp ,就会有 boot.ini 。vista 虽然默认不用 boot.ini ,但仍旧可以读取 boot.ini。既不用 xp 也不用 vista 的估计不多,这些人不在我关注之列。

另,不明白用 UTC 时间跟本帖有什么关系??
马上要重装Vista,用拷贝grldr再修改boot.ini的方法对Vista适用不?仍可以读取boot.ini是什么意思?
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: Re:

#55

帖子 ptptptptptpt »

ikewow 写了:
ptptptptptpt 写了:
tonytam 写了:我的电脑没有boot.ini,用的也是UTC时间。不可以吗?
老实说,grub没有困扰过我,虽然我是一个菜鸟。
只要用 xp ,就会有 boot.ini 。vista 虽然默认不用 boot.ini ,但仍旧可以读取 boot.ini。既不用 xp 也不用 vista 的估计不多,这些人不在我关注之列。

另,不明白用 UTC 时间跟本帖有什么关系??
马上要重装Vista,用拷贝grldr再修改boot.ini的方法对Vista适用不?仍可以读取boot.ini是什么意思?
这个说法已被证实 不完善 ,“拷贝grldr再修改boot.ini的方法”对Vista不一定适用,好像得用 bcd 什么的。我没有 vista ,不确定。请google。
ikewow
帖子: 2
注册时间: 2008-03-22 17:06

Re: grub 问题综合讨论

#56

帖子 ikewow »

谢谢ptptpt,live cd 的方法不知道行不。
回复