系统引导管理器GRUB学习笔记Linux认证考试

文章作者 100test 发表时间 2009:06:24 18:56:28
来源 100Test.Com百考试题网


  一、 首先要了解的几个概念
  1、 启动管理器
  启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR。然后存储在 MBR中的这段程序将运行。这段程序被称为启动管理器。它的任务就是将控制传送给操作系统,完成启动过程》有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Loader),Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等等.
  2、 什么是GRUB?
  grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括:Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000,WinXP。它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如 Windows 98)来完成引导。
  3、 GRUB的特点
  1)特别适用于linux与其它操作系统共存情况。
  支持大硬盘现在大多数Linux发行版本的lilo都有同样的一个问题:根分区(/boot分区)不能分在超过1024柱面的地方,一般是在8.4G左右的地方,否则lilo不能安装,或者安装后不能正确引导系统。而grub就不会出现这种情况,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在 8G以外的操作系统。
  2)支持开机画面  
  grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样可以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那 320x400的开机画面不可同日而语。
  3)两种执行模式
  grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如 bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。
  4)菜单式选择  
  grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。
  5)分区大小改变后不必重新配置
  grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,grub就可以引导系统。
  除此之外,Grub还有许多非常强大的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统,支持网络启动等。
  6) MBR和第一扇区
  你可以简单的理解为MBR是整个硬盘的物理第一位置,而第一扇区是硬盘的物理第二位置.
  7) 一个GRUB配置文件
  基于本例的分区如下:
  hda 15G
  hda1 8G / RED HAT LINUX8.0
  hda5 7G /home
  hdc 20G
  hdc1 6.4G WinXP
  hdc5 6.4G
  hdc6 6.4G
  hdc7 6.4G
  #fdisk -l
  # Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
  Units = cylinders of 16065 * 512 bytes
  Device Boot Start End Blocks Id System
  /dev/hdc1 * 1 894 7181023 b Win95 FAT32
  /dev/hdc2 895 2434 12370050 f Win95 Extd (LBA)
  /dev/hdc5 895 1787 7172991 b Win95 FAT32
  /dev/hdc6 1788 2434 5196996 b Win95 FAT32
  Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders
  Units = cylinders of 16065 * 512 bytes
  Device Boot Start End Blocks Id System
  /dev/hda1 * 1 1020 8193118 83 Linux
  /dev/hda2 1021 1802 6281415 83 Linux
  /dev/hda3 1803 1867 522112 82 Linux swap
  grub.conf,这个文件位于./boot/grub/grub.conf
  # grub.conf generated by anaconda
  #
  # Note that you do not have to rerun grub after making changes to this file
  # NOTICE: You do not have a /boot partition. This means that
  # all kernel and initrd paths are relative to /, eg.
  # root (hd0,0)
  # kernel /boot/vmlinuz-version ro root=/dev/hda1
  # initrd /boot/initrd-version.img
  #boot=/dev/hda
  default=0
  timeout=3
  splashimage=(hd0,0)/boot/grub/splash.xpm.gz
  title Red Hat Linux (2.4.18-14)
  root (hd0,0)
  kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
  initrd /boot/initrd-2.4.18-14.img
  title Microsoft Windows XP
  map (hd0) (hd1)
  map (hd1) (hd0)
  root (hd1,0)
  chainloader (hd1,0) 1
  makeactive
  boot
  二、解读grub.conf文件
  我们将来看看grub.conf文件内语句,(注:...)内的东西是我们的解读内容.
  # grub.conf generated by anaconda
  #
  # Note that you do not have to rerun grub after making changes to this file
  # NOTICE: You do not have a /boot partition. This means that
  # all kernel and initrd paths are relative to /, eg.
  # root (hd0,0)
  # kernel /boot/vmlinuz-version ro root=/dev/hda1
  # initrd /boot/initrd-version.img
  #boot=/dev/hda (注:以上以符号井"#"开头的行表示被注释掉,没有任何意义)
  default=0 (注:默认的操作系统就是由default控制的。default后加一个数字n,表明是第 n+1个。需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一 个软驱是fd0,等等。所以,default 0 表示默认的操作系统在这儿是 Red Hat Linux (2.4.18-14)如果你修改成1就是WinXP了)
  timeout=3 (注:timeout表示默认等待的时间,这儿是3秒钟。超过3秒,用户还没有作出选 择的话,系统将自动选择默认的操作系统.当然你可以改成任何你乐意的时间)
  splashimage=(hd0,0)/boot/grub/splash.xpm.gz (注:指定开机画面文件splash.xpm.gz的位置)
  title Red Hat Linux (2.4.18-14) (注:表示Red Hat Linux的菜单项)
  root (hd0,0) (注:表示第一个硬盘第一个分区,这里的root和系 统内的root不是一码事!详细如下说明)
  kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ (注:指定内核的位置,详细说明如下 文)
  initrd /boot/initrd-2.4.18-14.img (注:初始化)
  title Microsoft Windows XP (注:表示Microsoft Windows XP的菜单项)
  map (hd0) (hd1) (注:map是命令,详细如下)
  map (hd1) (hd0)
  root (hd1,0) (注:这是指第二个硬盘(从硬盘)上第一个分区)
  chainloader (hd1,0) 1 (注:链式装入器,装入一个扇区的数据然后把引导 权交给它。详细说明如下)
  makeactive
  boot
  (注:在 Linux 中,当谈到 "root" 文件系统时,通常是指主 Linux 分区。但是,GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统,也可能不是。我们讨论的是 GRUB,需要指定 GRUB 的 root 分区。进入 root 分区时,GRUB 将把这个分区安装成只读型,这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区.到目前为止,您可能会感到一点疑惑,因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。在Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。
  知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。
  kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/说明/boot/vmlinuz-2.4.18-14就是要载入的内核。后面的都是传递给内核的参数。root=LABEL=/ 就是linux的硬盘分区表示法,ro是readonly的意思。initrd用来初始的linux image,并设置相应的参数。
  命令map:当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windowsxp,就可以使用map命令.你能够将hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统 。命令形式如下:
  grub>. map (hd0) (hd1)
  grub>. map (hd1) (hd0)
  GRUB 使用了“链式装入器”(chainloader)。链式装入器从分区 (hd1,0) 的引导记录中装入winxp自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。
  GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试把“color light-gray/blue ”加在default语句的下面,下一次启动GRUB时,看看有什么变化,再试一试“color light-blue/red",惊喜吗? 有趣吧! )
  三、如何使用grub?
  1、安装
  你可以从ftp://alpha.gnu.org/pub/gnu/grub 下载GRUB的源代码。
  得到文件grub-0.97.tar.gz,所以这样做:
  # tar -xvzf grub-0.97.tar.gz
  这个命令将解开的文件和目录放在一个名为grub-0.97的目录中。现在运行如
  下命令:
  #cd grub-0.97
  # ./configure
  如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:
  # ./configure --help
  这个命令将输出所有的命令选项。现在可以使用—enable和—disable选项增加或
  删除对特定网卡的支持。(注意:GRUB支持网络启动)
  为了开始编译过程,键入如下命令:
  # make
  # make install
  至此你已经为安装GRUB真正做好了准备。
  将GRUB的相关文件保存在诸如/boot/grub的目录中是一个好主意。为此,按如下步骤:
  1)默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc(或者在
  /usr/local/share/grub/i386-pc目录下,这只取决于你的shell变量的设置。)
  2)建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:
  stage1 stage2 * stage1 5
  稍候将解释这些文件。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin
  目录下)拷贝到/boot/grub目录下。
  安装GRUB可以分为三个单独的步骤:
  1]将“stage1”安装到MBR中。
  2]设置“stage2”的地址或者位置。
  3]设置一个菜单或选项,用来决定启动哪一个操作系统。
  使用下面的命令开始安装GRUB。
  #cd /boot/grub
  # ./grub
  这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。
  end_request: I/O error, dev 02:00 (floppy), sector 0
  GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
  TAB键可列出可能的命令列表。其它情况下TAB会列出设备或文件名。类似下面的提示会出现:
  grub>.
  现在,假设你将Linux安装在了第一块硬盘的第一个分区中或者/dev/hda1中。记住GRUB的命名规则,将上面的名字改为(hd0,0)。键入下面的命令:
  grub>. install (hd0,0)/boot/grub/stage1 (hd0) (hd0,0)/boot/grub/stage2
  p (hd0,0)/boot/grub/menu.conf
  现在分析一下这个命令的细节。
  install
  一个内置的命令,它告诉GRUB将(hd0,0)/boot/grub/stage1安装到hd0的主引导纪录中。
  (hd0,0)/boot/grub/stage2
  告诉GRUB stage2映象的位置。
  p with the the following options: (hd0,0)/boot/grub/menu.conf
  为菜单的显示设置配置文件。
  下面是对这个命令用法的总结:
  1.install
  2.ource_of_stage1
  3.where_to_install
  4.source_of_stage2
  5.p source_of_configuration_file
  现在,你完成了硬盘上的基本安装工作。
  2、在软盘上的安装:
  为了在软盘上安装GRUB,你要会用“dd”命令,并且了解它是如何工作的。为了做一张GRUB启动盘,你要将stage1和stage2文件放到软盘的开始扇区中。
  安装stage1到软盘上:
  插入一张已格式化的软盘,键入命令:
  # dd if=stage1 of=/dev/fd0 bs=512 count=1
  命令的详细说明如下:
  if=input file
  i.e., stage1
  of=output file
  i.e., floppy drive (this may be different on your computer)
  bs=bytes to read and write
  Here it is 512 bytes.
  count=how many times to perform this operation
  每次拷贝“bs”数目的块到目标地址。
  安装stage2到软盘
  # dd if=stage2 of=/dev/fd0 bs=512 seek=1
  这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将调过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节 ,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。
  现在你完成了基本的软盘驱动器安装。
  如果已经安装了grub要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。

相关文章


Linux下配置CVS集成cvstracLinux认证考试
Linux和Windows系统线程间的区别Linux认证考试
Linux系统下usr的目录结构Linux认证考试
分享:Linux操作系统下隐藏文件Linux认证考试
系统引导管理器GRUB学习笔记Linux认证考试
shell变量和运算符Linux认证考试
利用tr命令轻松实现大小写转换Linux认证考试
Linux操作系统中超级权限控制的应用Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛