Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351499
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类: LINUX

2009-01-27 14:04:30

  Boot Loader: Grub
  在看完了前面的整个开机流程,以及核心模组的整理之后,你应该会发现到一件事情, 那就是‘ boot loader 是载入核心的重要工具’啊!没有 boot loader 的话,那么 kernel 根本就没有办法被系统载入的呢!所以,底下我们会先谈一谈 boot loader 的功能, 然后再讲一讲现阶段 Linux 里头最主流的 grub 这个 boot loader 吧!

  boot loader 的功能与意义:

  我们在第一小节的地方,曾经讲过,在 BIOS 读完资讯后,接下来就是会到第一个开机装置的 MBR 去读取 boot loader 了,这个 boot loader 可以具有选单功能,而且‘还能辨识硬碟的 filesystem , 并且指向核心档案,以将他读入主记忆体当中’呢!所以啰,特点是: 我们系统能够使用的 boot loader 必须要能够认识我们系统的 filesystem 才行。 目前台湾常见的有 grub, lilo 以及 spfdisk 这几个 loader 啦!

  但是我们都知道, MBR 是整个硬碟的第一个 sector,充其量整个大小不可能超过 512 bytes 的,那么, 我们的 loader 功能这么强,不可能只占不到 512 bytes 的容量吧? 而且某些情况下,设定档还会占用掉不少的容量呢!怎么办?

  为了解决这个问题,我们将 boot loader 分成两个阶段来执行 (stage):

  * Stage 1:第一阶段为 boot loader 的主程式,这个主程式必须要被安装在开机区, 亦即是 MBR 或者是 Super block (first sector)。但如前所述,因为 MBR 实在太小了, 所以,这个 stage 1 通常仅安装 boot loader 的最小主程式, 并没有安装 loader 的相关设定档;

  * Stage 2:第二阶段为载入 boot loader 的所有设定档与相关的环境参数档案。 一般来说,设定档都在 /boot 底下。

  另外,不知道你有没有觉得很奇怪,既然我们可以将 boot loader 安装在 super block ( 可以想成是每个 partition 的第一个磁区 "first sector" ,更多相关资讯,请参考 磁碟档案系统 那个章节。 ),然后开机时,主要的 loader 又是载入自 MBR ,那么 Super block 的 boot loader 什么时候会被使用到啊?

  果然是好问题~如果这个地方搞懂了,你的主机多重开机就可以搞定啰~不过,最难懂得却也是这个地方。 其实针对开机的项目, boot loader 可以做到:

  * boot loader 可以直接指定并取用 kernel 档案,来载入到主记忆体当中;
  * 也可以将 loader 的控制权移交给下一个 loader !

  换句话说, boot loader 除了可以直接指定核心档案来开机之外,也可以指定某个 super block 当中的 boot loader 接管开机的核心载入流程啊!我们来假设几个条件好了。 假设我在 MBR 安装了 grub 这个同时认识 Windows 与 Linux 的档案系统的 boot loader , 同时假设我的 /dev/hda2 当中的 super block 也安装了 Linux 的 grub , 且 /dev/hda1 的 super block 则是安装 Windows 的 boot loader 。此外,我的 Linux 的核心档案放置在 /dev/hda2 里面的 /boot/vmlinuz ,那么我的 MBR 的 grub 至少可以做到这样:

  * 直接指定核心 (在 /dev/hda2 的 /boot/vmlinux ) 来进行开机;
  * 将控制权交给 /dev/hda2 super block 当中的 grub 进行管理;
  * 将控制权交给 /dev/hda1 super block 当中的 Windows 的 loader 来管理。

  这样说,瞭了吗?而值得注意的是,我们的 Linux 可以选择将 boot loader 安装在 MBR 或者是 super block 当中,但是 Windows 系统则几乎预设强制会同时安装在 MBR 与 Super block 当中, 这也是为什么‘我们说要安装多重作业系统时,最好先安装 Windows 再安装 Linux ,因为若先安装 Linux ,则后续安装 Windows 时,会强制将 MBR 的 boot loader 覆盖掉,(windows总是强制覆盖MBR里的程序。)如此一来,我们将无法以 windows 的 boot loader 进入 Linux 了。’

  但如果我真的是忘记了,先安装 Linux 后才安装 Windows 呢?怎么办? 没关系啊!只要你安装类似 spfdisk 的软体在 MBR 里面,因为他同时认识 Linux 与 Windows , 所以就可以用他来进入 Linux 啦!或者使用类似 KNOPPIX 的 Live CD 以光碟开机进入 Linux 之后, 再以 chroot 软体切换根目录 (/) ,然后重新安装 grub 等 boot loader , 同样也可以重新让两个作业系统存在啦!总之, 只要你知道 MBR / Super block / boot loader 之间的相关性,怎么切换都可能啊! ^_^

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

chinaunix网友2010-08-10 10:47:27

太难了吧,看晕了!

chinaunix网友2009-04-30 16:03:11

丫太嗲了