Linux开机过程概述_Linux
  

 Linux开机过程按理说蛮简单的,却难住了一大片朋友,也成了面试必问 的考题之一,今天你准备好了吗

Linux开机过程概述_Linux_02


综述:开启电源 

启动COMS/BIOS (basic input output system)(自举代码)加电自检(检测CPU,显卡,主板,io,内存等信息)
读取硬盘引导扇区 (第一扇区MBR,512字节,分为三部分,一个446字节启动加载器,一个2字节flag,最后一个64字节DPT(disk partition talbe)
加载LILO或者grub (从启动加载器加载)/boot/grub/grub.conf  里面定义了需要哪个启动菜单,需要加载哪个内核,以及内核映像
按grub 加载内核 /boot/vmlinuz
只读方式挂装根文件系统 /boot/initramfs(系统启动的第一个进程)
启动init进程(一切进程的“祖父”) 
读取/etc/inittab文件 
读取/etc/rc.d/rc.sysinit文件 
读取/etc/fstab文件 
运行/etc/rc.d/rcX.d下的文件 
读取/etc/rc.d/rc.local 文件


Linux开机过程概述_Linux_03

BIOS初始化时

检测外围设备 
检测启动设备(硬盘、光盘、网络) 等待用户输入DEL,设置BIOS
如果是硬盘启动则读取与执行启动设备的第一个扇区

 

系统引导内核文件(vmlinuz) 

是可引导的、压缩的内核。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。 vmlinuz是可执行的Linux内核,它的解压程序也在内核当中 。 vmlinuz的建立有两种方式 编译内核时通过make zImage创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性。 内核编译时通过命令make bzImage创建 (单独编译内核映像,不编译驱动模块,生成内核映像bzImage) 内核文件存放 在/boot目录中。 初始化内存镜像盘( initramfs) 核心初始化

检测硬件设备 
设备驱动初始化 
将根分区以只读方式挂载 
载入初始进程(一般是init)

系统初始化文件(inittab)
 

init定义了0~6这7个运行级别。 

0   关机

1   单用户模式(文本模式)

2   多用户模式但不支持NFS(文本模式)

3   多用户(文本模式)

4   暂无定义

5   多用户图形界面模式

6   重启计算机
 

运行级别可以被指定于:

1.系统启动时作为核心加载参数被指定

2.未被指定的情况下,系统启动时从/etc/inittab中读取 3

.在系统运行中,root用户键入init [0-6]来切换模式。

系统初始化脚本

/etc/rc.d/rc.sysinit是系统启动用的脚本

从/etc/sysctl.conf中读取核心参数

设置系统时钟

载入keymap

激活swap分区

设置主机名

检查根文件系统并挂载

加载Raid设备

激活磁盘限额

检查并挂载其他文件系统

清除失效锁及PID文件

运行级别服务目录
 

每一个运行级别都对应一个目录 /etc/rc.d/rcX.d 目录内存放的,即当前运行级别需要开启的服务脚本 对应/etc/rc.d/init.d/目录下的链接 链接文件开头是S,表示启动;开头是K,则表示关闭。

切换运行级别,即运行这个目录里所有的脚本 用户可以通过ntsysv调整当前运行级别的开关服务,或用chkconfig,调整某一运行级别下的开关服务。

用户自定义启动脚本文件

/etc/rc.d/rc.local文件是在系统启动最后一个被读取的用户自定义启动脚本文件。 一般系统用户将针对此台计算机的开机定制设置写入其中,而非/etc/rc.d/rc.sysinit。

看到这里有没有晕了,如果你已经晕了,请扶墙。