2006年11月30日星期四

Fedora 6 安装记

fedoraDAY 1(11月28日):安装fedora。安装的版本是最新出的Fedora Core 6,使用DVD安装。安装在IDE硬盘的一个20G的空间里,使用默认的分区方式,把grub安装在MBR里。安装过程没有大的波折,时间大概是1个小时多几分钟。只是在分区的时候我按了个什么键它就关机了。只有重新开始。浪费了我14分钟。但是安装完后要重新启动,启动后就直接进入叉P,没有grub的引导界面,没有进入fedora。

先说明一下硬盘信息:2个硬盘,一个是sda(串口),160G,一个hdb(IDE并口),40G。叉P装在sda上,fedora安装到hdb上。我用叉P的磁盘管理进行分区,把hdb分成两个区,然后把第一个分区删除,准备让fedora安装在第一个分区上。但是很奇怪的是安装完后我发现第二个fat32的分区被认作hdb1,在硬盘上的第一个分区“/boot”却成了hdb2了。fedora只是把未使用的空间分为两个区,一个是“/boot”,另外一个是“/”,没有swep区。且root区的格式甚是奇怪。

根据多年前安装redhat 7.3的经验,需要把lilo的第一个扇区保存下来,然后保存在ntloader(ntldr)的分区下,修改boot.ini就可以了。于是想找一个备份MBR的程序在叉P下面备份一下,但是死活找不到。NT4下有个程序叫bootsave的,但是在MS里也没有。google“MBR 备份”有一大堆说“很多程序都可以备份MBR……”,但是没有一个网站给出一个程序。于是只好另想方法。我曾经down了几个光盘版的linux,如knoppixUbuntu等,于是使用Kubuntu启动,然后dd之,然后修改boot.ini等……可惜的是dd时使用了“of=/dev/hdb2",只是导出了一堆的“00”,无功而返。

DAY 2:今天想到了dd的错误,于是把它修正回“of=/dev/hdb”,终于导出了MBR。拷贝、修改,启动。但是在选择了相应项以后,只在左上角显示“GRUB”就不动了。google不到相应的解决办法,于是索性把sda拔了下来,只连接串口的hdb。果然顺利进入到fedora。但是重新接上sda后启动,就直接由hdb的GRUB引导,GRUB不能找到叉P的引导ntldr,只是显示了grub.conf的两个命令就死掉了:

rootnoverify (hd1,0)
chainloader +1

这两个命令是安装grub时候我增加sda引导后自动生成的。这种情况也不是很感意外。但是还是觉得头疼。于是进去修改grub.conf。主要参考的文章是下面第2篇。先增加“makeactive”和“boot”两条命令。然后把“rootnoverify”改成“root”。最后加上“map”命令才成功。最后的grub.conf文件大概是这样:

title DOS
map (hd0) (hd1)3
map (hd1) (hd0)3
root (hd1,0)2
chainloader (hd1,0) +1
makeactive1
boot1

然后grub可以引导叉P了(红色数字表示修改的顺序)。原理大概是叉P不能由第二个硬盘引导,必须先map映射交换一下。现在我把hdb的数据线拔下,使用sda的ntldr引导,它能直接引导叉P,但是再插上IDE后选择linux后就还是死翘翘。我猜想其中的原因是两个硬盘都有MBR,计算机BIOS能记住上一次引导的硬盘(能自动识别引导分区并置成active?),grub把引导的硬盘认作hd0,把另外一个硬盘认作hd1。当首先使用IDE口硬盘hdb引导的时候,grub.conf文件中硬盘的顺序是对的,于是可以正确认出两个硬盘和引导系统。但是如果由串口的硬盘的ntldr首先引导时,串口的硬盘sda对grub来说时hd0,并口的硬盘hdb则是hd1了。那么grub中的硬盘定义就刚好反过来了。

DAY3:今天又修改了一下grub.conf。后来发现,其实只要加上map命令就可以了,不需要加入其它命令。

title DOS
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader +1

但是我还是没有修改好能在ntldr下面引导到linux或者grub的方法,只能在屏幕的左上角显示出GRUB这个字。怎么办?


请参考:

1。系统引导管理器GRUB,为初学者指南(linuxSir)

2。系统引导管理器GRUB学习笔记(linuxSir)

3。Personal Fedora Core 6 Installation Guide

4。Fedora Core 6 Tips and Tricks

5 条评论:

  1. 我也遇到左上角GRUB,停止不动。
    双硬盘才这样 blog.sina.com.cn/xueqingping
    一起讨论一下

    回复删除
  2. 我的linux安装在ide硬盘上,xp装在其中的一个sata硬盘上。在计算机post后可以选择从哪一个硬盘或者光驱启动。如果从安装linux的硬盘通过grub引导,经过修改后能正确引导xp。但是如果先从安装xp的硬盘通过osloader引导的话无法正常引导linux。
    我认为的原因:操作系统以计算机在post后的硬盘启动顺序来确定硬盘。当计算机先从安装grub的硬盘启动时,这个硬盘是第一个硬盘hd0,xp的硬盘是第二个硬盘hd1。在grub中可以通过map重新确定硬盘的顺序再引导xp。在这个过程中osloader获取的硬盘参数对xp来说是正确的。但是如果先从osloader的硬盘引导时,这个硬盘是第一个硬盘,grub所在的硬盘是第二个硬盘。当osloader把引导控制权交给grub时,这个硬盘顺序并没有交换,也就是说这时的hd0是osloader所在的硬盘,hd1才是grub所在的硬盘,那么grub.conf的参数就不对了。那grub当然不能正确引导了。

    回复删除
  3. 文中的“of=/dev/hdb2”和“of=/dev/hdb2”中的“of”应该是“if”。

    回复删除
  4. 可能的解决的方法有两个:
    (1)如果用osloader引导grub,那么在grub.conf里面map一下,把两个硬盘的顺序倒过来。这需要一个条件判断,是直接使用grub引导还是由osloader引导。
    (2)在osloader引导grub前先调换硬盘的顺序。
    但是我对它们都不熟悉,能力不够。不知道能不能成功。

    回复删除
  5. "这需要一个条件判断,是直接使用grub引导还是由osloader引导。"
    这个很难实现吧,要站到外层去判断

    如果象MS一样就好了
    “-如果Windows Vista 被选中的话. BOOTMGR将控制权交给Winload.exe 然后启动系统. 并开始核心加载
    -如果是XP/2000/2003被选中的话, BOOTMGR将控制权交给NTLDR, 然后开始普通的Windows 加载.”

    回复删除