当前位置导航:炫浪网>>网络学院>>操作系统>>Linux教程

Grub配置杂谈


  1 一个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
  
  2 解读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的位置,也可以splash /boot/logo/800x600x8.img)
  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",惊喜吗? 有趣吧! )
  
  
  3 配置grub
  grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。
  现在,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。我们就从GRUB支持的启动过程开始。可以有两种方法来完成启动过程:
  ·A.通过调用内核本地启动
  ·B.连续启动或者将控制转给另一个引导器
  A模式启动过程
  1.配置跟设备或者告诉GRUB你的根文件系统。
  2.告诉GRUB你的内核影像的位置,然后将参数传送给内核。
  3.重新启动,试一下。
  为了启动Linux,将内核以bzImage的文件名放在/boot/目录中,跟文件系统是
  /dev/hda1,或者GRUB中的(hd0,0)。启动过程如下:
  1.root (hd0,0) [This sets the root partition]
  2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel]
  B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO
  或者NTLDR):
  1.设置根分区但不要安装它
  2.激活这个分区
  3.配置需要启动的分区的第一个扇区
  4.重新启动,看一下效果。
  我们在试试启动安装在/dev/hdc1或者(hd1,0)的windows。启动windows的过程如下:
  1.rootnoverify (hd1,0)
  2.makeactive
  3.chainloader +1 [+1 sets the first sector of the current root
  partition]
  4.boot [transfers the control and quits GRUB]
  menu.conf文件:它用于建立启动多操作系统时的菜单。建立menu.conf并不难。它使用简单的英语,就象你在这一节看到的那样。
  所有的菜单项目都以没有逗号分隔的“title TITLENAME”开头。你可以随意设置
  TITLENAME。
  设置Linux启动菜单步骤如下:
  1.设置标题
  2.设置根分区
  3.设置内核的相应参数
  4.启动
  一个菜单例子:
  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
  前面有#的行是一个注释。
  建立启动Windows 或者 DOS的菜单:
  title Windoze
  rootnoverify (hd0,0)
  makeactive
  chainloader +1
  boot
  #----
  又或者:
  title Microsoft Windows XP
  map (hd0) (hd1)
  map (hd1) (hd0)
  root (hd1,0)
  chainloader (hd1,0)+1
  makeactive
  boot
  ----
  注意:root和rootnoverify都是一样的,把rootnoverify改成root也行。不过经过实践来看。有时引导win时,系统安装好后,是rootnoverify (hdX.Y)这样形式的,这样会出现windows起不来,出现什么windows什么文件损坏的情况。这时,我们就要把在grub中,引导windows的那段中的rootnoverify改为root
  root英文的意思就是根的意思,在这里是让linux知道自己所处的位
相关内容
赞助商链接