windowxp与linux双系统安装后的引导问题

进XP:

rootnoverify(hd0,0)
chainloader +1
boot

进RH:

首先确定你的rh装在哪个分区了(如果你不知道只有一个个试了)
grub>root (hdx,y)//X一般是0(如果你有两个硬盘就另当别论了),Y是你把他装在的分区号
grub>kernel (hdx,y)/vmlinuz-2.6.14-1.1369_FC4 (ENTER)
grub>initrd (hdx,y)/initrd-2.6.14.1369_FC4.img (ENTER)
grub>boot (ENTER)

 

首先,要澄清一下分区方面的问题。根据dos的分区定义(注意只是dos,可能其他系统划分出来的分区可能不符合这些条件),一块硬盘,可以划分成多个分区,但是只能是两类,一类是主分区primary partition,另一类是扩展分区extended partition。在一块硬盘上,扩展分区最多只能有一个(也可以没有),而主分区和扩展分区的总数最大是4个。一个扩展分区,可以把它整个划分成一个单独的逻辑分区(这样做的人很少,因为你总的分区个数要受限制,不能大于4),也可以划分出任意多个逻辑分区,没有数量限制!这就是我们能够给一块硬盘分成大于4个分区的原因,也是dos要专门定义出一个扩展分区类型出来的原因!因为,能够引导系统(dos或者windows)的,只是主分区!而扩展分区和其划分出来的逻辑分区不能。不过在同一时刻,最多只能有一个主分区能够引导系统,它被标记为一个“活动”的主分区,而其他都必须标记为“不活动”,当然也可以让所有的主分区都标记为“不活动”,不过此时就没有任何分区(主分区、扩展分区、逻辑分区)能够引导系统了。要切换能主分区够否引导的“活动”标志也可以,很多工具软件都行,当然包括grub。而linux之所以能从扩展分区里的逻辑分区里引导和启动,就是因为它和dos不一样,它的引导程序是grub!(以前是lilo,这两个有区别,一个是基于文件系统的,一个是基于直接的硬盘地址的,有兴趣可以看看相关资料)。

另外要重点说一下,grub对分区的编号法则。默认情况下,主分区和扩展分区是从0到3(注意所有的编号是从0开始的,和我们平时从1开始的习惯不一样!),如果扩展分区里有逻辑分区,那么其编号从4开始,一直到给每个逻辑分区分配完为止!要注意,此时扩展分区的编号仍然要占用0~3中的某一个,但是我们无法对其进行格式化、存储数据等操作,因为它已经被分成了更多的逻辑分区,如果我们删除了某个扩展分区,那么我们就删除了所有包含于它逻辑分区!用过dos的fdisk的人都有印象,要删除某个扩展分区,必须先分别删除里面的逻辑分区才行,这就是一个fdisk程序防止我们误操作的措施。我们的硬盘,一般来说是分成一个主分区(就是win下的“C盘”)+一个扩展分区,然后再在扩展分区里划分逻辑分区(在win下从D开始,一次为E、F…………)。(hdx,y)中,x是指硬盘编号,第一块硬盘是0,第二块是1,依次类推;y就是我上面说的编号规则。一般来讲,我们只有一块一盘,一个主分区+一个逻辑分区,所以“c盘”是(hd0,0),“d盘”是(hd0,4),“e盘”是(hd00,5),“f盘”是(hd0,6).....依此类推。而在linux下,由于编号从1开始记数,所以他们分别是/dev/hda1、/dev/hda5、/dev/hda6.....等等。如果分区表做过改动,就是硬盘分区进行过重组(不一定时要全部删除重新分过,只是改变一下其中的某些分区,例如将扩展分区里的逻辑分区全部合并再重新划分,或者将某个主分区一分为二等),分区表的分区编号就会被打乱(用linux下的fdisk重新调整分区时就很明显),这时可以再用fdisk的f命令重新按上述规则给分区编号。明白了这些之后,很多问题就能迎刃而解了。另外强烈建议用linux的fdisk来分区,因为它功能最强,最主要的是用windows nt(2000、xp、2003)的分区工具来分区的话,会在各个分区的间隔之中插入一些只有几MB的小空间,既不能使用也不能回收,会将硬盘的搞得十分复杂,十分烦人!据说这是M$为了方便将来把磁盘分区升级为动态卷和加入其他功能而预留的,而且你在win的分区工具下看不见这些“分区碎片”,用linux下的fdisk和其他分区工具就看得一清二楚!

grub的引导程序可以装在mbr,就是硬盘的主引导记录,这里就是记录了硬盘的哪个主分区是“活动”的,系统启动时,bios就是到这里找可以引导系统的位置,再跳转到那里去引导系统的。所以把grub装在mbr优先级是最高的。grub也可以装到某个主分区里去,具体就是这个主分区的最前面几个扇区,如果我们把这个主分区标记为“活动”的话,那么bios也可以通过读mbr的信息然后跳转到这里开始启动linux。dos/windows只能用后一种种方式引导系统,而windows在安装时,将硬盘的mbr清空,使装在mbr的grub失去作用,此时bios就只能从有活动标志的主分区引导系统了。只要重新将grub装回mbr就可以解决问题,完全没必要重装win或者lin。不过一个启动光盘或者U盘、软盘之类的还是必须的,除非你用了grub4dos,用win的ntloader通过glrlr来重新启动grub,再把它装回mbr。所以强烈建议双系统的人用grub4dos的grub来引导系统,这样即使重装windows,mbr被覆盖,grub失效,仍然可以不用任何光盘、U盘之类的东西,只凭借硬盘上的ntloader和grub4dos里的glrlr,重新将grub装回mbr去。

还要说明的是,setup (hd0)就是将grub装到mbr,而setup (hd0,x)就是将grub装到第x+1个主分区去的。而且装到mbr或者某个主分区去的grub本身也只是一段引导代码(stage1的,整个操作系统的启动分成stage1和stage2两个阶段,具体的不讲了,有兴趣可以查查资料),它必须要有后继的stage2文件才能实现最终的引导,而这些stage2文件在装好grub之后不能被破坏或者转移位置,不然系统启动后,grub就会报错,无法进行继续进行下一步。如果有这种情况发生,那只能重新用光盘或者系统盘引导系统,将mbr里的grub清空后,重新安装grub了。所以grub装好后,千万不要去动boot/grub里的那些文件。


这里有个帖子,可以参考一下,我在回复里面讲了一些grub4dos和ntloader方面的东西,大家可以参考一下。
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=152185&postdays=0&postorder=asc&start=0

 

首先,是redhat 的一个bug, redhat 默认将linux的系统分区格式化为ex3格式,默认的引导程序是grub,但grub并不支持ex3格式 ,应该选择格式化为ex2格式。
在进入linux时,在boot:提示符下输入linux rescue,进入修复模式,配置一些界面和键盘的选项后,询问是否进行网络配置,选择否。在下一个界面中选择“继续”,进入shell模式,在提示符 sh# 下,输入gurb (这个程序和安装文件都在/sbin/目录下,应事先确认其存在),进入grub,在提示符grub> 下输入 root (hd0 在按Tab键,grub会将分区信息列出来,这时可以看到采用ex3格式的linux系统分区显示为未格式化的。
因此在这种情况下,如果你的grub安装在linux系统安装分区内,通常会在系统启动时报错“ missing 。。。” 。大意是找不到操作系统。
其次,如果把grub装到MBR,则每次重装xp系统都会,把它覆盖掉,要重装grub才会恢复正常。因此建议把grub装到linux系统的第一个分区,这样就不用每次都重装grub了。
具体方法是在安装时的分区页面选择手动分区,将格式化的格式改为ex2, 引导程序选择grub,同时勾选“高级配置引导程序”(大概是这几个字),然后“下一步” ,选择将grub安装在linux系统的第一个分区中。
其三,在分区时尽量采用同一种分区工具,如果用PQ,就不要用fdisk。要不就只用fdisk。如果使用两种工具,那就只有祈祷上帝让你的安装成功了。另外,一些windows下的分区软件总是会在每个分区前留一些分区碎片,大概是为了升级文件系统准备的。这可能会对linux的引导产生困扰。
其四,grub并不能识别NTFS文件系统,所以如果你的xp装在NTFS而不是fat32的话。还要做一些其他的操作,以支持grub的引导,这方面的介绍有很多,自己去找。
第五,就是要把grub所在的分区设成活动分区,我是在PQ8下设置的。Linux所在的分区可以设成主分区也可以是逻辑分区。Linux的系统适应性很强,应该都没问题。
笔者的grub装在了linux所在的第二个主分区hda3上,然后在PQ8中将linux所在的分区设成active,重启后系统首先启动linux所在的分区,执行grub引导程序。如果没有把linux所在的分区设为活动分区,而是默认windows所在的分区为活动分区的话,则系统启动后直接进入windows系统。
当然,对于将grub装入MBR的无需改动活动分区,默认是系统的第一个分区。
第六,即使把grub装在linux系统的第一个分区,也有被破坏的可能。这时重装grub引导程序与grub装在MBR中略有不同。如下:
Grub>root (hd0,2) //hd0是系统的第一个硬盘,2是linux所在的分区hda3
Grub>setup (hd0,2) //同上
Quit
第七,重装grub后,使用quit , 退到shi# 下,再用exit 重启系统,否则可能会出现意料不到的结果。
OK, 就到这了,不知对各位有没有用,good luck!

你可能感兴趣的:(windowxp与linux双系统安装后的引导问题)