Linux引导过程的九个步骤
- 格式:doc
- 大小:42.00 KB
- 文档页数:5
Linux的引导过程及原理1.1:Linux计算机的启动顺序打开电脑并使其操作系统被加载的过程叫引导。
当PC引导后,BIOS做一些测试保证一切正常,然后开始真正的引导。
启动过程中电脑首先加载了一小段叫 bootstrap loader 的程序,它依次加载和启动操作系统。
bootstrap loader 通常存储在硬盘或软盘的固定位置。
这两步过程的理由是操作系统大而复杂,而电脑加载的第一段代码很小(几百字节),以免使固件不必要地复杂化。
不同电脑的bootstrap也不同,对于PC电脑(它的BIOS)读软盘或硬盘的第一个扇区(叫引导扇区),bootstrap loader包含在这个扇区中,它加载位于(和其他磁盘)其他地方的操作系统。
它选择一个磁盘(通常是第一个软驱,如果无软盘的话,就是第一个硬盘,顺序是可设置的)。
然后读第一个扇区,这叫引导扇区;对于硬盘,也叫主引导记录,因为硬盘可以包含多个分区,每个分区都有自己的引导扇区。
引导扇区包含一个小程序(小到可以存入一个扇区),它的责任是从磁盘读入真正的操作系统并启动它。
1.2:Linux启动方式 可以从软盘或硬盘引导Linux。
从软盘启动Linux时,引导扇区包含的代码只读前数百个数据块(当然,依赖于内核的大小)到预定的内存位置。
Linux引导软盘上,没有系统,内核存在连续的扇区中,因为这样简化了引导过程。
Linux加载后,它初始化硬件和设备驱动程序,然后运行init。
init可启动其他进程以允许用户登录并做其他事情。
这部分的细节在下面讨论。
为了关闭一个Linux系统,首先所有进程被告知结束(这使他们关闭所有文件,完成必要的其他事情,使之整齐地结束),然后unmount 文件系统和交换分区,最后打印可以关掉电源的信息到控制台。
如果没有遵循正确的过程,可怕的事情可能发生。
最重要的文件系统缓冲Cache可能没有回写,这意味着其中的所有资料将丢失,磁盘文件系统不完整,并可能不可用。
启动流程启动时要加载核心,让核心来驱动整个硬件。
整个启动过程:1.加载BIOS的硬件信息,并获得第一个启动设备的代号(CMOS中设定的启动项)。
2.读取第一个启动设备的MBR的引导加载程序(lilo、grub、spfdisk)3.加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备。
4.核心执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件6.启动核心的外挂模块(/etc/modprobe.conf)7.Init 执行各个批处理文件(根据运行级别)。
8.Init 执行/etc/rc.d/rc.local文件9.执行/bin/login程序,等待用户登录。
10.登录之后开始以shell控制主机。
引导加载程序与核心的载入主机读取BIOS,并且了解主要的主机硬件信息后,主机便开始尝试加载操作系统。
主机首先读取的就是硬盘的主引导记录(MBR),在MBR中装有引导加载程序(比如说grub)。
主机刚启动时是不认识磁盘文件系统的,这就需要引导加载程序帮忙。
但我们知道MBR是整个硬盘的第一个扇区,整个大小为一个扇区的大小(512KB),而我们的加载程序却远远大于这个容量。
怎么办?引导加载程序分成两个阶段来执行:1,执行引导加载程序的主程序,这个主程序放在MBR或超级块中。
2,载入引导加载程序的所有设置文件与相关的环境参数文件。
一般来说,设置文件都放在/boot目录下。
引导加载程序必须能做到:●引导加载程序可以直接指定并取用核心文件,并加载到主存储器中。
●也可以将加载程序的控制权移交给下一个加载程序(超级块中的引导加载程序)。
grub是如何被载入的呢?grub有几个重要文档,stage1,stage2,以及stage1.5,这些文档都在/boot/grub下,grub被载入时有以下几个步骤。
Stage1阶段装载基本的引导程式(stage1),这也是安装在MBR中的内容,大小为512字节,但这并不意味着占用的空间为512字节,这还要看块的大小以及inode控制的块数。
LINUX引导过程LINUX引导过程首先说明一下,这里讲的是LINUX引导经过的步骤,而不涉及KERNEL引导过程的内部细节。
希望本文能对初学LINUX的朋友有所帮助。
一、从BIOS到KERNEL计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On Self Test),然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。
如通常BIOS中设的引导顺序为C在最前面,那么就把C盘(第一个IDE硬盘)的第0柱面,第0头的第1个扇区读入内存,然后跳到那里开始执行。
这个扇区有一个大家熟悉的名字——MBR(Main Boot Record)。
换句话说,MBR里面存放的是一小段程序以及分区表的数据。
在使用WIN9X和DOS时,这里面放的代码就把分区表里标记为Active的分区的第一个扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行。
而在用LILO引导LINUX时,有两种选择:(1) 把LILO安装在MBR。
这时就由BIOS直接把LILO代码调入内存,然后跳转执行LILO。
即BIOS——>LILO(在MBR中)——>KERNEL(2) 把LILO安装在LINUX分区,并把LINUX分区设为Active。
这时,BIOS调入的是WIN9X/DOS下的MBR代码,然后由这段代码来调入LILO的代码(位于活动分区的第一个扇区)。
即BIOS——>MBR——>LILO(在活动分区的第一个扇区)——>KERNEL因为在读入及执行MBR时,操作系统还没有起来,所以只能用BIOS提供的INT13来进行磁盘操作,而INT13只能读写硬盘1024柱面之前的数据,由此可知任何操作系统的引导代码必须在1024柱面之前。
对于LINUX来说,不管你使用方式(1)还是方式(2)启动,都要保证KERNEL放在1024柱面之前。
只有在KERNEL起来以后,才有读/写1024柱面以后数据的能力。
Linux系统的启动流程可以大致分为以下几个步骤:1.开机自检(BIOS):服务器主机开机以后,将根据主板BIOS中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2.MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录的引导信息调用启动菜单(如GRUB)。
3.GRUB菜单:对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
4.内核加载:内核是操作系统最基本的部分,负责管理系统的硬件和软件资源。
当GRUB将系统控制权转交给内核时,内核开始运行并加载必要的驱动程序和模块。
5.用户层init依据inittab文件设定运行等级:内核加载之后,第一个运行的程序是/sbin/init,该程序会读取/etc/inittab文件来设定系统的运行等级。
运行等级决定了系统的运行方式和提供的服务。
6.执行rc.sysinit:在设定运行等级之后,/etc/rc.d/rc.sysinit脚本被执行,用于进行系统初始化工作,如设置PATH环境变量、网络配置、分区挂载等。
7.启动内核模块和执行不同级别的脚本程序:根据不同的运行等级,系统会加载相应的内核模块,并执行不同级别的脚本程序,以启动或停止相应的服务。
8.进入系统登陆界面:最后,系统进入登录界面,用户可以输入用户名和密码进行登录,开始使用Linux系统。
以上步骤是一般的Linux系统启动流程,具体细节可能因不同的Linux发行版和配置而有所不同。
Linux系统的启动过程可以分为以下五个阶段:
内核引导:当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入/boot目录下的内核文件。
运行init:init进程是系统所有进程的起点,可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init程序首先需要读取配置文件/etc/inittab。
系统初始化:在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit,它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
建立终端:rc执行完毕后,返回init。
这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。
用户登录系统:命令行登录、ssh登录、图形界面登录3种方式。
Linux启动引导流程一、启动过程:固件firmware(CMOS/BIOS) → POST 加电自检↓自举程序BootLoader(GRUB) →载入内核↓载入内核Kernel →驱动硬件↓启动进程init↓读取执行配置文件/etc/inittab二、主要步骤:1、固件(firmware)的加电自检POST CMOS/BIOS(引导介质,软硬件时钟)2、读取硬盘的第一个位置主引导记录MBR(存放自举程序bootloader)3、Linux下的常用是grub,作用是载入内核(kernel)和镜像文件加载内核4、内核做两件事情驱动硬件和启动init进程Init进程5、Init进程启动后读取/etc/inittab配置文件6、/etc/inittab是一个shell脚本完成后续的系统引导7、首先判断系统的缺省的运行级别/etc/initdefault查看运行级别级别加载脚本8、执行/etc/rd.d/rc.sysinit系统服务启动脚本不管系统在任何运行级别都会运行来进行基本服务的加载9、/etc/rc.d/rc会根据系统的运行级别运行相应的/etc/rc.d/rcN.d (N(0-6)对应运行级别) 这个目录下有两种运行脚本分别以S和K 开头的,S表示开启的服务,K表示关闭的服务服务脚本10、到username、password界面三、启动信息查询dmesg查询系统启动过程里面所有的信息最重要的是内核驱动硬件的信息,可以查看所添加的硬件是否被系统所识别日志文件/var/logBoot.log启动日志,一般是空的Messages 查看某一个服务的启动日志文件,如果某个服务启动的时候出现问题也会记录下来。
Linux 启动过程1、概述1.1启动的步骤1.1.1 启动第一步--加载BIOS当打开计算机电源,计算机会首先加载BIOS信息,计算机必须在最开始就找到它。
BIOS信息所以如此的重要,是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。
1.1.2 启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,里面存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。
其实被复制到物理内存的内容就是Boot Loader,而具体到软件,那就是lilo或者grub 了。
1.1.3 启动第三步--Boot LoaderBoot Loader 就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
系统读取bootloader配置信息,并依照此配置信息来启动不同的操作系统。
1.1.4 启动第四步--加载内核根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。
此时,屏幕一般会输出“Uncompressing Linux”的提示。
当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。
至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
1.1.5 启动第五步--用户层init依据inittab文件来设定运行等级内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
Linux的引导过程1 BIOS自检1)Linux从BIOS中的地址0XFFFF0处开始引导的2)BIOS首先加点POST(Power on self test)自检(POST对硬件进行检测)检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)。
硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。
3)BIOS然后对本地设备进行枚举和初始化统启动自举程序,根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘、光驱、网络服务器等)。
选择合适的启动器4)BIOS包括两个部分:POST代码和运行时的服务(当POST完成后,POST代码从内存中清理出来,但是BIOS 的运行时服务仍然保留在内存中,目标操作系统可以使用这些服务)5)主引导记录(MBR)是一个512字节大小的扇区,位于磁盘上的第一个扇区(0道0柱面1扇区)。
当MBR被加载到RAM中后,BIOS就会将控制权交给MBR实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。
此后将系统启动的控制权移交到MBR部分的代码。
2 如何查看MBR的内容1)以root身份运行命令2)#dd if=/dev/hda of=mbr.bin bs=512 count=1#od –xa mbr.bin以上两句的意思是:dd命令是从/dev/had(第一个IDE盘)上读取512个字节的内容,并将其写入mbr.bin文件中。
od命令会以十六进制和ASCII码格式打印这个二进制文件Linux-dd命令详解dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
linux的启动过程简单描述
1.BIOS自检:在计算机开机时,BIOS首先会进行自检。
它会检查计算机硬件是否能够正常运行,并确定启动设备的顺序。
2. 引导加载程序:BIOS会从硬盘或其他存储设备中找到引导加载程序,并将其加载到内存中。
引导加载程序通常是Grub或Lilo。
3. 内核加载:引导加载程序会加载Linux内核,将其放入内存中,并启动它。
内核负责管理计算机的硬件和软件资源,并为其他程序提供服务。
4. 初始化进程:内核启动后,会启动一个称为init的进程。
它是Linux系统中的第一个用户级进程,负责初始化系统。
init会读取/etc/inittab文件,并根据其中的配置启动其他进程。
5. 运行级别:Linux系统有七个运行级别,每个级别具有不同的功能和服务。
init根据/etc/inittab文件中的设置,选择一个运行级别,并启动相应的进程和服务。
6. 系统服务:在选择的运行级别下,init会启动各种系统服务,例如网络服务、文件系统服务和远程登录服务等。
7. 登录:最后,init会提供一个登录提示符,用户可以输入用户名和密码登录系统。
以上是Linux的启动过程简单描述,这些步骤确保了系统能够顺利地启动,并为用户提供各种服务和功能。
- 1 -。
linux的启动流程详解linux启动流程⼀、第⼀阶段:BIOS上个世纪70年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷⼊ROM芯⽚,计算机通电后,第⼀件事就是读取它。
这块芯⽚⾥的程序叫做"基本輸出輸⼊系統"(Basic Input/Output System),简称为BIOS。
1.1 硬件⾃检BIOS程序⾸先检查,计算机硬件能否满⾜运⾏的基本条件,这叫做"硬件⾃检"(Power-On Self-Test),缩写为POST。
如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中⽌。
如果没有问题,屏幕就会显⽰出CPU、内存、硬盘等信息。
1.2 启动顺序硬件⾃检完成后,BIOS把控制权转交给下⼀阶段的启动程序。
这时,BIOS需要知道,"下⼀阶段的启动程序"具体存放在哪⼀个设备。
也就是说,BIOS需要有⼀个外部储存设备的排序,排在前⾯的设备就是优先转交控制权的设备。
这种排序叫做"启动顺序"(Boot Sequence)。
打开BIOS的操作界⾯,⾥⾯有⼀项就是"设定启动顺序"。
⼆、第⼆阶段:主引导记录BIOS按照"启动顺序",把控制权转交给排在第⼀位的储存设备。
这时,计算机读取该设备的第⼀个扇区,也就是读取最前⾯的512个字节。
如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以⽤于启动;如果不是,表明设备不能⽤于启动,控制权于是被转交给"启动顺序"中的下⼀个设备。
这最前⾯的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。
2.1 主引导记录的结构"主引导记录"只有512个字节,放不了太多东西。
它的主要作⽤是,告诉计算机到硬盘的哪⼀个位置去找操作系统。
linux内核引导原理
Linux内核引导原理主要涉及以下几个阶段:
BIOS/UEFI引导阶段:当计算机加电后,BIOS/UEFI固件开始运行,进行硬件自检和初始化,然后按照预设的启动顺序,加载启动设备(如硬盘、USB等)的MBR/Erase Bloc k Bootloader。
Bootloader阶段:Bootloader是一个独立的、启动操作系统的引导程序,它负责加载和启动内核。
常见的Bootl oader有LILO、GRUB等。
在加载内核时,Bootloader会读取内核映像文件(通常为bzImage或vmlinuz),并将其加载到内存中。
内核加载阶段:当内核映像被加载到内存后,Bootload er会将其解压缩并执行。
内核首先会进行硬件初始化,包括检测硬件设备、配置内存等,然后创建内核线程并开始运行用户空间的init进程(通常为systemd)。
Init进程阶段:init进程是系统启动后的第一个用户空间进程,它的作用是启动和管理其他系统进程。
在Linux
中,init进程通常由内核启动,并负责运行其他系统进程和服务。
系统运行阶段:一旦init进程启动并运行起来,系统就进入了正常运行阶段。
用户可以开始使用各种应用程序和系统服务。
Linux内核引导原理的核心在于Bootloader的引导和内核的加载与初始化。
通过了解这些原理,可以更好地理解L inux系统的启动过程和底层机制。
简述linux启动流程
Linux启动流程是指从开机到进入用户界面的整个过程。
在这个过程中,系统依次完成了硬件初始化、内核启动、启动脚本执行等一系列操作。
1. BIOS或UEFI初始化:开机后,计算机首先会进入到BIOS或UEFI程序中,进行硬件的自检和初始化。
2. 加载引导程序:BIOS或UEFI会查找系统中的引导设备,比如硬盘、光盘、USB等,找到后会将引导程序加载进内存中。
3. 加载内核文件:引导程序会读取内核文件,并将其加载到系统内存中。
4. 内核启动:内核在加载完成后,开始执行初始化操作,包括设备驱动程序的加载、文件系统的挂载等。
5. 运行init进程:内核启动后,会运行init进程,init进程是Linux系统的第一个用户空间进程,主要负责系统初始化和进程管理,同时也是其他终端应用程序的父进程。
6. 执行启动脚本:init进程会读取启动脚本,并依次执行其中的命令,完成系统的初始化和配置。
7. 进入用户界面:启动脚本完成后,系统会进入到用户界面,等待用户的登陆。
总之,Linux系统启动过程是一个非常复杂的过程,从硬件的自检到系统进入用户界面,需要经过多个环节和步骤。
但是,在这个过程中,每个环节都发挥了至关重要的作用,为系统的正常运行打下了
基础。
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
6.2 Linux系统的引导过程Linux系统的引导和初始化过程可以分为两个阶段,如图6.3所示图6.3 Linux内核启动过程示意图第1阶段:完成硬件检测、初始化和内核的引导。
第2阶段:主要是init初始化进程的执行。
1.BIOS自检计算机通电后,首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测,然后BIOS 必须确定要使用哪个设备来引导系统,此时会根据CMOS中设置的引导顺序,搜索处于活动状态并可引导的设备(硬盘、CDROM、USB设备或软盘),当找到一个引导设备之后,从中读出引导块或MBR(MBR,Master Boot Record)。
主引导记录MBR中包含主引导加载程序。
MBR是一个512B大小的扇区,位于磁盘的第一个扇区中(0道0面1扇区)。
当MBR被加载到RAM中之后,BIOS会把控制权交给MBR。
注意,要看MBR的内容,可以执行如下命令:MBR中的主引导加载程序是一个512B大小的映像,其中包含程序代码和一个分区表。
前446B是主引导加载程序,其中包含可执行代码和错误消息文本。
接下来的64B是分区表,其中包含4个分区的记录(每个记录的大小是16个字节)。
MBR以两个特殊数字的字节(0xAA55)结束。
这个数字会用来进行MBR的有效性检查。
2.启动GRUBGRUB是引导加载程序,会引导操作系统。
当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(MBR,Master Boot Record)主引导加载程序(第一阶段的引导加载程序)的主要作用是查找并加载次引导加载程序,它是通过在分区表中查找一个活动分区来实现这种功能的。
当找到一个活动分区时,会扫描分区表中的其它分区,以确保它们都不是活动的。
当这个过程验证完成之后,就将活动分区的引导记录(第二阶段的引导加载程序)从这个设备中读到RAM中,并执行它。
第二阶段的引导加载程序(次引导加载程序)可以更形象地称为内核加载程序。
Linux-开机引导与关机过程Linux 开机引导与关机过程Linux 开机引导与关机过程Bootstrapping(引导) 是 Staring up a computer 的标准术语。
操作系统所提供的正常功能在启动过程中还不能使用,因此,计算机必须“通过其引导程序让自己启动起来”。
在引导过程中,内核被加载到内存中并开始执行。
各种初始化任务得以执行之后,用户就能够使用系统了。
引导阶段是系统特别脆弱的一段时间。
配置文件中的错误,丢失设备或者设备不可靠,以及受损的文件系统都会妨碍计算机的启动。
当打开计算机时,计算机执行存储在ROM中的引导代码,这些代码接下来尝试确定如何加载并启动内核。
内核检测系统的硬件,然后产生系统的init 进程,这个进程进程总是PID1.在出现登陆提示符之前,要完成几项工作。
系统必须检查并安装文件系统,而且系统的守护进程必须启动起来,这些步骤是由init 进程按顺序运行一系列shell 脚本来管理的。
启动脚本由于它们的命名方式而经常被称作“rc文件”,rc 代表runcom 或者 run command。
启动脚本的确切位置以及它们执行方式随操作系统的不同而异。
一.自动引导和手工引导Linux 系统即可以以自动方式也可以以手工方式来引导。
在自动方式下,系统自己执行全部引导过程,不需要任何外部的帮助。
在手工方式下,系统先自动执行一些过程,然后到某一个时刻后,在运行大多数初始化脚本以前,把控制权交给操作员。
在这时候,计算机处于“单用户模式”,大多数系统进程还没有运行,其他用户还不能够登陆系统。
二.引导过程的步骤Linux系统典型的引导过程由下面6个不同的阶段组成:(1)加载并初始化内核(2)检测和配置设备(3)创建内核线程(4)操作员干预(仅用于手工引导)(5)执行系统启动脚本(6)多用户模式运行2.1 初始化内核Linux 内核本身就是一个程序,系统引导过程中的第一项任务就是把这个程序载入内存,以便执行它。
Linux的启动流程1. 从BIOS到KERNELBIOS自检->MBR(GRUB)->KERNEL->KERNEL自解压->内核初始化->内核启动BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作主要是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等主要是为了检查这些设备在开机的时候是否能通过检测,如果能通过检测,说明电脑可以正常的工作。
-----------------------------------------一、载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由那个设备来启动电脑的操作系统,这个设备一般是硬盘。
也就是进入到硬盘的MBR区域(引导扇区),这个区域中的有512个字节的大小,其中前446个字节中保存的程序是选择启动分区,也就是电脑由那个硬盘分区来载入开机的程序。
那么在这个446个字节的空间中保存的就是启动程序,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub 程序。
当找到启动设备(硬盘)时,第一阶段所用的boot loader(存放在引导扇区)被装载到RAM中并被执行。
这里的boot loader在大小上小于一个扇区的大小,也就是512字节,而它的任务,就是加载第二阶段的boot loader。
当负责第二阶段的boot loader位于内存中并被执行时,通常会显示一个一闪而过的屏幕,然后linux以及可选的初始化内存盘(一种临时的根文件系统,如果想得到具体的介绍,请访问/5502266.html) 会被装载到存储器中。
当系统镜像被加载时,第二阶段的boot loader将把控制权转交给内核镜像,与此同时,内核开始自解压并初始化。
在这个阶段,第二阶段的boot loader会检查系统的硬件,枚举那些附加的硬件设备,挂载根设备,之后加载需要的内核模块。
Linux引导过程的九个步骤【1】硬件和固件以及读入MBRBIOS 或其它固件系统读取硬盘或者其它引导设备(例如,光盘、软盘、网络引导等等)上的主引导记录。
计算器在接通电源之后,首先由BIOS 进行自检,即进行所谓的POST(Power On Self Test),然依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。
例如,通常BIOS中设置的引导顺序为第一个IDE硬盘的C分区在最前面,那就是说,计算机开机启动时会把C盘的第0柱面,第0头的第1个扇区读入内存,然跳到那里开始执行。
这个扇区有一个大家很熟悉的名字,它就是: MBR(Main Boot Record)。
换句话说,MBR里面存放的是一小段程序以及分区表的数据。
在使用WIN9X和DOS 时,这里面存放的代码就会把分区表里标记为Active 的分区的第一个扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行.【2】引导装载程序运行x86 系统上的Linux 系统通常使用LILO 或者GRUB。
某些老式系统可能使用loadlin 通过一个中间DOS 分区进行引导。
在Power PC® 系统上,这可能是BootX或者yaboot。
一般来说,引导装载程序是一种简单的程序,它知道到哪里寻找Linux 内核,可能在几个版本之间进行选择,甚至可以选择同一计算机上的其它操作系统。
在用LILO 来引导LINUX 时,有两种选择:(a) BIOS->LILO(直接安装在MBR中)->KERNEL把LILO直接安装在MBR,这时就由BIOS直接把LILO代码调入内存,然跳转执行LILO即可.(b) BIOS->MBR->LILO(安装在活动分区的第一个扇区)->KERNEL把LILO安装在LINUX分区,必须把LINUX分区设为Active. 这时BIOS调入的是WIN9X/DOS 下的MBR代码,然由这段代码来调入LILO的代码(位于活动分区的第一个扇区).在过去,对于能够设置可引导分区的最高柱面,最大硬盘大小, 在大硬盘上主分区的位置等等有许多限制。
因为在读入及执行MBR 时,操作系统还没有起来, 所以只能用BIOS 提供的INT13 来进行磁盘操作,而INT13 只能读写硬盘1024 柱面之前的数据,由此可知任何操作系统的引导代码都必须在1024 柱面之前。
对于LINUX的引导装载程序来说,不管你是使用方式(a)还是方式(b)来启动,都要保证KERNEL放在1024柱面之前。
但因为LINUX不使用INT13来进行硬盘操作, 所以在KERNEL启动以后, 就有读写1024 柱面以后数据的能力了。
不过, 现在几乎所有硬件系统的BIOS 都得到了改进, 能够处理实际上无限大的硬盘, 因此现代的引导装载程序(至少是Linux的引导装载程序),对于分区大小或位置已经没什么限制了.【3】内核装载并进入保护模式当启动电源之际,计算机的BIOS 就会找寻有无系统开机磁盘,有可能使用软盘、硬盘或者是随身碟开机,BIOS会将boot loader载入RAM中,接者boot Loader 会载入Linux Kernel,而Kernel 一旦起动后,第一件事就是切入保护模式(protected mode),此时,所有的硬件交由Kernel 来控制,也意味挣脱BIOS 的羁绊。
【4】初始化硬件并安装根文件系统当Kernel 加载完毕后,便开始初始化系统所有硬设备。
而当所有的硬件初始化的动作也告完成之际,系统将尝试挂载root partition(根分区). 所谓Root partition 也就是将被挂上后当作"/"的根目录,如果无法正确挂载root partition,系统将无法运作。
在某些情况下,可能需要先装载一个临时ramdisk 映像, 以便加载启用真实根文件系统所需的特殊驱动程序或模块, 例如SCSI驱动模块, 然后再安装真正的根文件系统。
安装好根檔系统之后,就可以开始系统初始化了。
【5】启动进程init来初始化Linux系统当root file system 成功的挂载后,就会去执行init这个程序。
init会检查/etc/inittab文檔, 找出该文檔中标明sysinit 的这一行, 并执行该行指定的script. 在Redhat Linux系统上此脚本名为/etc/rc.d/rc.sysinit,它是一个比较复杂和冗长的Shell脚本(有几百行),也就是说rc.sysinit 将开始肩负接下来的系统初始化大任; 而在Debian 系统上此脚本则名为/etc/init.d/rcS, 它其实是只包含一行调用命令的脚本(exec /etc/init.d/rc S);在内核起来之后所生成第一个进程init(/sbin/init),是所有其它Linux进程的父进程(PID为1). 它(init)的工作就是根据/etc/inittab配置文文件来执行相应的脚本进行系统初始化,例如设置键盘,字体,装载模块,设置网络等等(下面6,7,8步骤都是相关的详细介绍).【6】读取/etc/inittab 的内容,对余下的引导步骤进行配置此步骤中特别重要的内容是: 如何利用/etc/inittab 中的命令行控制语法, 来将系统引导到指定的运行级别, 从而决定初始化期间还要执行哪些步骤. 实际上此后的所有引导过程, 完全是由檔/etc/inittab 的内容来控制的.具体来说,脚本和工具一般是按照某些约定来运行的,这些所谓约定, 其实就是定义了几个运行级别, 并指定各个运行级别所需要运行的脚本, 因此在理论上完全可以通过修改/etc/inittab 来运行不同的脚本.【7】与运行级别无关的系统初始化(sysinit)一般情况下,无论运行级别如何,都要执行某些系统初始化操作。
指定运行系统初始化脚本的步骤在/etc/inittab 中用下面这样的命令行表示:# System initialization.si::sysinit:/etc/rc.d/rc.sysinit #适用于RedHat系统;si::sysinit:/etc/init.d/rcS #适用于Debian系统;此行通常设置为开头第二项配置, 其中Red Hat系统的/etc/rc.d/rc.sysinit 是一个很长的脚本(超过800行),用于执行所有初始化过程; 而在Debian系统的/etc/init.d/rcS 则是一个非常简单的脚本, 只包括一行调用命令, 即是带参数S 调用另一个脚本/etc/init.d/rc文檔(exec /etc/init.d/rc S),实际上它只是运行每个匹配/etc/rcS.d/[Ss]??* 的脚本;在Redhat系统中/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -. 呼叫/sbin/initlog 纪录系统初始化过程. 设定path、主机名(hostname)和NIS域名等信息. banner 画面:一般我们看到"Welcome to RedHat Linux" 的讯息. 系统会执行mount -t proc /proc /proc 命令﹐为核心挂载一个特殊的档案系统. 执行/sbin/setsysfont 来设定系统使用的字型. Configure kernel parameters. 装载声卡模块. 设定好系统时钟(system clock). 加载keymap﹐按照您安装时指定的键盘信息来确定您的键盘类型. 启动swapping. 启动系统的置换(swap)空间. Remount the root filesystem read-write、清空mtab﹐. 加载一系列的核心模块. 对档案系统进行检查(fsck). 打开quota. 关于rc.sysinit 在启动过程中所显示的所有信息﹐都会存放到/var/log/dmesg 里面去...等等...- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -系统初始化脚本(sysinit)的一个最重要的任务, 是检查所有的本地文件系统, 如果发现问题, 此脚本会跳到一个shell的sulogin 登录接口,以便让管理者干涉和修正问题. 而若遇到某些文件系统的问题,则可能?**貑?机器. 如果使用和设置了配额, 那么rc.sysinit脚本也将会负责启用配额. 另外在RedHat系统中, 通常还有一个/etc/rc.d/rc.local脚本文檔,它一般是用来启动本地进程的脚本.【8】特定的运行级别的系统初始化在/etc/inittab文檔内容中有一行特定设置特别关键, 此行通常设置在接近檔顶部,也即是在rc.sysinit之前的第一项设置,它就是设置预设运行级别(default runlevel):# The default runlevel.id:3:initdefault: #这是RedHat系统的预设启动级别;id:2:initdefault: #这是Debian系统的预设启动级别;这个预设运行级别将控制/etc/inittab 脚本的其余部分中所要采取的相应操作, 这些操作主要是: 处理/etc/inittab脚本时将会发生什么? 具体来说就是在这个过程中将要涉及哪些文件和目录. 这个操作选择过程则按下述方法来实现:当rc.sysinit执行完毕后,控制权立即移转回init手中, 然后再根据之前已经从/etc/inittab中读出的此项设置行来选择预设的run level, 以便决定要执行哪些服务程序. 实际上可以把任意数量的操作与运行级别联系起来, 而且一个操作也可以与一个或者多个运行级别相关联, 这个关联的设置命令则包含在/etc/inittab 后面的代码中,内容如下:#Red Hat系统中的设置:l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6#Debian系统中的设置:l0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6可以看出,上述设置定义了同所有运行级别相关联的脚本运行方式, 也就是以运行级别的数值为参数来调用rc 脚本. 例如在Red Hat系统中, 执行/etc/rc.d/rc X 命令将调用所有路径匹配/etc/rcX.d/[KkSs][0-9][0-9]* 模式的脚本文件. 例如, 在以运行级别5启动的系统上, 会依次运行以下檔:ls -l /etc/rc5.d/;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/etc/rc5.d/K15postgresql/etc/rc5.d/S01switchprofile/etc/rc5.d/S05harddrake... 略 .../etc/rc5.d/S99linuxconf/etc/rc5.d/S99local- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -请注意: 以“K”或“k”开头的文件是杀死脚本(以stop为参数来调用), 它们结束进程或者清除进程的操作.以“S”或“s”开头的檔是启动脚本,以start为参数来调用,它们一般启动新进程或者使系统准备在此运行级别上运行. 这些文件都是链接到/etc/init.d/中的shell脚本.这也就是说,系统真正要执行的程序,可按照/etc/rc.d/rcX.d/(X代表不同的runlevel号码)目录里面的script内容来决定. 例如:id:3:initdefault: #指定的runlevel为3,会执行/etc/rc.d/rc3.d/目录下的脚本;id:5:initdefault: #指定的runlevel为5,会执行/etc/rc.d/rc5.d/目录下的脚本;【9】在提示符下登录在大多数情况下,当Linux 系统在一个运行级别上运行之后,您希望作为用户登录进系统。