"1、简述linux操作系统启动流程
一、Linux系统的组成部分:内核+根文件系统
1.1内核的功能
进程管理:IPC(inter process communication)机制,有消息队列、semerphor、shm、socket(跨主机之间的通信)
内存管理:
文件系统管理:
网络管理:
硬件驱动管理:
安全管理:
1.2运行中的系统环境可以分为内核空间和用户空间
内核空间:内核代码,表现为系统调用
用户空间:应用程序,表现为进程或者线程
1.3内核设计流派
单内核设计:把所有功能都集成在单个内核内
举例:Linux
微内核设计:将不同的功能分别设计成不同的内核子系统
举例:Windows,Solaris
1.4Linux内核特点
内核模块化:.ko(kernel object);例如文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
1.5内核的组成部分
1)核心文件是/boot/vmlinuz-VERSION-release;
内核官方站点是:https://www.kernel.org
2)模块文件在:/lib/modules/VERSION-release
进入正题:Linux系统启动流程
注:以下仅适用于PC架构的主机和MBR架构的
Linux系统启动大概有以下步骤:
步骤一:加电自检:power on system test(POST)
主要检测硬件设备是否存在并是否能正常运行,如:CPU、内存、硬盘等;CPU风扇是否能够正常运转。有些设备不影响系统的正常启动,例如鼠标键盘等。
这些自检的功能是由一个软件程序来提供的,叫BIOS(Basic Iput and Output System),该软件是在CMOS芯片上的,通过给CMOS加电进而激活BIOS,BIOS会根据CMOS上的一些配置的硬件信息去读取其他设备的硬件信息并且检测其是否能够正常运行,之后再进行硬件设备的初始化。
步骤二:选择启动顺序,加载MBR(Boot Sequence)
在硬件设备初始化之后,BIOS会列出一些可以启动的装置顺序,接下来读取第一个可以启动设备中操作系统的核心文件。就是在第一个可以启动的硬盘的第一个扇区之内,也就是(MBR),该启动管理程序叫做Boot Loader。
Boot Loader 的作用就是加载操作系统的核心文件,并提交内存当中运行,随后进行操作系统的安装
Boot Loader的另一个主要功能是提供菜单信息
步骤三:加载系统内核kernel,执行系统初始化信息
Boot Loader 加载并将内核文件加压缩到内存当中,此时系统根据内核文件会对硬件设备进行再一次的检测和加载(网卡、磁盘、CPU),与之前BIOS完全不同,这时BIOS已经完全退出舞台。有内核程序全权接管。内核文件通常放在/boot/linuz-VERSION-release.
这里有一个有趣的问题需要探讨,类似于先有鸡还是先有蛋的问题:因为Boot Loader加载内核程序到内存后,内核程序就接管了一切事物,那么他要去加载内核文件,而内核文件在硬盘当中。众所周知,也就是必须要有硬盘的驱动程序才能加载内核文件,而硬盘的驱动又在内核文件当中,如此循环我们是没办法加载内核文件的。
所以这里也就引进了虚拟文件系统来解决这个问题。虚拟文件系统(Initail RAM DISK),同样也放在/boot目录下面,并且是一个以initrd开头的文件。
这个文件的特点是:他可以由Boot Loader加载至内存并解压缩,然后模拟一个虚拟的根文件系统,进而提供相关的驱动程序以只读方式来加载硬盘设备中的真正根文件系统,大功告成之后把历史舞台交给根文件系统。
步骤四:启动用户空间的第一个执行程序/sbin/init
在内核、硬件及驱动程序加载完毕后,内核会呼叫用户控件的第一个执行程序/sbin/init,init主要功能是准备软件运行环境,包括主机名称、网络配置、文件系统格式等其他服务的管理。这些操作都是根据init的配置文件来定义的。
init的配置文件;
centos5:由于centos5采用的是SYsV init方式,其特点是启动用户空间的服务程序,通常通过脚本进行,有依赖关系的服务将被串行启动,这也就导致centos5启动非常慢,其配置文件为 /etc/inittab
centos6:采用Upstart方式,其特点是守护进程间的通信依赖于D-BUS进行,因此,可基本实现并行启动;配置文件:/etc/inittab,/etc/init/*.conf
centos7:采用Systemd方式,其特点是服务只有在第一次被访问时才会真正启动起来;因此centos7系统的启动过程非常之快:其配置文件为/usr/lib/systemd/*
在init中有非常重要的配置项目,叫系统的启动级别。分为以下几种:
1、0:关闭所有服务,即关机;
2、1:维护模式,单用户模式;此级别允许用户直接登录而无需验证;
3、2:维护模式,多用户模式;需要用户认证,会启动网络功能;
4、3:正常模式,完全多用户的文本界面
5、4:预留模式
6、5:正常模式,完全多用户的图形界面
7、6:关闭所有服务,重启
通常默认是3级别或者5级别,服务器上默认3级别;切换级别使用init 【0-6】,查看级别使用who -r 或者runlevel
init的处理流程
init是通过自上而下的读取inittab文件来依次执行的,因此init处理流程是:
1、读取默认runlevel,一般默认是3级别
2、使用/etc/rc.d/rc.sysinit进行系统的初始化
3、由于采用的是3级别,因此只进行13:3:wait:/etc/rc.d/rc 3
4、配置好【ctrl】+【alt】+【del】组合键的功能
5、配置不断电系统pr、pf两种机制
6、启动mingetty6个终端
7、如果是5级别,则会以/etc/X11/prefdm-nodaemon启动图形界面
在init执行的第二步执行系统的初始化过程,init根据/etc/rc.d/rc.sysinit中定义的内容进行系统的初始化,/etc/rc.d/rc.sysinit所做的事情主要有以下几点:
(1)根据配置文件中的设定来设置主机名(读取/etc/sysconfig/network文件中的HOSTNAME进行);
(2)打印文本欢迎信息;
(3)激活seLINUX和udev;
(4)挂载所有定义在/etc/fstab文件中的文件系统;
(5)激活swap设备
(6)检测根文件系统,并实现以读写方式重新挂载
(7)设置系统时钟
(8)根据/etc/sysctl.conf文件设定的内核参数的值
(9)激活LVM和RAID设备;
(10)加载额外的设备驱动程序
(11)清理操作
在/etc/rc.d/rc.sysinit初始化完成系统后,此时系统顺利开始工作,不过此时我们还是启动各项服务如:网络功能、dhcp服务等功能、所有以S开头链接文件,都被传递start参数以启动,所有以K开头的文件,都被传递stop参数以停止
启动相关服务之后,必须启动登录终端。
一般启动6个虚拟终端:
tty1:2345:respawn:/sbin/mingetty tty1
tty2:2345:respawn:/sbin/mingetty tty2
.....
每个终端启动后,会立即通过此终端附加一个login登录程序。
总结:加电自检-->Boot Sequence(BIOS)-->Boot Loader(MBR)-->Kernel(ramdisk)-->rootfs-->switchroot-->/sbin/init-->(/etc/inittab,/etc/init/*.conf)-->设置默认的运行级别-->系统初始化脚本-->关闭或启动对应级别下的服务-->启动终端
2、简述grub启动引导程序配置及命令行接口详解
2.1
在BIOS读取相关信息后,接下来就去第一个可以启动的设备当中MBR加载Boot Loader主程序,BootLoader提供具有菜单功能,直接加载内核信息,以及相关的控制权转交功能。MBR只有512字节,其中446字节加载Boot Loader。因为Boot Loader只有446个bytes,所以不可能容纳那么多功能,因此Linux将Boot Loader的程序运行和配置项加载分成三个阶段(stage)来运行:
stage1:运行Boot Loader主程序,这个程序必须被安装在启动区,即MBR仅安装Boot Loader的最小主程序。
stage1_5:在MBR随后的分区存放,主要用于与stage2所在的分区的文件系统进行交互
stage2:通过Boot Loader加载的所有配置文件及相关的环境参数信息,这些都存放在磁盘分区/boot下。
由此可知/boot/grub中最重要的就是grub.conf以及各种文件系统的定义,Boot Loader通过读取这些文件系统后就能识别在/boot下的内核文件了。
/boot/grub/grub.conf中各种参数解析:
default:设定默认的内核文件
timeout:系统隔多久启动默认操作系统
splashimage:grub菜单背景图片;
图片:xpm格式,压缩为gzip,14bits颜色,640X480;
hiddenmenu:隐藏选择菜单;
title:定义一个操作系统或内核
root:指定引导当前操作系统的分区
kernel:指定内核文件路径,根文件系统所在的硬盘设备,以及相关的内核参数
initrd:指定辅助内核完成启动的虚拟文件系统路径
2.2GRUB界面支持命令行接口,在GRUB界面按照提示输入e、b、c等命令进行相应的编辑,输入c进入命令行模式:
help:获取帮助信息
find:文件查找,方法find (hd#,#)/
root kernel initrd boot 同上
3、实现kickstart文件制作与光盘镜像制作"
kickstart是RedHat/CentOS/Fedora等系统实现无人值守自动化安装的一种安装方式,系统管理>员可将安装过程中需要配置的所有参数集成于一个kickstart文件中,而后在系统安装时,安装程>序通过读取事先给定的这个kickstart文件自动化地完成配置并安装完成。
制作kickstart文件的方式:
1)手动编辑,可以依据某个模板进行修改。
2)使用kickstart文件创建工具:system-config-kickstart进行配置,同样可以导入某个模板进行修改。
本文主要介绍使用 kickstart文件创建工具:system-config-kickstart 来定制kickstart:必须确保system-config-kickstart已经安装,如果没有安装可以使用yum安装:
[root@jacklin ~]# yum install system-config-kickstart
在命令行上运行system-config-kickstart命令即可启动窗口界面:
[root@jacklin isolinux]# system-config-kickstart
kickstart配置程序:
可以使用Ctrl+O打开文件
1、*如上图所示*,首先进行基本配置,可以配置默认语言、键盘、时区还有根密码,根密码会在输入成功后进行加密,高级配置中的目标体系有三个选项,一般都会勾选第一个,也可以根据实际情况来选择。
2、安装方法执行新安装,这里选择的是HTTP方式,服务器时aliyun镜像,选择这一项要确保电脑能够连接网络。
3、选择安装类型,是否使用grub口令以及安装选项和内核参数
4、选择是否清除主引导记录、是否删除现存分区、是否初始化磁盘标签以及设置磁盘分区
5、配置网络
6、验证配置,默认勾选使用屏蔽口令
7、是否启用防火墙,最好设置为禁用。
8、是否安装图形环境
9、选择需要的软件安装包
10、安装前执行的脚本,注意运行环境是微型linux系统环境
11、安装后执行的脚本,这里可以写一些用户登录信息和配置yum仓库。
12、完成配置后记得进行保存,保存于root下
13、用ksvalidator命令检查kickstart文件是否有语法错误:
[root@jacklin ~]# ksvalidator ks.cfg
如无报错信息,至此kickstart文件制作完成。
制作光盘引导镜像:
将bootloader、Kernel、initrd及kickstart文件制作成光盘镜像,以实现本地光盘镜像引导安装CentOS系统,其中anaconda应用程序位于initrd提供的rootfs中,
而后续安装用到的程序包来自阿里云镜像站点(mirrors.aliyun.com),刚才在制作kickstart文件时已经手动指定。
1)通过df -h确认光盘是否已经挂载,下图显示的 /dev/sr0即是光盘的映射文件
2)创建目录/myboot,并复制光盘的isolinux目录、刚才制作的kickstart文件ks.cfg 到/myboot目录下:
3)从光盘复制过来的文件都只有只读权限,需要添加写权限
4)修改/myboot/isolinux/isolinux.cfg配置文件,向默认启动的label所定义的内核传递参数,执行kickstart文件的存放位置:
[root@jacklin myboot]# vim isolinux/isolinux.cfg
光标所示处可以向内核传递参数,指明ks文件所处的位置。注意:无论kickstart文件是存放在待制作的光盘镜像中的哪个路径下,都可以在此处通过向内核追加参数的方式指明kickstart文件位置。
5)设置系统引导时等待timeout的时间,可以设置更小以节约等待时间
6)制作光盘镜像:
[root@jacklin myboot]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /myboot/boot.iso ./
7)通过xshell自带的ftp功能将boot.iso传输到Windows桌面
8)新建虚拟机测试光盘是否可用: