前言:
了解系统内核基本知识
-
内核功能:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能等
-
用户空间:应用程序其中有进程或者线程
-
运行中的系统可分为两层:
内核空间、用户空间 -
内核设计流派:
-
单内核设计:把每种功能集成于一个程序中;例如:
linux -
微内核设计:每种功能使用一个单独的子系统实现;例如:
Windows,Solaris
linux内核的特点:
支持模块化:.ko(kernel object)
支持模块运行时动态装载和卸载;其中linux内核的组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:
centos5:/boot/initrd-VERSION-release.img
centos6和7:/boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
系统启动流程
-
简单描述:
系统初始化流程:
内核级别: POST–>Bootsequence(BIOS)–>Bootloader(MBR)–>kernel(ramdisk)–>rootfs(readonly)–>/sbin/init(/etc/inittab)
用户级别: 设置默认运行级别–>运行系统初始化脚本,完成系统初始化rc.sysinit–>关闭对应级别下面要停止的服务,启动对应级别下面要开启的服务–>设置登录终端–>[]启动图像终端] -
详细介绍:
POST:开机自检<加电自检>完成对硬件的检测;是BIOS功能的一个主要部分,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测;如某些硬件出现错误无法通过检测就导致系统无法启动,POST完成之后将被清出内存;
Bootsequence(BIOS):按次序查找引导设备,第一个有引导程序的设备就是本次启动用到的设备。进行设备的枚举和初始化,按CMOS的设置所有处于活动状态并且可引导的设备
(floppy、CD-ROM、USB、DISK、NFS),加载主引导记录(MBR)到内存中,然后BIOS将控制权给下一步BOOTLOADER;BOOTLOADER(MBR):引导加载器,程序;MBR前446bytes;
功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开;而后把系统控制权移交给内核;kernel 内核自身初始化
启动
init进程init 以守护进程方式存在,是所有其他进程的祖先(PID=1),init 进程非常独特,能够完成其他进程无法完成的任务。
程序类型:CentOS5-:sysv init
配置文件:/etc/inittabCentOS6:upstart(并发启动)
配置文件:/etc/inittab、/etc/init/*.confCentOS7:systemd
配置文件:/usr/lib/systemd/system//etc/systemd/system/* -
系统进入
runlevel -
运行系统初始化脚本
/etc/rc.d/rc.sysinit -
运行指定运行级别对应的目录下的脚本,
/etc/rc.d/rc#.d/目录下的服务脚本 -
捕获组合键的定义
-
定义电源
fail/restore脚本 -
启动 getty 和虚拟控制台
-
用户级别:
init通过读取/etc/inittab文件来完成系统初始化过程: -
探测可识别到的所有硬件设备;
-
加载设备驱动程序(有可能会借助ramdisk加载驱动);
-
以只读方式挂载根文件系统;
-
运行用户空间的第一个应用程序:/sbin/init
-
LILO:LInux LOader (无法支持大硬盘分区) -
GRUB 0.X:[centos5,6] grub legacy (经典),各种安卓手机使用 ; -
GRUB 1.X:[centos7] grub2 -
Windows:
ntloader,仅是启动OS -
Linux:
-
linux内核特征之一:使用缓冲和缓存来加速对磁盘上的文件进行访问;
-
ramdisk-(磁盘)转换成ramfs(文件系统),提高速度; -
centos5:initrd,工具程序:mkinitrd -
centos6,7:initramfs,工具程序:dracut,mkinitrd
工作原理介绍:
MBR(master boot record)主引导记录
MBR共有512bytes,其中446bytes为主引导记录bootloader,另外的64bytes为分区表fat,其中包含4个分区表记录,以16bytes为一个分区划分记录,最后2bytes为MBR的有效性检测55AA;
GRUB(bootloader)
grub:
Grub unified bootloader,grub向用户提供了更好的开机体验,加入了开机的菜单、开机图片等更多的功能,而这种功能bootloader不能提供,grub分为三个阶段(grub legacy):
一阶段:
primary boot loader:1st stage分区引导加载
功能:此阶段在bootloader中,bootloader不在直接加载内核,而是加载grub的第二阶段;bootloader备份在了/boot/grub/stage1中二阶段:
parition:filesystem driver:1.5stage文件系统接口。功用:提供文件系统驱动,方便虚拟系统的生成,让stage1中的bootloader能识别stage2所在分区上的文件系统;三阶段:
partition /boot/grub:2nd stage,分区文件,不支持复杂逻辑软raid等,仅支持基本分区(内核文件只能放在基本磁盘分区上),通过读取/etc/grub.conf文件,显示出内核列表,指定了内核镜像和initrd所在的分区为root,设定内核参数,并加载vmlinuz和initramfs这两个文件到内存中。在这一阶段可以编辑启动项目。如指定根分区root,内核kernel,initrd镜像等;也可以进入grub command line手动写启动信息。
功用:1、提供菜单、并提供交互式接口;[e:编辑模式,用于编辑菜单;c:命令接口];2、加载用户选择的内核或操作系统允许传递参数给内核,可隐藏此菜单;3、为菜单提供保护机制,为编辑菜单进行认证,为启动内核或操作系统进行认证;
GRUB管理开机启动的过程分成了三个阶段.。tage1主要负责BIOS和GRUB之间的交接。这部分才是真正放在MBR中的bootloader。而后stage1.5是连接stage1和stage2之间的通道,起着过渡的作用。最后才是GRUB中真正核心的部分stage2,它可以让用户以选项的方式将操作系统加载、修改选项和内核参数。
kernel工作方式:
工作原理:当内核映像被加载到内存中,并且stage2 的引导加载程序释放控制权之后,内核阶段就开始了,内核在完成自身的初始化之后进行探测可识别的所有硬件设备,由于内核中只包含了少量的硬件驱动,此时会借助内存中的
initrd根文件系统加载相关驱动程序。当内核具备访问根文件系统功能时(rootfs),initrd根文件系统将被卸载,并挂载真正的根文件系统。这就是内核的初始化过程,系统已经脱离了/boot分区,独立存活在内存中。
vmlinuz-xxx内核镜像是一个zImage(压缩映像,小于512KB)或一个bzImage(较大的压缩映像,大于512KB),它是使用zlib进行压缩过的内核文件。
initramfs-xxx.img是由stage2引导加载程序加载到内存中的,它会被复制到RAM中并挂载到系统上。这个initrd会作为RAM中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导。initrd文件包括可加载模块的驱动程序,为内核提供可访问磁盘和磁盘上的文件系统的接口,并为其他硬件提供了驱动程序。由于根文件系统是磁盘上的一个文件系统,因此内核通过initrd取得根分区的访问,并挂载真正的根文件系统。这是一个解包的initramfs镜像文件。
用户级别启动
-
首先系统通过读取
/etc/inittab文件来完成系统的初始化过程; -
inittab文件
inittab文件表示的为系统init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。inittab文件中,每一行定义一种action以及与之对应的process.
基本格式:
id:runlevels:action:processID:一个任务的标识符;
runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;
action:在什么条件下启动此任务;
process:执行的任务;
runlevel:Sysvinit读取/etc/inittab文件中是否含有initdefault’项,有则init将启动默认运行的模式。如果没有默认的运行模式,将进入系统控制台,手动决定进入何种运行模式。
一共有7个(0-6)运行级别:
0:关机,shutdown;1:单用户模式(singler user),root用户无须认证,此为维护模式;2:多用户模式(multi user),会启动网络功能,但不会启动NFS,维护模式;3:多用户模式(Full multiuser mode),完全功能模式,文本界面;4:预留级别:目前无特别适合目的,但习惯以同3级别功能使用;5:多用户模式(multi user),完全功能,图形界面;6:重启,reboot;
其中默认级别:3和5
级别切换:init命令
级别查看:who -r、runlevel其中
ACTION常见的有4中动作:
1、wait:等待切换至此任务所在的级别时执行一次;
2、respawn:一旦此任务终止,就自动重新启动之;
3、initdefault:设定默认运行级别;
4、sysinit:设定系统初始化方式,此处一般指定/etc/rc.d/rc.sysinit
系统初始化脚本:/etc/rc.d/rc.sysinit
此文件初始化过程中主要功用:
-
设置主机名
-
设置欢迎信息
-
激活
UDEV和SELINUX -
挂载
/etc/fstab文件中定义的所有文件系统 -
检测根文件系统,并以读写方式重新挂载根文件系统
-
设置系统时钟
-
根据
/etc/sysctl.conf文件的设置,来设置内核参数 -
激活
lvm及软raid设备 -
激活
swap设备(此操作在fstab中以执行) -
加载额外设备的驱动文件
-
清理操作(过去的
lock和pid文件)
/etc/rc.d/rc 和/etc/rc.d/rc#.d/ 介绍
rc是个脚本,后面接参数。如:l5:5:wait:/etc/rc.d/rc 5wait意味着init系统将等待rc启动服务脚本i0:0:wait:/etc/rc.d/rc3
意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务
rc根据runlevel执行rc#.d目录下启动脚本。每个runlevel都有一个对应的rc#.d目录;
其中在这些目录下存放着很多不同的脚本,文件名以S开头的脚本表示在当前runlevel中启动,K开头的脚本表示不在当前runlevel中启动;
K*:要启动的服务;K##*,优先级,数字越小,越先关闭;依赖的服务先关闭,而后关闭被依赖的;
S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;
在
/etc/rc.d/rc#.d目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在/etc/init.d目录下,也就是说在/etc/init.d目录下的文件会自动以S##script或K##script的软链接存在于各 runlevel 的目录下
/etc/rc.d/rc.local
正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local(/etc/rc.local)脚本;因此,不便或不需为服务脚本的程序期望能开机自动运行时,直接放置此脚本文件中即可;
init在等待/etc/rc.d/rc执行完毕之后,将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。 至此,Linux的启动完成
-
tty1:2345:respawn:/usr/sbin/mingetty tty1
…tty6:2345:respawn:/usr/sbin/mingetty tty6
注意:
1、mingetty调用login程序;
2、打开虚拟终端的程序出了mingetty之外,还有诸多getty等;
命令行中的操作:
gurb的命令行接口操作
help:获取帮助列表help KEYWORD:获取详细帮助信息find (hd#,#) /path/to/somefileroot (hd#,#)kernel /path/to/kernel_file:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数
例如:init=/path/toinit,selinux=0initrd:/path/to/initramfs_file:设定为选定的内核提供额外文件的ramdisk;boot:引导启动选定的内核;
-
如何识别设备:
(hd#,#)hd#:磁盘编号,用数字标示:从0开始编号#:分区编号,用数字标示;从0开始编号
手动在grub命令行接口启动系统:
grub> root(hd#,#)grub> kernel /vmlinuxz-VERSION-RELEASE ro root/dev/DEVICEgrub> initrd /initramfs-VERSION-release.imggrub> boot
在配置文件中操作:
配置文件:/boot/grub/grub.conf
配置项:default=#:设定默认启动的菜单项:菜单项(title)编号从0开始timeout=#:指定菜单项等待选项选择的时长;splashimage=(hd#,#)/PATH/TO/XPAM_PIX_FILE:指明菜单背景图片文件路径;hiddenmenu:隐藏菜单;password [--md5] STRING:菜单编辑认证;title TITLE:定义菜单项”标题”,可出现多次;root(hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的”根”kernel /PATH/TOVMLINUZ_FILE [PARAMETERS]:启动的内核initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;password [--md5] STRING:启动选定的内核或操作系统时进行认证;(grub-md5-crypt)
进入单用户模式:
-
编辑
grub菜单(选定要编辑的title,而后使用e命令); -
在选定的
kernel后附加 -
s,S或single都可以 -
在
kernel所在行,键入b命令
安装grub:
-
在系统中安装:
grub-installgrub-install --root-directory=ROOT /dev/DISK -
在grub表中安装:
grubgrub> root (hd#,#)grub> setup (hd#)
原创文章,作者:N22-白蚁,如若转载,请注明出处:http://www.178linux.com/47130

