|
|
| FreeBSDhandbook中文版7FreeBSD的启动过程 | | 发布日期:2005-3-28 浏览:424次 | | 关键字: | 目录 7FreeBSD的启动过程 7.1概要 7.2启动中的问题 7.3MBR,启动步骤1、2和3 7.4启动时内核的调节 7.5Init:进程控制初始化 7.6关机程序 ============================================================= 第7章FreeBSD启动过程 ============================================================= (翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com) 7.1概要 启动一个电脑和加载操作系统的过程被叫做“bootstrapprocess”或简单地叫 “booting”。FreeBSD的启动过程提供了许多弹性来适应实际的变化,允许你选择启动在 同一台电脑上安装的不同操作系统,或是同一操作系统的不同版本。 这章将比较细致地对你可能会涉及到的配置选项和如何定制FreeBSD的启动过程作一 个描述。这包括内核启动前会发生的每一件事情,探测设备,启动init。如果你不十分有 把握的话,当你的屏幕的文本颜色由白变灰的时候,你就可以看到系统检测信息了。 阅读完这章,你将了解到: FreeBSD的bootstrap系统有哪些组件,它们如何互相影响。. 在启动FreeBSD时你可以给组件哪些选项来控制启动过程。. 注意:这章将只描述运行在Intelx86系统上的启动过程。 7.2启动过程中的问题 打开电脑和启动操作系统似乎会引起一个两难的选择。根据定义,电脑在操作系统启动 之前是不知道如何做事的。这包括从磁盘运行程序。所以如果电脑没有操作系统就不能运行 程序,那操作系统是如何启动的呢? 在x86系统中,主要由基本输入输出系统(BIOS)来负责加载操作系统。BIOS首先检 查磁盘的主引导区(MBR),它是在磁盘的一个比较特殊的地方。BIOS加载和运行MBR,而 MBR能完成加载操作系统以外的任务。 如果你只有一个操作系统安装在电脑上,那标准的MBR将起作用。这个MBR会搜索磁盘 上的启动slice,然后在这个slice上运行代码来加载引导操作系统的余下的部分程序。 第1页FreeBSD使用手册 如果你在磁盘上安装了多个操作系统,你可以安装一个不同的MBR,MBR可以显示一个 不同操作系统的列表,允许你选择一个启动。FreeBSD使用这样的MBR,其他操作系统也会 提供其它的MBR。 FreeBSD的bootstrap系统的其余部分被分成三个阶段。第一个阶段是运行MBR,它只 知道把电脑带入一个特殊的状态,然后运行第二阶段。第二阶段要执行的程序要多一点。第 三阶段就完成加载操作系统的任务。这个工作被分成三个阶段是因为PC的标准限制了程序 的大小。这一系列串起来的任务允许FreeBSD提供一个比较灵活的加载程序。 内核启动后,就会探测设备并对它们进行初始化,一旦内核启动过程完成,内核就把控 制权交给用户处理进程init,它可以确定磁盘是否处于可用状态。Init接着就启动用户级 资源配置来加载文件系统,设置网卡来激活网络,接着就启动所有的通常在FreeBSD一运行 就启动的进程。 7.3MBR启动步骤1、2和3 7.3.1MBR,/boot/boot0 FreeBSDMBR是驻留在/boot/boot0。这是MBR的一个拷贝,因为真正的MBR必须被放 置在磁盘的一个特殊部分,在FreeBSD区域的外面。boot0非常简单,在主引导区的程序可 能只有512个字节。如果你已经安装了FreeBSD的MBR,而且还安装了多个操作系统,你将 会在启动时看到一个比较熟悉的画面。 例7-1.boot0画面 F1DOS F2FreeBSD F3Linux F4?? F5Drive1 Default:F2 第2页FreeBSD使用手册 其它操作系统,如windows95,会用自己的MBR来改写已存在的MBR。如果碰到这样的 事,或你想替换FreeBSD的MBR,你可以使用下面的命令: #fdisk-B-b/boot/boot0device 这儿的device是你用来启动的设备,如第一个IDE磁盘ad0,在第二个IDE控制器上的 第一个磁盘,在第一个SCSI磁盘da0等等。 7.3.2步骤1,/boot/boot1,步骤2,/boot/boot2 Boot1可以在引导分区的引导扇区上找到,它无论是在boot0上,或是在MBR上的其它 程序都能找到这样的程序继续启动进程。 Boot1是非常简单的,它也可能只有512字节,只是表明了FreeBSD的存储有磁盘分区 信息的磁盘标签(Disklabel),找到它之后,就会执行boot2。 Boot2稍微有点复杂,它记录着FreeBSD的文件系统以便于在它上面找到文件,另外它 也提供了一个选择可运行的内核或引导程序的简单接口。Loader还要复杂一点,它提供了 一个易于使用的启动配置信息,通常boot2之后就是运行它了,但以前它可以直接运行内核。 例7-2.boot2画面 >>FreeBSD/i386BOOT Default:0:ad(0,a)/kernel boot: 如果你需要替换已安装的boot1和boot2,可以使用disklabel。 #disklabel-Bdiskslice diskslice是启动系统的磁盘和slice的地方,如ad0s1,在第一个IDE磁盘的第一个 slice上。 危险的模式:如果你使用了刚才的磁盘名称,如ad0,在disklabel命令中,你将创建 一个危险的磁盘,没有slices。这可能不是你想要做的,所以确定你在键入RETURN之前, 第3页FreeBSD使用手册 你已反复检查了命令disklabel。 7.3.3步骤3,/boot/loader 引导程序loader是三步中的最后一步,它可能在/boot/loader。Loader有一个非常友 好的配置方法,使用一个易于使用的内建命令,通过一个强大的接口来备份。 7.3.3.1Loader的执行过程 初始化过程中,引导程序探测到一个控制台和一些磁盘,计算出从哪个磁盘启动。因此, 它可以设置成可变化的,然后解释程序就开始启动,命令就会被解释执行。 最后,默认情况下启动程序停顿10秒钟(当然你可以按任意键继续),然后启动内核。 如果进程被打断了,用户可以使用命令来调整参数,卸载或装载模块,最后启动或重新启动。 一个更深入的技术讨论,你可以阅读loader的联机手册。 7.3.3.2Loader内建命令 这些命令集包括: autobootseconds 在规定的时间内不被打断的话,继续启动内核。如果显示一个倒计时,默认的时间 是10秒钟。 boot[-options][kernelname] 直接配合所给的参数加载内核。 boot-conf 在启动时,使用自动的变量配置模块,这只在你先用unload时才有意义,并改变一 些变量,通常是kernel。 help[topic] 第4页FreeBSD使用手册 显示来自/boot/loader.help的求助信息,如果所给的主题(topic)是index,那就 显示所有的主题列表。 includefilename... 执行所给的文件,这文件将被读入并一行一行地执行,一旦有错误发生就直接停止 这个inlucde命令。 load[-ttype]filename 加载kernel,kernel模块或原先指定的文件类型,再接着文件名。任何跟在文件之 后的参数都将会传给这个文件来执行。 ls[-l][path] 列出在给定路径中的文件。如果没有指定路径,将显示root目录的文件列表。如果 有附加-l参数,那么将一起显示文件大小。 lsdev[-v] 列出所有可以加载module的设备,如果指定-v参数,那么会列出更详细的信息 lsmod[-v] 显示已被加载的module,如果有指定-v参数,那么更详细的信息会一起列出。 morefilename 显示所指定的文件内容,并在每LINES(环境变量)暂停。 reboot 直接重新启动机器。 setvariable,setvariable=value 第5页FreeBSD使用手册 设置loader的环境变量。 unload 卸载所有被加载的module。 7.3.3.3Loader举例 这里就是一些loader使用的实际例子。 1,在单用户模式下启动你的普通内核: boot-s 2,卸载你的普通内核和模块,然后仅仅引导你的旧(或另一个)内核: unload loadkernel.old 3,你可以使用kernel.GENERIC,这是安装光盘上的通用kernel,或是kernel.old, 这是你上一个安装的kernel(如果你有升级或重新配置你自己的kernel的话)。 注意:照着下列的步骤可以配合原先的module来加载其它的kernel: unload setkernel=”kernel.old” boot-conf 4,加载内核配置的script文件(这是一个自动的script文件,用来执行你在kernel 启动阶段所要执行的命令): load-tuserconfig_script /boot/kernel.conf 7.4启动时内核的调节 一旦kernel通过loader(一般来说)或boot2(略过执行loader),kernel将会 检查它的启动标记,如果有,就开始按照标记做一些必要的调节。 7.4.1内核启动标记 这儿是一些启动标记: a 在内核初始化期间,询问要使用哪一个设备作为root文件系统 第6页FreeBSD使用手册 C 从CDROM启动 c 运行UserConfig,启动时的内核配置 s 从单用户模式启动 v 在内核启动期间更详细的信息 7.5Init:过程控制初始化 内核一旦启动完成,它就把控制权转交给用户层命令init,它就在/sbin/init中,在 loader中,程序路径可以通过init_path指定。 7.5.1自动重新启动 这个程序会确定系统将要使用的文件系统是存在的。如果不存在,那么fsck就不能正 常地被执行去修复磁盘驱动器,接着init将把系统切换成单用户模式,系统管理者就可以 在这时候直接处理这个错误。 7.5.2单用户模式 这个模式能够通过自动启动顺序来延伸,或用户启动时通过加上-s选项,或在loader 中设置boot_single。它也可以不重新启动通过呼叫shutdown来达到,或在多用户模式下 加上-h选项。如果系统控制台console被设置成insecure,那在开始单用户模式之前,系 统就要求键入root密码。 例如7-3.在/etc/ttys中设置一个console为insecure #namegettytypestatuscomments # #Thisentryneededforaskingpasswordwheninitgoestosingle-usermode #Ifyouwanttobeaskedforpassword,change“secure”to“insecure”here consolenoneunknownoffinsecure 注意:一个insecure的console代表你的console的安全等级是insecure的,并且 确定如果有人要进入单用户模式,就要输入root密码,请注意,insecure不代表你的 第7页FreeBSD使用手册 console是inscure的,而是,如果你要多一点的安全防护,请选择insecure,而不是secure。 7.5.3多用户模式 如果init正确地找到了你的文件系统,或结束了单用户模式,系统就会进入多用户模 式,并开始系统的资源配置。系统将先执行默认的配置文件/etc/defaults/rc.conf,和系 统的详细配置/etc/rc.conf,接着按照/etc/fstab来加载文件系统,再激活网络服务,和 其它的系统守护程序(daemon),最后,执行部分程序的起始script文件。rc是个参考资源 设置系统的好地方,同样,直接查阅那些scripts也是个好方法。 7.6关机程序 使用shutdown可以控制系统进行关机,init将会执行/etc/rc.shutdown这个script 文件,接着输出终止(terminate)信号给所有的程序,这时如果有无法终止的程序,那么就 使用kill来杀死信号。 第8页 | | 关键字: |
|
|