linux多重引导器概述
时间:2007-02-17 来源:PHP爱好者
计算机的最初启动是由BIOS控制的,在对一些硬件(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后由引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操作系统,诸如 LILO、gurb,OS/2 boot loader及PartitionMagic等引导加载程序都可以配置成这种方式。软盘的引导扇区相当于硬盘活动分区的引导扇区,它通常用于装入软盘上的
操作系统。
只要把LILO之类的多重引导器安装在MBR、活动分区或者引导软盘上,就能接管计算机的控制权,然后由多重引导器完成后继的引导过程。
LILO中建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也能运转良好。
linux发行版本中的多重引导器一般是lilo,不过blue point linux2.0用的是gurb。关于旧版的lilo不支持大硬盘的问题,自从新版本发布后已解决。新的linux发行版本一般都不再有这个问题。我先介绍lilo,然后再介绍gurb.
第一部分:lilo
一,lilo的配置
lilo的配置文件是缺省位置为/etc目录下的lilo.conf。由引导装入程序的安装程序LILO 读取。
下面给个lilo.conf的例子:
boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=new
image=/boot/vmlinuz-2.2.18
label=new
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.2.16-22
label=linux
read-only
root=/dev/hda3
other=/dev/hda2
label=dos
本配置文件指定 LILO使用在/dev/hda路径上的主引导记录。启动时,引导装入程序会等待 5 秒的时间让你按SHIFT键。如果未按,则上述提及的第一核心映象(vmlinuz-2.2.18),将被启动。如果按下了SHIFT键则引导装入程序就会问你要启动哪一个映象。 万一你忘了该选择启动哪个映象, 按[TAB]就会有个菜单给你选择。你在这时可以选定或者启动这个全新的内核,或者启动一个原来可靠的内核(vmlinuz-2.2.16-22),或者启动一个不同的操作系统。
由上可见,一个配置文件以一系列的全局选项开始),随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选项所设定的内容。
全局选项部分
boot=boot-device
设定包含引导扇区的设备的名称(如一个硬盘的分区)。如果未指定该关键字引导扇区将从当前作为根文件系统安装的设备中读取(或者可能也会写入)。
compact
试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地减少了读取时间,并使系统描述(MAP)更小。在从软驱进行读取时尤其要使用 'compact' 选项。
default=name
使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项,则将使用在该配置文件中最早出现的那个映象作为启动映象。
disc=device-name
定义特定硬盘的非标准参数。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据是 0x80 ,0x81(十六进制)等等,将无法判断哪一块 Linux 磁盘与哪一块 BIOS 磁盘相对应(因为这决定于 BIOS 的设置和 BIOS 的类型)。因此若你采用的是非一般的安装,那你就需要说明 LINUX 磁盘和 BIOS 磁盘间的对应关系。比如:
map=map-file
定位磁盘描述(MAP)文件。若未指定 'map' 选项,就会使用 /boot/map 文件。
message=message-file
指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后等待按键的时间里不会有信息显示。在信息中,用FF字符([Ctrl + L])清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被改动或取消则必须重建磁盘描述(Map)文件。
prompt
不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'选项而没设定 'timeout' 选项,则不能自行启动。
timeout=tsecs
为键盘输入设定一个超时选项(以10分之一秒为单位)。若在指定的时间内没有按键则第一个映象就会被自动启动。同样,如过用户停顿过长则密码输入就会被取消。默认的超时值是无限。
另外,内核配置参数 append,ramdisk,read-only,read-write,root以及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以指定,该设定值其就会被用做默认的缺省值。
单一映象部分
一个单一映象或者以一行
image=pathname
开始(以提示含有一个LINUX内核的启动映象的文件或设备),或以一行
other=pathname
开始以提示启动其他独立的系统。
label=name
引导装入程序使用每个映像说明的主文件名(不包含路径)来标识该映像。通过设定变量'label'可使用不同的名称。
alias=name
通过指定一个别名可对同一个目录使用第二名称。
password=password
用密码保护映像。
restricted
若是在命令行被指定各参数则只在启动映像使需要输入密码。
内核选项部分
如果被启动的映像是一个LINUX内核,则可以将命令行参数传送到该内核。
append=string
将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全自检或彻查对其有危害的硬盘的参数。比如:
append="hd=64,32,202"
ramdisk=size
该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定该参数,则使用在根文件系统中建立的RAM磁盘大小。
read-only
该参数指定根文件系统应该以只读的形式装载。典型的是,该系统的起始程序稍后将以可读写方式重新装载根文件系统。
read-write
其指定根文件系统应以可读写方式装载。
root=root-device
该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称,则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r 参数所修改,则使用相应的设备。若未指定 'root' 参数,则使用包含核心映象的根设备设置(该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV 变量设定的,并稍后可用 rdev(8)程序修改)
vga=mode
其指定在启动时应选择的 VGA 文本模式。 下列数值可被识别 (忽略大小写):
normal:选择普通 80x25 文本模式。
extent(或ext):选择 80x50 文本模式。
ask:停止并要求用户的输入(在启动时)
使用相应的文本模式。在启动时用vga=ask选项或按[Enter]都可获得一个可用模式的列表。若未指定该参数,则使用在核心映像中获得的 VGA 文本环境。(该设置是编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的)
二,关于lilo的问题
一、先装了Windows,再装Linux时,不能安装LILO。这是大多数Linux新手的问题;有些BIOS不能识别大于8.4G的硬盘,旧的LILO不能识别位置大于1024柱面的系统内核 (kenerl)。因此可能的问题是:LILO被装入MBR,而为Linux准备的硬盘分区远在1024柱面之外,因此Linux不能引导;LILO被装入Linux的root分区(根分区),而它恰好在8.4G之外,又挂了!
解决方案:
也许你已经安装了Linux,不要delete它,改改还能用!好,现在开始:
1. 用PartitionMagic5.0在第一个硬盘的开始分出个10M的ext2分区,格式化。最好把为Linux准备的分区也一同准备好,省得以后麻烦。
2. 用Loadlin或Linux的boot和rescue盘引导系统。mount那个10M的分区--/dev/hda1,假设我使用boot和rescue盘,mount到/mnt/tmp。把/boot/*和内核映象文件拷贝到/dev/hda1相同的目录下,编辑/etc/lilo.conf,在所有的目录前加上/dev/hda1的mount路径,并且将LILO安装到/dev/hda1。
把lilo.conf中的
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map= /boot/map
image = /boot/vmlinuz-2.2.13
修改为
boot = /dev/hda1
install= /mnt/tmp/boot/boot.b
message = /mnt/tmp/boot/bootmsg
map = /mnt/tmp/boot/map
image = /mnt/tmp/boot/vmlinuz-2.2.13
调用lilo命令,重新安装LILO。重起系统,就完了。记住,要卸载Linux,可以用DOS下的fdisk /mbr清除MBR中的LILO。
二、多重引导NT、9x和Linux,并且想要比LILO更有好的界面,Linux+NT-Loader-mini-HOWTO中有详细的介绍;主要的问题是如何将Linux的引导记录写入bootsect.???文件,这里假设你已经成功地安装好Windows9x与NT了。(这里假设Linux安装于第一个逻辑分区,在Linux下为/dev/hda5,Windows9x安装于第一个主分区,在Linux下为/dev/hda1,WindowsNT安装于第二个主分区,在Linux下为/dev/hda2。)
解决方案:
用Loadlin或Linux的boot和rescue盘(指BluePoint光盘的启动选项,RedHat里好像没有)引导Linux系统。(loadlin比较好,rescue盘上可能没有mtools,只能mount cp umount)用一下几句命令创建该文件:
dd if=/dev/hda5 of=/root/bootsect.lix bs=512 count=1
插入软盘,
mcopy /root/bootsect.lix a:
重新引导系统,进入DOS会快一些看到你的成果,进入ntldr所在硬盘分区的根目录,或者说安装WindowsNT前可引导的硬盘分区的根目录(这里是Weindows9x)。拷贝软盘上的bootsect.lix文件。去除boot.ini的只读、隐藏属性。在最后添加c:ootsect.lix="Go to Linux"。存盘退出,添加boot.ini的只读、隐藏属性。重新引导系统,再试试看!注意在对Linux内核的作任何修改后,都必须重作以上步骤,才能正确引导Linux系统。
三、安装多余一个的Linux系统;
主要的问题还是如果多个Linux的LILO或根分区不能被BIOS找到,系统就会挂起!这里假设BluePointLinux安装于第一个逻辑分区,在Linux下为/dev/hda5,RedHat Linux安装于第二个逻辑分区,在Linux下为/dev/hda6。)
解决方案:
我们就同样的建个10M的分区。将两个Linux的引导文件多拷贝到此分区,通常是/boot下的一切,有可能还有/vmlinuz--内核文件,依Linux的发行版本而不同。建议将其分装入两个目录。假设为/bootBlurPoint和/bootRedHat。
编辑lilo.conf文件:
原始修改后
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map = /boot/map
image = /boot/vmlinuz-2.2.13
label = linux
root = /dev/hda1
修改为
boot = /dev/hda1
install= /mnt/tmp/bootBluePoint/boot.b
message = /mnt/tmp/bootmsg
map = /mnt/tmp/bootBluePoint/map
image = /mnt/tmp/bootBluePoint/vmlinuz-2.2.13
label = BluePoint
root = /dev/hda5
image = /mnt/tmp/bootRedHat/vmlinuz
label = RedHat
root = /dev/hda6
四,从主引导记录中移走LILO并重存原先的windows MBR
1. c:> fdisk /mbr
2. #/sbin/lilo -u /dev/hda
3. #dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
4. #cat /boot/boot.0300 > /dev/hda
注意:只有你原先安装windows 95后再安装Linux时,/boot/boot.0300才是你原先的windows 95 MBR。
五,重存LILO到MBR
1. 用安装软盘或光盘启动到boot:
boot: vmlinuz root=/dev/hdXY (如: hda1 )
启动完成后运行 #/sbin/lilo
2. 用两张软盘启动后:
#mount -t ext2 /dev/hda1 /mnt
#ln -s /mnt/boot boot
#ln -s /mnt/etc/lilo.conf /etc/lilo.conf
#/mnt/sbin/lilo
六,拷贝LILO到软盘
1. /sbin/lilo -b /dev/fd0
2.用Redhat 安装盘引导到 boot:
boot: vmlinuz root=/dev/hdXY (hdXY 为你的根分区)
update /etc/lilo.conf
root=/dev/fd0
boot=/dev/fd0
再运行:#/sbin/lilo -v
七,制作一张Redhat Linux 引导盘
#mkbootdisk --device /dev/fd0 2.0.36-3
八,拷贝内核至软盘,让软盘单独引导Linux并挂上硬盘上的根文件系统。
#fdformat /dev/fd0H1440
#dd if=/boot/vmlinuz of=/dev/fd0
#rdev /dev/fd0 /dev/hda1
第二部分:grub
grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,WindowsNT,Windows2000。它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。
grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情况,与lilo相比,它有以下特点:
1,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在8G以外的操作系统。
2,grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那320x400的开机画面不可同日而语。
3,grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。
4,在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。
5,lilo是通过读取硬盘上的绝对扇区来装入操作系统,因此每次分区改变都必须重新配置lilo,例如你用PQ magic调整了分区的大小,那lilo在你重新配置好之前就不能引导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,grub就可以引导系统。 除此之外,Grub还有许多非常强大的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。 蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。
一,grub配置
grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。
menu.lst 是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令,如果一行的第一个字符为井号"#"则这一行为注释,你可以简单地用增加或减少注释行来改变配置。
编辑menu.lst,一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。 蓝点Linux默认是timeout 5,就是5秒没有其他指令就引导系统,如果设成-1,则grub会一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,default=1则启动第2行的系统,如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img是指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmli 计算机的最初启动是由BIOS控制的,在对一些硬件(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后由引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操作系统,诸如 LILO、gurb,OS/2 boot loader及PartitionMagic等引导加载程序都可以配置成这种方式。软盘的引导扇区相当于硬盘活动分区的引导扇区,它通常用于装入软盘上的
操作系统。
只要把LILO之类的多重引导器安装在MBR、活动分区或者引导软盘上,就能接管计算机的控制权,然后由多重引导器完成后继的引导过程。
LILO中建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也能运转良好。
linux发行版本中的多重引导器一般是lilo,不过blue point linux2.0用的是gurb。关于旧版的lilo不支持大硬盘的问题,自从新版本发布后已解决。新的linux发行版本一般都不再有这个问题。我先介绍lilo,然后再介绍gurb.
第一部分:lilo
一,lilo的配置
lilo的配置文件是缺省位置为/etc目录下的lilo.conf。由引导装入程序的安装程序LILO 读取。
下面给个lilo.conf的例子:
boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=new
image=/boot/vmlinuz-2.2.18
label=new
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.2.16-22
label=linux
read-only
root=/dev/hda3
other=/dev/hda2
label=dos
本配置文件指定 LILO使用在/dev/hda路径上的主引导记录。启动时,引导装入程序会等待 5 秒的时间让你按SHIFT键。如果未按,则上述提及的第一核心映象(vmlinuz-2.2.18),将被启动。如果按下了SHIFT键则引导装入程序就会问你要启动哪一个映象。 万一你忘了该选择启动哪个映象, 按[TAB]就会有个菜单给你选择。你在这时可以选定或者启动这个全新的内核,或者启动一个原来可靠的内核(vmlinuz-2.2.16-22),或者启动一个不同的操作系统。
由上可见,一个配置文件以一系列的全局选项开始),随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选项所设定的内容。
全局选项部分
boot=boot-device
设定包含引导扇区的设备的名称(如一个硬盘的分区)。如果未指定该关键字引导扇区将从当前作为根文件系统安装的设备中读取(或者可能也会写入)。
compact
试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地减少了读取时间,并使系统描述(MAP)更小。在从软驱进行读取时尤其要使用 'compact' 选项。
default=name
使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项,则将使用在该配置文件中最早出现的那个映象作为启动映象。
disc=device-name
定义特定硬盘的非标准参数。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据是 0x80 ,0x81(十六进制)等等,将无法判断哪一块 Linux 磁盘与哪一块 BIOS 磁盘相对应(因为这决定于 BIOS 的设置和 BIOS 的类型)。因此若你采用的是非一般的安装,那你就需要说明 LINUX 磁盘和 BIOS 磁盘间的对应关系。比如:
map=map-file
定位磁盘描述(MAP)文件。若未指定 'map' 选项,就会使用 /boot/map 文件。
message=message-file
指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后等待按键的时间里不会有信息显示。在信息中,用FF字符([Ctrl + L])清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被改动或取消则必须重建磁盘描述(Map)文件。
prompt
不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'选项而没设定 'timeout' 选项,则不能自行启动。
timeout=tsecs
为键盘输入设定一个超时选项(以10分之一秒为单位)。若在指定的时间内没有按键则第一个映象就会被自动启动。同样,如过用户停顿过长则密码输入就会被取消。默认的超时值是无限。
另外,内核配置参数 append,ramdisk,read-only,read-write,root以及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以指定,该设定值其就会被用做默认的缺省值。
单一映象部分
一个单一映象或者以一行
image=pathname
开始(以提示含有一个LINUX内核的启动映象的文件或设备),或以一行
other=pathname
开始以提示启动其他独立的系统。
label=name
引导装入程序使用每个映像说明的主文件名(不包含路径)来标识该映像。通过设定变量'label'可使用不同的名称。
alias=name
通过指定一个别名可对同一个目录使用第二名称。
password=password
用密码保护映像。
restricted
若是在命令行被指定各参数则只在启动映像使需要输入密码。
内核选项部分
如果被启动的映像是一个LINUX内核,则可以将命令行参数传送到该内核。
append=string
将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全自检或彻查对其有危害的硬盘的参数。比如:
append="hd=64,32,202"
ramdisk=size
该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定该参数,则使用在根文件系统中建立的RAM磁盘大小。
read-only
该参数指定根文件系统应该以只读的形式装载。典型的是,该系统的起始程序稍后将以可读写方式重新装载根文件系统。
read-write
其指定根文件系统应以可读写方式装载。
root=root-device
该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称,则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r 参数所修改,则使用相应的设备。若未指定 'root' 参数,则使用包含核心映象的根设备设置(该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV 变量设定的,并稍后可用 rdev(8)程序修改)
vga=mode
其指定在启动时应选择的 VGA 文本模式。 下列数值可被识别 (忽略大小写):
normal:选择普通 80x25 文本模式。
extent(或ext):选择 80x50 文本模式。
ask:停止并要求用户的输入(在启动时)
使用相应的文本模式。在启动时用vga=ask选项或按[Enter]都可获得一个可用模式的列表。若未指定该参数,则使用在核心映像中获得的 VGA 文本环境。(该设置是编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的)
二,关于lilo的问题
一、先装了Windows,再装Linux时,不能安装LILO。这是大多数Linux新手的问题;有些BIOS不能识别大于8.4G的硬盘,旧的LILO不能识别位置大于1024柱面的系统内核 (kenerl)。因此可能的问题是:LILO被装入MBR,而为Linux准备的硬盘分区远在1024柱面之外,因此Linux不能引导;LILO被装入Linux的root分区(根分区),而它恰好在8.4G之外,又挂了!
解决方案:
也许你已经安装了Linux,不要delete它,改改还能用!好,现在开始:
1. 用PartitionMagic5.0在第一个硬盘的开始分出个10M的ext2分区,格式化。最好把为Linux准备的分区也一同准备好,省得以后麻烦。
2. 用Loadlin或Linux的boot和rescue盘引导系统。mount那个10M的分区--/dev/hda1,假设我使用boot和rescue盘,mount到/mnt/tmp。把/boot/*和内核映象文件拷贝到/dev/hda1相同的目录下,编辑/etc/lilo.conf,在所有的目录前加上/dev/hda1的mount路径,并且将LILO安装到/dev/hda1。
把lilo.conf中的
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map= /boot/map
image = /boot/vmlinuz-2.2.13
修改为
boot = /dev/hda1
install= /mnt/tmp/boot/boot.b
message = /mnt/tmp/boot/bootmsg
map = /mnt/tmp/boot/map
image = /mnt/tmp/boot/vmlinuz-2.2.13
调用lilo命令,重新安装LILO。重起系统,就完了。记住,要卸载Linux,可以用DOS下的fdisk /mbr清除MBR中的LILO。
二、多重引导NT、9x和Linux,并且想要比LILO更有好的界面,Linux+NT-Loader-mini-HOWTO中有详细的介绍;主要的问题是如何将Linux的引导记录写入bootsect.???文件,这里假设你已经成功地安装好Windows9x与NT了。(这里假设Linux安装于第一个逻辑分区,在Linux下为/dev/hda5,Windows9x安装于第一个主分区,在Linux下为/dev/hda1,WindowsNT安装于第二个主分区,在Linux下为/dev/hda2。)
解决方案:
用Loadlin或Linux的boot和rescue盘(指BluePoint光盘的启动选项,RedHat里好像没有)引导Linux系统。(loadlin比较好,rescue盘上可能没有mtools,只能mount cp umount)用一下几句命令创建该文件:
dd if=/dev/hda5 of=/root/bootsect.lix bs=512 count=1
插入软盘,
mcopy /root/bootsect.lix a:
重新引导系统,进入DOS会快一些看到你的成果,进入ntldr所在硬盘分区的根目录,或者说安装WindowsNT前可引导的硬盘分区的根目录(这里是Weindows9x)。拷贝软盘上的bootsect.lix文件。去除boot.ini的只读、隐藏属性。在最后添加c:ootsect.lix="Go to Linux"。存盘退出,添加boot.ini的只读、隐藏属性。重新引导系统,再试试看!注意在对Linux内核的作任何修改后,都必须重作以上步骤,才能正确引导Linux系统。
三、安装多余一个的Linux系统;
主要的问题还是如果多个Linux的LILO或根分区不能被BIOS找到,系统就会挂起!这里假设BluePointLinux安装于第一个逻辑分区,在Linux下为/dev/hda5,RedHat Linux安装于第二个逻辑分区,在Linux下为/dev/hda6。)
解决方案:
我们就同样的建个10M的分区。将两个Linux的引导文件多拷贝到此分区,通常是/boot下的一切,有可能还有/vmlinuz--内核文件,依Linux的发行版本而不同。建议将其分装入两个目录。假设为/bootBlurPoint和/bootRedHat。
编辑lilo.conf文件:
原始修改后
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map = /boot/map
image = /boot/vmlinuz-2.2.13
label = linux
root = /dev/hda1
修改为
boot = /dev/hda1
install= /mnt/tmp/bootBluePoint/boot.b
message = /mnt/tmp/bootmsg
map = /mnt/tmp/bootBluePoint/map
image = /mnt/tmp/bootBluePoint/vmlinuz-2.2.13
label = BluePoint
root = /dev/hda5
image = /mnt/tmp/bootRedHat/vmlinuz
label = RedHat
root = /dev/hda6
四,从主引导记录中移走LILO并重存原先的windows MBR
1. c:> fdisk /mbr
2. #/sbin/lilo -u /dev/hda
3. #dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
4. #cat /boot/boot.0300 > /dev/hda
注意:只有你原先安装windows 95后再安装Linux时,/boot/boot.0300才是你原先的windows 95 MBR。
五,重存LILO到MBR
1. 用安装软盘或光盘启动到boot:
boot: vmlinuz root=/dev/hdXY (如: hda1 )
启动完成后运行 #/sbin/lilo
2. 用两张软盘启动后:
#mount -t ext2 /dev/hda1 /mnt
#ln -s /mnt/boot boot
#ln -s /mnt/etc/lilo.conf /etc/lilo.conf
#/mnt/sbin/lilo
六,拷贝LILO到软盘
1. /sbin/lilo -b /dev/fd0
2.用Redhat 安装盘引导到 boot:
boot: vmlinuz root=/dev/hdXY (hdXY 为你的根分区)
update /etc/lilo.conf
root=/dev/fd0
boot=/dev/fd0
再运行:#/sbin/lilo -v
七,制作一张Redhat Linux 引导盘
#mkbootdisk --device /dev/fd0 2.0.36-3
八,拷贝内核至软盘,让软盘单独引导Linux并挂上硬盘上的根文件系统。
#fdformat /dev/fd0H1440
#dd if=/boot/vmlinuz of=/dev/fd0
#rdev /dev/fd0 /dev/hda1
第二部分:grub
grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,WindowsNT,Windows2000。它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。
grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情况,与lilo相比,它有以下特点:
1,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在8G以外的操作系统。
2,grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那320x400的开机画面不可同日而语。
3,grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。
4,在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。
5,lilo是通过读取硬盘上的绝对扇区来装入操作系统,因此每次分区改变都必须重新配置lilo,例如你用PQ magic调整了分区的大小,那lilo在你重新配置好之前就不能引导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,grub就可以引导系统。 除此之外,Grub还有许多非常强大的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。 蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。
一,grub配置
grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。
menu.lst 是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令,如果一行的第一个字符为井号"#"则这一行为注释,你可以简单地用增加或减少注释行来改变配置。
编辑menu.lst,一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。 蓝点Linux默认是timeout 5,就是5秒没有其他指令就引导系统,如果设成-1,则grub会一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,default=1则启动第2行的系统,如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img是指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式,root=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点("/")。
title Microsoft Windows
root (hd1,0)
chainloader (hd1,0)+1
root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区 chainloader (hd1,0)+1 装入一个扇区的数据然后把引导权交给它。
php爱好 者站 http://www.phpfans.net php基础|php进阶|php模板.
操作系统。
只要把LILO之类的多重引导器安装在MBR、活动分区或者引导软盘上,就能接管计算机的控制权,然后由多重引导器完成后继的引导过程。
LILO中建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也能运转良好。
linux发行版本中的多重引导器一般是lilo,不过blue point linux2.0用的是gurb。关于旧版的lilo不支持大硬盘的问题,自从新版本发布后已解决。新的linux发行版本一般都不再有这个问题。我先介绍lilo,然后再介绍gurb.
第一部分:lilo
一,lilo的配置
lilo的配置文件是缺省位置为/etc目录下的lilo.conf。由引导装入程序的安装程序LILO 读取。
下面给个lilo.conf的例子:
boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=new
image=/boot/vmlinuz-2.2.18
label=new
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.2.16-22
label=linux
read-only
root=/dev/hda3
other=/dev/hda2
label=dos
本配置文件指定 LILO使用在/dev/hda路径上的主引导记录。启动时,引导装入程序会等待 5 秒的时间让你按SHIFT键。如果未按,则上述提及的第一核心映象(vmlinuz-2.2.18),将被启动。如果按下了SHIFT键则引导装入程序就会问你要启动哪一个映象。 万一你忘了该选择启动哪个映象, 按[TAB]就会有个菜单给你选择。你在这时可以选定或者启动这个全新的内核,或者启动一个原来可靠的内核(vmlinuz-2.2.16-22),或者启动一个不同的操作系统。
由上可见,一个配置文件以一系列的全局选项开始),随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选项所设定的内容。
全局选项部分
boot=boot-device
设定包含引导扇区的设备的名称(如一个硬盘的分区)。如果未指定该关键字引导扇区将从当前作为根文件系统安装的设备中读取(或者可能也会写入)。
compact
试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地减少了读取时间,并使系统描述(MAP)更小。在从软驱进行读取时尤其要使用 'compact' 选项。
default=name
使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项,则将使用在该配置文件中最早出现的那个映象作为启动映象。
disc=device-name
定义特定硬盘的非标准参数。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据是 0x80 ,0x81(十六进制)等等,将无法判断哪一块 Linux 磁盘与哪一块 BIOS 磁盘相对应(因为这决定于 BIOS 的设置和 BIOS 的类型)。因此若你采用的是非一般的安装,那你就需要说明 LINUX 磁盘和 BIOS 磁盘间的对应关系。比如:
map=map-file
定位磁盘描述(MAP)文件。若未指定 'map' 选项,就会使用 /boot/map 文件。
message=message-file
指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后等待按键的时间里不会有信息显示。在信息中,用FF字符([Ctrl + L])清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被改动或取消则必须重建磁盘描述(Map)文件。
prompt
不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'选项而没设定 'timeout' 选项,则不能自行启动。
timeout=tsecs
为键盘输入设定一个超时选项(以10分之一秒为单位)。若在指定的时间内没有按键则第一个映象就会被自动启动。同样,如过用户停顿过长则密码输入就会被取消。默认的超时值是无限。
另外,内核配置参数 append,ramdisk,read-only,read-write,root以及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以指定,该设定值其就会被用做默认的缺省值。
单一映象部分
一个单一映象或者以一行
image=pathname
开始(以提示含有一个LINUX内核的启动映象的文件或设备),或以一行
other=pathname
开始以提示启动其他独立的系统。
label=name
引导装入程序使用每个映像说明的主文件名(不包含路径)来标识该映像。通过设定变量'label'可使用不同的名称。
alias=name
通过指定一个别名可对同一个目录使用第二名称。
password=password
用密码保护映像。
restricted
若是在命令行被指定各参数则只在启动映像使需要输入密码。
内核选项部分
如果被启动的映像是一个LINUX内核,则可以将命令行参数传送到该内核。
append=string
将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全自检或彻查对其有危害的硬盘的参数。比如:
append="hd=64,32,202"
ramdisk=size
该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定该参数,则使用在根文件系统中建立的RAM磁盘大小。
read-only
该参数指定根文件系统应该以只读的形式装载。典型的是,该系统的起始程序稍后将以可读写方式重新装载根文件系统。
read-write
其指定根文件系统应以可读写方式装载。
root=root-device
该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称,则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r 参数所修改,则使用相应的设备。若未指定 'root' 参数,则使用包含核心映象的根设备设置(该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV 变量设定的,并稍后可用 rdev(8)程序修改)
vga=mode
其指定在启动时应选择的 VGA 文本模式。 下列数值可被识别 (忽略大小写):
normal:选择普通 80x25 文本模式。
extent(或ext):选择 80x50 文本模式。
ask:停止并要求用户的输入(在启动时)
使用相应的文本模式。在启动时用vga=ask选项或按[Enter]都可获得一个可用模式的列表。若未指定该参数,则使用在核心映像中获得的 VGA 文本环境。(该设置是编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的)
二,关于lilo的问题
一、先装了Windows,再装Linux时,不能安装LILO。这是大多数Linux新手的问题;有些BIOS不能识别大于8.4G的硬盘,旧的LILO不能识别位置大于1024柱面的系统内核 (kenerl)。因此可能的问题是:LILO被装入MBR,而为Linux准备的硬盘分区远在1024柱面之外,因此Linux不能引导;LILO被装入Linux的root分区(根分区),而它恰好在8.4G之外,又挂了!
解决方案:
也许你已经安装了Linux,不要delete它,改改还能用!好,现在开始:
1. 用PartitionMagic5.0在第一个硬盘的开始分出个10M的ext2分区,格式化。最好把为Linux准备的分区也一同准备好,省得以后麻烦。
2. 用Loadlin或Linux的boot和rescue盘引导系统。mount那个10M的分区--/dev/hda1,假设我使用boot和rescue盘,mount到/mnt/tmp。把/boot/*和内核映象文件拷贝到/dev/hda1相同的目录下,编辑/etc/lilo.conf,在所有的目录前加上/dev/hda1的mount路径,并且将LILO安装到/dev/hda1。
把lilo.conf中的
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map= /boot/map
image = /boot/vmlinuz-2.2.13
修改为
boot = /dev/hda1
install= /mnt/tmp/boot/boot.b
message = /mnt/tmp/boot/bootmsg
map = /mnt/tmp/boot/map
image = /mnt/tmp/boot/vmlinuz-2.2.13
调用lilo命令,重新安装LILO。重起系统,就完了。记住,要卸载Linux,可以用DOS下的fdisk /mbr清除MBR中的LILO。
二、多重引导NT、9x和Linux,并且想要比LILO更有好的界面,Linux+NT-Loader-mini-HOWTO中有详细的介绍;主要的问题是如何将Linux的引导记录写入bootsect.???文件,这里假设你已经成功地安装好Windows9x与NT了。(这里假设Linux安装于第一个逻辑分区,在Linux下为/dev/hda5,Windows9x安装于第一个主分区,在Linux下为/dev/hda1,WindowsNT安装于第二个主分区,在Linux下为/dev/hda2。)
解决方案:
用Loadlin或Linux的boot和rescue盘(指BluePoint光盘的启动选项,RedHat里好像没有)引导Linux系统。(loadlin比较好,rescue盘上可能没有mtools,只能mount cp umount)用一下几句命令创建该文件:
dd if=/dev/hda5 of=/root/bootsect.lix bs=512 count=1
插入软盘,
mcopy /root/bootsect.lix a:
重新引导系统,进入DOS会快一些看到你的成果,进入ntldr所在硬盘分区的根目录,或者说安装WindowsNT前可引导的硬盘分区的根目录(这里是Weindows9x)。拷贝软盘上的bootsect.lix文件。去除boot.ini的只读、隐藏属性。在最后添加c:ootsect.lix="Go to Linux"。存盘退出,添加boot.ini的只读、隐藏属性。重新引导系统,再试试看!注意在对Linux内核的作任何修改后,都必须重作以上步骤,才能正确引导Linux系统。
三、安装多余一个的Linux系统;
主要的问题还是如果多个Linux的LILO或根分区不能被BIOS找到,系统就会挂起!这里假设BluePointLinux安装于第一个逻辑分区,在Linux下为/dev/hda5,RedHat Linux安装于第二个逻辑分区,在Linux下为/dev/hda6。)
解决方案:
我们就同样的建个10M的分区。将两个Linux的引导文件多拷贝到此分区,通常是/boot下的一切,有可能还有/vmlinuz--内核文件,依Linux的发行版本而不同。建议将其分装入两个目录。假设为/bootBlurPoint和/bootRedHat。
编辑lilo.conf文件:
原始修改后
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map = /boot/map
image = /boot/vmlinuz-2.2.13
label = linux
root = /dev/hda1
修改为
boot = /dev/hda1
install= /mnt/tmp/bootBluePoint/boot.b
message = /mnt/tmp/bootmsg
map = /mnt/tmp/bootBluePoint/map
image = /mnt/tmp/bootBluePoint/vmlinuz-2.2.13
label = BluePoint
root = /dev/hda5
image = /mnt/tmp/bootRedHat/vmlinuz
label = RedHat
root = /dev/hda6
四,从主引导记录中移走LILO并重存原先的windows MBR
1. c:> fdisk /mbr
2. #/sbin/lilo -u /dev/hda
3. #dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
4. #cat /boot/boot.0300 > /dev/hda
注意:只有你原先安装windows 95后再安装Linux时,/boot/boot.0300才是你原先的windows 95 MBR。
五,重存LILO到MBR
1. 用安装软盘或光盘启动到boot:
boot: vmlinuz root=/dev/hdXY (如: hda1 )
启动完成后运行 #/sbin/lilo
2. 用两张软盘启动后:
#mount -t ext2 /dev/hda1 /mnt
#ln -s /mnt/boot boot
#ln -s /mnt/etc/lilo.conf /etc/lilo.conf
#/mnt/sbin/lilo
六,拷贝LILO到软盘
1. /sbin/lilo -b /dev/fd0
2.用Redhat 安装盘引导到 boot:
boot: vmlinuz root=/dev/hdXY (hdXY 为你的根分区)
update /etc/lilo.conf
root=/dev/fd0
boot=/dev/fd0
再运行:#/sbin/lilo -v
七,制作一张Redhat Linux 引导盘
#mkbootdisk --device /dev/fd0 2.0.36-3
八,拷贝内核至软盘,让软盘单独引导Linux并挂上硬盘上的根文件系统。
#fdformat /dev/fd0H1440
#dd if=/boot/vmlinuz of=/dev/fd0
#rdev /dev/fd0 /dev/hda1
第二部分:grub
grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,WindowsNT,Windows2000。它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。
grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情况,与lilo相比,它有以下特点:
1,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在8G以外的操作系统。
2,grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那320x400的开机画面不可同日而语。
3,grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。
4,在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。
5,lilo是通过读取硬盘上的绝对扇区来装入操作系统,因此每次分区改变都必须重新配置lilo,例如你用PQ magic调整了分区的大小,那lilo在你重新配置好之前就不能引导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,grub就可以引导系统。 除此之外,Grub还有许多非常强大的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。 蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。
一,grub配置
grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。
menu.lst 是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令,如果一行的第一个字符为井号"#"则这一行为注释,你可以简单地用增加或减少注释行来改变配置。
编辑menu.lst,一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。 蓝点Linux默认是timeout 5,就是5秒没有其他指令就引导系统,如果设成-1,则grub会一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,default=1则启动第2行的系统,如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img是指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmli 计算机的最初启动是由BIOS控制的,在对一些硬件(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后由引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操作系统,诸如 LILO、gurb,OS/2 boot loader及PartitionMagic等引导加载程序都可以配置成这种方式。软盘的引导扇区相当于硬盘活动分区的引导扇区,它通常用于装入软盘上的
操作系统。
只要把LILO之类的多重引导器安装在MBR、活动分区或者引导软盘上,就能接管计算机的控制权,然后由多重引导器完成后继的引导过程。
LILO中建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内核文件,这种地址编码既可以按照柱面/磁头/扇区(CHS)模式,又可以采用LBA的线性块号模式,因此,即使对某些SCSI控制程序LILO也能运转良好。
linux发行版本中的多重引导器一般是lilo,不过blue point linux2.0用的是gurb。关于旧版的lilo不支持大硬盘的问题,自从新版本发布后已解决。新的linux发行版本一般都不再有这个问题。我先介绍lilo,然后再介绍gurb.
第一部分:lilo
一,lilo的配置
lilo的配置文件是缺省位置为/etc目录下的lilo.conf。由引导装入程序的安装程序LILO 读取。
下面给个lilo.conf的例子:
boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=new
image=/boot/vmlinuz-2.2.18
label=new
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.2.16-22
label=linux
read-only
root=/dev/hda3
other=/dev/hda2
label=dos
本配置文件指定 LILO使用在/dev/hda路径上的主引导记录。启动时,引导装入程序会等待 5 秒的时间让你按SHIFT键。如果未按,则上述提及的第一核心映象(vmlinuz-2.2.18),将被启动。如果按下了SHIFT键则引导装入程序就会问你要启动哪一个映象。 万一你忘了该选择启动哪个映象, 按[TAB]就会有个菜单给你选择。你在这时可以选定或者启动这个全新的内核,或者启动一个原来可靠的内核(vmlinuz-2.2.16-22),或者启动一个不同的操作系统。
由上可见,一个配置文件以一系列的全局选项开始),随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选项所设定的内容。
全局选项部分
boot=boot-device
设定包含引导扇区的设备的名称(如一个硬盘的分区)。如果未指定该关键字引导扇区将从当前作为根文件系统安装的设备中读取(或者可能也会写入)。
compact
试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地减少了读取时间,并使系统描述(MAP)更小。在从软驱进行读取时尤其要使用 'compact' 选项。
default=name
使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项,则将使用在该配置文件中最早出现的那个映象作为启动映象。
disc=device-name
定义特定硬盘的非标准参数。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据是 0x80 ,0x81(十六进制)等等,将无法判断哪一块 Linux 磁盘与哪一块 BIOS 磁盘相对应(因为这决定于 BIOS 的设置和 BIOS 的类型)。因此若你采用的是非一般的安装,那你就需要说明 LINUX 磁盘和 BIOS 磁盘间的对应关系。比如:
map=map-file
定位磁盘描述(MAP)文件。若未指定 'map' 选项,就会使用 /boot/map 文件。
message=message-file
指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后等待按键的时间里不会有信息显示。在信息中,用FF字符([Ctrl + L])清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被改动或取消则必须重建磁盘描述(Map)文件。
prompt
不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'选项而没设定 'timeout' 选项,则不能自行启动。
timeout=tsecs
为键盘输入设定一个超时选项(以10分之一秒为单位)。若在指定的时间内没有按键则第一个映象就会被自动启动。同样,如过用户停顿过长则密码输入就会被取消。默认的超时值是无限。
另外,内核配置参数 append,ramdisk,read-only,read-write,root以及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以指定,该设定值其就会被用做默认的缺省值。
单一映象部分
一个单一映象或者以一行
image=pathname
开始(以提示含有一个LINUX内核的启动映象的文件或设备),或以一行
other=pathname
开始以提示启动其他独立的系统。
label=name
引导装入程序使用每个映像说明的主文件名(不包含路径)来标识该映像。通过设定变量'label'可使用不同的名称。
alias=name
通过指定一个别名可对同一个目录使用第二名称。
password=password
用密码保护映像。
restricted
若是在命令行被指定各参数则只在启动映像使需要输入密码。
内核选项部分
如果被启动的映像是一个LINUX内核,则可以将命令行参数传送到该内核。
append=string
将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全自检或彻查对其有危害的硬盘的参数。比如:
append="hd=64,32,202"
ramdisk=size
该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定该参数,则使用在根文件系统中建立的RAM磁盘大小。
read-only
该参数指定根文件系统应该以只读的形式装载。典型的是,该系统的起始程序稍后将以可读写方式重新装载根文件系统。
read-write
其指定根文件系统应以可读写方式装载。
root=root-device
该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称,则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r 参数所修改,则使用相应的设备。若未指定 'root' 参数,则使用包含核心映象的根设备设置(该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV 变量设定的,并稍后可用 rdev(8)程序修改)
vga=mode
其指定在启动时应选择的 VGA 文本模式。 下列数值可被识别 (忽略大小写):
normal:选择普通 80x25 文本模式。
extent(或ext):选择 80x50 文本模式。
ask:停止并要求用户的输入(在启动时)
使用相应的文本模式。在启动时用vga=ask选项或按[Enter]都可获得一个可用模式的列表。若未指定该参数,则使用在核心映像中获得的 VGA 文本环境。(该设置是编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的)
二,关于lilo的问题
一、先装了Windows,再装Linux时,不能安装LILO。这是大多数Linux新手的问题;有些BIOS不能识别大于8.4G的硬盘,旧的LILO不能识别位置大于1024柱面的系统内核 (kenerl)。因此可能的问题是:LILO被装入MBR,而为Linux准备的硬盘分区远在1024柱面之外,因此Linux不能引导;LILO被装入Linux的root分区(根分区),而它恰好在8.4G之外,又挂了!
解决方案:
也许你已经安装了Linux,不要delete它,改改还能用!好,现在开始:
1. 用PartitionMagic5.0在第一个硬盘的开始分出个10M的ext2分区,格式化。最好把为Linux准备的分区也一同准备好,省得以后麻烦。
2. 用Loadlin或Linux的boot和rescue盘引导系统。mount那个10M的分区--/dev/hda1,假设我使用boot和rescue盘,mount到/mnt/tmp。把/boot/*和内核映象文件拷贝到/dev/hda1相同的目录下,编辑/etc/lilo.conf,在所有的目录前加上/dev/hda1的mount路径,并且将LILO安装到/dev/hda1。
把lilo.conf中的
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map= /boot/map
image = /boot/vmlinuz-2.2.13
修改为
boot = /dev/hda1
install= /mnt/tmp/boot/boot.b
message = /mnt/tmp/boot/bootmsg
map = /mnt/tmp/boot/map
image = /mnt/tmp/boot/vmlinuz-2.2.13
调用lilo命令,重新安装LILO。重起系统,就完了。记住,要卸载Linux,可以用DOS下的fdisk /mbr清除MBR中的LILO。
二、多重引导NT、9x和Linux,并且想要比LILO更有好的界面,Linux+NT-Loader-mini-HOWTO中有详细的介绍;主要的问题是如何将Linux的引导记录写入bootsect.???文件,这里假设你已经成功地安装好Windows9x与NT了。(这里假设Linux安装于第一个逻辑分区,在Linux下为/dev/hda5,Windows9x安装于第一个主分区,在Linux下为/dev/hda1,WindowsNT安装于第二个主分区,在Linux下为/dev/hda2。)
解决方案:
用Loadlin或Linux的boot和rescue盘(指BluePoint光盘的启动选项,RedHat里好像没有)引导Linux系统。(loadlin比较好,rescue盘上可能没有mtools,只能mount cp umount)用一下几句命令创建该文件:
dd if=/dev/hda5 of=/root/bootsect.lix bs=512 count=1
插入软盘,
mcopy /root/bootsect.lix a:
重新引导系统,进入DOS会快一些看到你的成果,进入ntldr所在硬盘分区的根目录,或者说安装WindowsNT前可引导的硬盘分区的根目录(这里是Weindows9x)。拷贝软盘上的bootsect.lix文件。去除boot.ini的只读、隐藏属性。在最后添加c:ootsect.lix="Go to Linux"。存盘退出,添加boot.ini的只读、隐藏属性。重新引导系统,再试试看!注意在对Linux内核的作任何修改后,都必须重作以上步骤,才能正确引导Linux系统。
三、安装多余一个的Linux系统;
主要的问题还是如果多个Linux的LILO或根分区不能被BIOS找到,系统就会挂起!这里假设BluePointLinux安装于第一个逻辑分区,在Linux下为/dev/hda5,RedHat Linux安装于第二个逻辑分区,在Linux下为/dev/hda6。)
解决方案:
我们就同样的建个10M的分区。将两个Linux的引导文件多拷贝到此分区,通常是/boot下的一切,有可能还有/vmlinuz--内核文件,依Linux的发行版本而不同。建议将其分装入两个目录。假设为/bootBlurPoint和/bootRedHat。
编辑lilo.conf文件:
原始修改后
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map = /boot/map
image = /boot/vmlinuz-2.2.13
label = linux
root = /dev/hda1
修改为
boot = /dev/hda1
install= /mnt/tmp/bootBluePoint/boot.b
message = /mnt/tmp/bootmsg
map = /mnt/tmp/bootBluePoint/map
image = /mnt/tmp/bootBluePoint/vmlinuz-2.2.13
label = BluePoint
root = /dev/hda5
image = /mnt/tmp/bootRedHat/vmlinuz
label = RedHat
root = /dev/hda6
四,从主引导记录中移走LILO并重存原先的windows MBR
1. c:> fdisk /mbr
2. #/sbin/lilo -u /dev/hda
3. #dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
4. #cat /boot/boot.0300 > /dev/hda
注意:只有你原先安装windows 95后再安装Linux时,/boot/boot.0300才是你原先的windows 95 MBR。
五,重存LILO到MBR
1. 用安装软盘或光盘启动到boot:
boot: vmlinuz root=/dev/hdXY (如: hda1 )
启动完成后运行 #/sbin/lilo
2. 用两张软盘启动后:
#mount -t ext2 /dev/hda1 /mnt
#ln -s /mnt/boot boot
#ln -s /mnt/etc/lilo.conf /etc/lilo.conf
#/mnt/sbin/lilo
六,拷贝LILO到软盘
1. /sbin/lilo -b /dev/fd0
2.用Redhat 安装盘引导到 boot:
boot: vmlinuz root=/dev/hdXY (hdXY 为你的根分区)
update /etc/lilo.conf
root=/dev/fd0
boot=/dev/fd0
再运行:#/sbin/lilo -v
七,制作一张Redhat Linux 引导盘
#mkbootdisk --device /dev/fd0 2.0.36-3
八,拷贝内核至软盘,让软盘单独引导Linux并挂上硬盘上的根文件系统。
#fdformat /dev/fd0H1440
#dd if=/boot/vmlinuz of=/dev/fd0
#rdev /dev/fd0 /dev/hda1
第二部分:grub
grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/2,Windows95/98,WindowsNT,Windows2000。它可以载入操作系统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Windows 98)来完成引导。
grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情况,与lilo相比,它有以下特点:
1,只要安装时你的大硬盘是在LBA模式下,grub就可以引导根分区在8G以外的操作系统。
2,grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样以制作自己的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择最佳模式,与Windows那320x400的开机画面不可同日而语。
3,grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可以用上下键来寻找以前的命令。
4,在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操作系统等。
5,lilo是通过读取硬盘上的绝对扇区来装入操作系统,因此每次分区改变都必须重新配置lilo,例如你用PQ magic调整了分区的大小,那lilo在你重新配置好之前就不能引导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,grub就可以引导系统。 除此之外,Grub还有许多非常强大的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。 蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。
一,grub配置
grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。
menu.lst 是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一个配置命令,如果一行的第一个字符为井号"#"则这一行为注释,你可以简单地用增加或减少注释行来改变配置。
编辑menu.lst,一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。 蓝点Linux默认是timeout 5,就是5秒没有其他指令就引导系统,如果设成-1,则grub会一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,default=1则启动第2行的系统,如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img是指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/vmlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式,root=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点("/")。
title Microsoft Windows
root (hd1,0)
chainloader (hd1,0)+1
root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区 chainloader (hd1,0)+1 装入一个扇区的数据然后把引导权交给它。
php爱好 者站 http://www.phpfans.net php基础|php进阶|php模板.
相关阅读 更多 +