数码鹭岛论坛

标题: 【资料分享】比LILO更强劲的多操作系统引导程序GNU GRUB[转] [打印本页]

作者: 翔子    时间: 2003-5-19 19:42
标题: 【资料分享】比LILO更强劲的多操作系统引导程序GNU GRUB[转]
文章摘要:  
  多引导是目前大家讨论的比较热门的一个话题,GNU针对多引导的问题推出了一个更加灵活和强大的多引导程序GRUB,提出了将引导程序和操作系统分离的解决方法.笔者在本文介绍了GRUB的特点和安装使用方法.   
        
--------------------------------------------------------------------------------
  
正文:     
  
比LILO更强劲的多操作系统引导程序GNU GRUB  
  
  多引导是目前大家讨论的比较热门的一个话题,随着LINUX和INTERNET的热潮席卷全世界,个人电脑已经不再是M$的天下,对于操作系统我们拥有了更多的选择机会,FREEBSD,LINUX....一个硬盘上安装两到三个操作系统已经非常普遍,但是由于各个操作系统的引导过程机制不同,使我们在安装多系统时遇到了不少问题。我们面临着选择什么样的多引导程序的问题。
  LILO的确是一个选择,现在很多人也都是采用LILO解决多引导的问题。但是LILO并不易于使用,仍然不够灵活,而且从技术角度而言LILO仍然只是一个linux loader,它并不直接支持其他的操作系统,LILO对除LINUX外其他操作系统所做的只是将其引导块装入,而并不是将这些操作系统的内核装入,这样做的危险之处在于如果某个操作系统分区的引导块不小心被破坏了,那就可能导致这整个系统无法进入,甚至不得不重新安装,GRUB的推出就是企图改善这种一块硬盘上存在多个引导块的混乱局面。
  GNU针对多引导的问题推出了一个更加灵活和强大的多引导程序GRUB,提出了将引导程序和操作系统分离的解决方法,当然这主要是针对自由操作系统,但是GRUB仍然能够通过chainload引导其它非自由的操作系统。如果你仅仅安装LINUX和WINDOWS的话,的确,LILO已经足够使用,但是GRUB强于LILO之处在于还对GNU Mach,FreeBSD, NetBSD和OpenBSD的直接支持,而且更加灵活。GRUB能够直接引导上述的几个操作系统,装入内核,不需要那些各自为政的引导块, 这样我们只要拥有GRUB,在安装上述那些操作系统时就可以更加放心,不用再被什么引导块被覆盖的问题大伤脑筋。GRUB灵活之处还在于提供了一个引导时功能强大的命令行模式,我们可以举一个例子来说明这样做给我们带来的灵活性:你只需要做一张带GRUB的引导软盘,不需要任何配置,你就可以用这张软盘引导,然后可以通过几条简单指令启动任意一台计算机上的绝大部分操作系统。显然这种灵活信是任何其他引导软件无法比拟的。
  首先,先大概了解一下计算机操作系统的引导过程:
  众所周知,计算机的最初启动是由BIOS控制的,在对一些硬件(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后将控制权移给此引导扇区,由引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操作系统,诸如LILO、OS/2 boot loader等引导加载程序都可以配置成这种方式。  
  和LILO一样,GRUB能够识别文件系统,GRBU能够理解内核的可执行文件格式,这样就可以不用关心内核文件的磁盘定位,而只需通过文件系统便可以找到内核文件,GRUB比LILO能够理解更多的文件系统类型,更多内核可执行文件格式,这样它就能够直接定位和引导不同操作系统的内核。
  GRBU最早是在1995年由Erich Boleyn编写的,其最初目的是为了能够从Utah Mach4微内核系统(即是现在的GNU Mach)中启动引导GNU Hurd操作系统。现在GRUB的基本目的是用于引导符合Multiboot标准的操作系统,Multiboot是一个用于定义符合多引导标准的操作系统规范,这个标准十分全面,但是目前支持它的操作系统仍不多,主要是GNU Hurd,所以现在仍不能达到GRUB所设想的操作系统引导界面大一统的局面,虽然这一天似乎很遥远,但是我们现在仍然可以享受GRUB给我们带来的强大功能和高度的灵活性。
  
  下面我们来看看GRUB的特点和安装使用方法:  
  
一. GRUB的技术特点:
  1. 支持多可执行文件格式
   GRUB支持各种a.out格式和ELF格式。  
  2. 支持不符合Multiboot标准的内核
   GRUB能够直接支持多种并不符合Multiboot标准的自由操作系统内核(主要是FreeBSD,NetBSD,OpenBSD和 linux)。也能通过chainload间接引导非开放的其他操作系统。
  3. 支持操作系统模块装载。
  4. 提供文本格式可手工修改的配置文件。
  5. 菜单界面
  6. 灵活的命令行界面
  7. 多文件系统识别
  能够透明地识别多种文件系统,现在能够识别的文件系统有BSD FFS,DOS FAT16,FAT32,Minix fs和Linux ext2fs.这个范围仍然在扩展。
  8. 支持压缩文件的解压缩。
   能够解压缩被gzip压缩的文件,并且这个识别和解压过程是自动的和对用户透明的,这个功能大大地减少了文件的大小,减少了load的时间,这个功能对于软盘上的系统尤其有用。
   可能有些内核模块在装载时就要求是压缩状态,这时解压此模块可能会画蛇添足,所以GRUB提供了另一个不进行解压缩的模块装载命令。
  9. 可以读取任何已安装的设备上的数据
   支持读取软盘,硬盘上的数据,不依赖于根设备上任何的设置。
  10. 和磁盘定位的表示方法无关。
  11. 能够使用BIOS所检测到的所有RAM.
   GRUB通常能够找到PC兼容机上的全部RAM,它采用一种先进的BIOS查询技术来找到所有的内存空间。
  12. 支持硬盘的LBA模式
   GRUB通过支持LBA模式,突破1024柱面的限制,能够访问8GB以外的全部硬盘空间。
  13. 支持网络
   虽然GRUB是一个基于磁盘的引导程序,但是它也支持网络功能,你可以通过TFTP协议从网络上得到操作系统映象文件并引导。
  
  GRUB的后继版本可能会包括一个内置的可编程语言来支持各种内核的引导参数,这还只是一个操作系统引导器吗?;),并且计划加入对非PC体系结构的支持。
  
二. 如何在LINUX下安装和使用GRUB
  
1. 下载并安装GRUB包:
  你可以到<ftp://alpha.gnu.org/gnu/grub/grub-0.5.94.tar.gz>得到GRUB,然后:
  # zcat grub-0.5.94.tar.gz | tar xvf -
  会生成一个目录grub-0.5.94,再:
  # cd grub-0.5.94
  # ./configure
  # make install
  这样GRUB就安装好了,下面你需要在你的硬盘或者软盘引导区上安装GRUB引导代码。
  a. 制作GRUB引导软盘:
  # cd /boot/grub
  # dd if=stage1 of=/dev/fd0 bs=512 count=1
  # dd if=stage2 of=/dev/fd0 bs=512 seek=1
  b. 制作GRUB硬盘引导:
  重启动用GRUB引导软盘引导,或者你不想重启动也可以执行/usr/sbin/grub。两种情况都会进入命令行界面。 然后,我们首先要设置GRUB的“根设备”,也就是告诉GRUB安装所在的分区:
  grub> root (hd0,0)
  这里牵涉到GRUB的设备命名规则,将在下面介绍,此处(hd0,0)是指第一块硬盘的第一个分区。
  如果你不能够确定安装GRUB所在的分区号的话,可以通过find指令查找:
  grub> find /boot/grub/stage1
  GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名,当然就是我们安装GRUB所在的分区。下面就可以写引导记录了:
  grub> setup (hd0)
  这条命令将会在第一块硬盘的MBR安装GRUB引导,如果你不想在MBR安装GRUB,而是希望将GRUB安装在分区的引导扇区的话,你可以用下面指令指定安装设备:
  grub> setup (hd0,0)
  这将会在第一块硬盘的第一个分区的引导扇区安装GRUB。
  OK,现在你就可以重新启动由GRUB引导你的系统。  
  
2. GRUB的设备命名规则:
  首先GRUB对设备的命名必须包含在小括号内,GRUB不区分IDE硬盘和SCSI硬盘,统一使




欢迎光临 数码鹭岛论坛 (http://www.clore.net/forum/) Powered by Discuz! X3.2