Chinaunix首页 | 论坛 | 博客
  • 博客访问: 798958
  • 博文数量: 770
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4950
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-09 17:49
文章分类

全部博文(770)

文章存档

2011年(1)

2008年(769)

我的朋友

分类:

2008-10-10 11:07:12

很多问题是关于双启动的,我看有必要总结一下.

请注意文中
[B]第一个硬盘的第一扇区[/B]
[B]分区的第一扇区[/B]


一.启动原理

A.
第一个硬盘的第一扇区是MBR
一扇区只有512byte,放置一小段程序及分区表。
由于空间很小,不足以存放程序以显示启动列表等功能,所以一般只是一个跳转指令。
对于Microsoft的MBR,这小段程序将检查分区表,并跳转到可启动分区第一扇区
对于Linux的MBR,直接跳转到指定分区的boot manager 程序

B.
Linux的boot manager 程序有 lilo和grub等,
在windows中则是分区的第一扇区,然后又跳到windows的boot manager 程序.

boot manager主要做以下工作:
   显示选择菜单,确定加载什么系统,并将控制交给相应内核


这就是启动全过程.

二.windows

DOS的 fdisk/mbr 将重置 MBR, 默任是跳转到分区表中[B]可引导分区的第一扇区[/B].
所以如果windows在[B]第一硬盘的第一分区[/B], 就可以直接用dos的 fdisk/mbr修复,但要注意把分区设为[B]可引导分区[/B].

三.linux

linux中一般用grub, lilo快淘汰了.
1. grub

先运行:
[B]grub[/B]

Grub 对硬盘和分区有自己的一套命名方法,格式是(hdn,m), n 表示硬盘序号,m 表示分区序号,两个都是从0开始计数。也就是说,在Grub里, hda1 是 (hd0,0),hdb2 是 (hd1,1)。不同的是,Grub不把CD-ROM驱动器看作硬盘,所以如果你的hdb是CDROM,第二个硬盘是hdc,第二个硬盘在Grub里的名字还是 (hd1).

按照上面的规则,看一下你的根分区应该叫什么名字。我们这里假设你的根分区是 hda4.

首先,告诉 Grub 在哪里找它的 stage{1,2} 文件 -- 在Grub里,你随时都可以用 Tab 来显示出可能的选择:

[B]root (hd0,3)[/B]

-----------------------------------------------------------------
注意:
下面的命令将覆盖你现在的启动加载器。如果你不想这样,就别运行下面的命令。比如,你想使用某个第三方的启动加载器来管理MBR(主引导记录)。这时,你可能应该把grub安装到Linux分区的启动部份,命令类似于:setup (hd0,3).
这时如果把hda4设为可引导分区,然后 fdisk /mbr, hda4上的linux也是可以启动的.

"安装linux后,windows找不到了" 就是因为 grub 覆盖了MBR
"安装windows后,linux找不到了" 就是因为 windows 覆盖了MBR
-----------------------------------------------------------------

然后告诉Grub把它自己安装在hda的 MBR (主引导记录)上:

[B]setup (hd0)[/B]

如果一切正常,Grub会告诉你它在/boot/grub下找到了所需要的文件,行了,大功告成:

[B]quit[/B]

现在我们需要创建 menu.lst 文件,它定义了 Grub 的启动菜单:

# Begin /boot/grub/menu.lst
# 位置可能不同
# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

title Red Hat
root (hd0,2)
kernel /boot/kernel-2.4.20 root=/dev/hda3 ro
initrd /boot/initrd-2.4.20
# 以上文件可能不同,看看 /boot/ 下的kernel名字是什么

另外,如果你同时还要启动 Windows,下面的菜单项可以做到:

title Windows
rootnoverify (hd0,0)
chainloader +1
# +1 就是第一硬盘的第二扇区,也就[B]第一硬盘的第一分区[/B]
# 根据windows的实际位置调整,比如 rootnoverify (hd1,1)
#end menu.lst

重新启动就行了

2.lilo
lilo很久不用了,我简单写吧.
首先配置 /etc/lilo.conf
位置可能不同,用 [B]locate lilo.conf[/B] 查找

然后运行
[B]lilo --config[/B](可能是这个参数)
重新启动就行了


所以用一般用linux 上的boot manger 较好, windows 肯定也能实现,但我从来没机会试,不过我想应该比较复杂,可能要去修改注册表.


四. 可能遇到的问题

1. 对新手而言,主要是配置文件的位置可能不一样,可以用locate filename 找一下。
2. 有时连文件名也不一样,比如grub 现在用menu.lst 而老版本可能是 grub.conf, 幸运的是redhad之流好像还没用新的。


--------------------------
告一段落,没覆盖的问题提出来,我补充.      
--------------------next---------------------

阅读(433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~