GNU grub 和grub4dos引导的几个问题

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
回复
staticfield
帖子: 3
注册时间: 2009-01-12 21:38

GNU grub 和grub4dos引导的几个问题

#1

帖子 staticfield » 2009-01-12 23:15

初学linux,两块硬盘,一块新的SATA硬盘,几个分区都是NTFS的,安装了XP,一块老的IDE硬盘,几个分区出swap区外都是ext3的,安装了ubuntu,并且grub装载了IDE盘。

问题1 vmvare中直接挂载了真实的IDE硬盘,在上面装了ubuntu,然后回到真实机从这块IDE盘启动,出现Selected cylinder exceeds maximum supported by BIOS,从SATA硬盘上引导Live DVD之后进入终端,然后grub-install后还是不行,然后grub->root(0,0)->setup(hd1)就好了可以正常引导ubuntu了。

问题2 SATA硬盘上在boot.ini上用wingrub装了grub4dos,menu.lst如下:

title Windows
root (hd0,0)
chainloader +1

title installFromNTFS
root (hd0,5)
kernel (hd0,5)/linuxsetup/vmlinuz
initrd (hd0,5)/linuxsetup/initrd.img

title installFromExt
root (hd1,5)
kernel (hd1,5)/linuxsetup/vmlinuz
initrd (hd1,5)/linuxsetup/initrd.img

title Ubuntu 8.10, kernel 2.6.27-7-generic
uuid 9f4b69b8-0dff-402c-bf3e-18b4b73cb276
root (hd1,0)
kernel (hd1,0)/boot/vmlinuz-2.6.27-7-generic root=UUID=9f4b69b8-0dff-402c-bf3e-18b4b73cb276 ro quiet splash
initrd (hd1,0)/boot/initrd.img-2.6.27-7-generic
quiet

title BootFromIDE
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1

现在从SATA盘启动进入grub4dos,选项WindowsinstallFromNTFS都正常,installFromExtUbuntu 8.10, kernel 2.6.27-7-generic执行到root后都正常,识别出了ext3分区,再往下执行kernel就出现了Bad file or directory type,路径是没有错的。
BootFromIDE直接出现Disk read error

问题3 IDE硬盘grub的menu.lst如下:

title installFromNTFS
root (hd1,5)
kernel (hd1,5)/linuxsetup/vmlinuz
initrd (hd1,5)/linuxsetup/initrd.img

title installFromExt
root (hd0,5)
kernel (hd0,5)/linuxsetup/vmlinuz
initrd (hd0,5)/linuxsetup/initrd.img

title Ubuntu 8.10, kernel 2.6.27-7-generic
uuid 9f4b69b8-0dff-402c-bf3e-18b4b73cb276
kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=9f4b69b8-0dff-402c-bf3e-18b4b73cb276 ro quiet splash
initrd /boot/initrd.img-2.6.27-7-generic
quiet

title BootFromSATA
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1

BIOS设置从IDE盘启动,选项installFromExtUbuntu 8.10, kernel 2.6.27-7-generic都没有问题,installFromNTFS会出现cannot mount selected partition,再选就会出现Selected cylinder exceeds maximum supported by BIOS,而且这时候不管选哪项都是这个提示,如果在IDE盘划出一个NTFS分区改动installFromNTFS为(hd0,6),则选多少次这项一直是提示cannot mount selected partition

选择BootFromSATA可以转到SATA盘启动,这时候跳出boot.ini中的选项,选1.Winsows XP是没有问题可以正常进入的,选2.grub则出现提示
Try (hd0,0):extend or non-MS:skip
Try (hd0,1):extend or non-MS:skip
Error


还有从SATA盘启动进入XP后,wingrub往MBR安装grub时只能选择hd1即IDE盘,而grubintl两个硬盘都可以。从linux下grub-install时选择root-directory为NTFS分区时会提示
The file /media/linux/boot/grub/stage1 not read correctly.
但是把menu.lst文件拷过去之后grub还是可以正常引导的。

现在搞得有点晕,谁来给我解释下上面种种现象的原因。
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: GNU grub 和grub4dos引导的几个问题

#2

帖子 billbear » 2009-01-13 1:28

你的 grub4dos 版本太老,不能读取新的 ext3 格式;
gnu grub 不能读取 ntfs;
title BootFromIDE
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1
(hd1,0) 上并没有任何引导代码, chainloader 它是没用的。 map 来 map 去也没有什么必要,又不是 windows。 makeactive 更是莫名其妙。你只要

title BootFromIDE
chainloader (hd1)+1

就好了。
选择BootFromSATA可以转到SATA盘启动,这时候跳出boot.ini中的选项,选1.Winsows XP是没有问题可以正常进入的,选2.grub则出现提示
Try (hd0,0):extend or non-MS:skip
Try (hd0,1):extend or non-MS:skip
Error
这可能隐藏着一个 bug。试试最新的 grub4dos。(2009.1.11)
从linux下grub-install时选择root-directory为NTFS分区时会提示
The file /media/linux/boot/grub/stage1 not read correctly.
你想做什么?把 ntfs 分区变成你的 /boot? 你认为会成功吗?
staticfield
帖子: 3
注册时间: 2009-01-12 21:38

Re: GNU grub 和grub4dos引导的几个问题

#3

帖子 staticfield » 2009-01-13 21:24

才发现google到的第一个链接即sourceforge上的grub4dos是07年的一个老版本 :em06 ,去gna下了最新的grub4dos了。
现在的新问题是从linux下往SATA盘MBR装了GNU grub并且root directory改成E:/boot/geub后,然后fix了SATA盘的MBR把GNU grub去掉后,路径现在改不会去了(原来grub4dos的menu.lst在C:/grub中),把C盘根目录下grldr删掉重新装了一个新的,结果boot菜单中选grub直接进入命令模式。看了下grldr里面是(hd0,0)/boot/grub/menu.lst,我怎么弄wingrub也无法弄到像第一次装的时候的那样默认在C:/grub/menu.lst了,难道要手动改grldr?问题是安装GNU grub时候是怎么弄的,fix MBR后还有残留,难道GNU grub也会改动grldr?
有些问题我还是去直接看源代码算了,当时也没去看文档随便在网上搜搜看看就乱改了,还是看源码最清楚,毕竟还是学过操作系统的引导和NTFS、ext的文件系统,也粗略看过往软盘上引导区写引导程序的代码。不看代码永远搞不清楚。
staticfield
帖子: 3
注册时间: 2009-01-12 21:38

Re: GNU grub 和grub4dos引导的几个问题

#4

帖子 staticfield » 2009-01-13 22:44

额,要去看AT&T汇编了,不是Intel的汇编,跟以前看的DOS debug还是差别很大的。
回复