2018-12-04
一、简述linux操作系统启动流程
1.启动流程第一步:通电自检加载BIOS
打开计算机电源时,计算机会首先加载BIOS信息,主要作用是检测设备是否存在并且可以正常运行,例如:CPU、内存、硬盘、键盘等设备是否存在并且能正常运行。自检方式通过BIOS(Basic Input Output System)系统进行,它是装载于CMOS硬件芯片之上的一个设备,加电后由该设备对BIOS提供一些配置信息引导其去读取其他设备信息并检测其是否存在并可以正常启用。
2.第二步:选择顺序启动,读取MBR
其中MBR即Master Boot Record ,主引导记录,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1).MBR主引导加载程序是一个512字节大小的映像,其中包含了程序代码和一个小分区表。前446个字节是主引导程序,接下来的64字节是分区表,最后为2个字节的校验码。系统找到MBR后,将其复制放入到0×7c00地址所在的物理内存中。被复制到物理内存的内容就是Boot Loader,在windows下为ntloader,在linux下为Grub(LIinux)、LiLo(LOader)等。
其中Grub 即GRand Unified Bootloader 是一个将引导加载程序安装到主引导记录的程序,它有Stage1,stage1.5,stage2等几个重要文件。
----->stage1放在MBR中,在系统启动时用于装载STAGE2并将控制权交给它(446B)
----->stage1.5连接stage1和stage2的桥梁(在MBR后面几个扇区)
----->stage2是整个GRUB的核心,所有功能由它实现
引导顺序:stage1--->stage1.5-->stage2
3.第三步:Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。bootloader供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核。Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的。
4.第四步:加载内核
boot分区被挂载,grub也完整了,grub继续工作,读取grub.conf文件,grub.conf文件中指定了要加载的内核,加载boot分区中的内核文件到内存,并且在内存中解压,同时还会加载内核所需的驱动程序文件,从而对内核进行挂载以及驱动根文件系统。initrd(Initial RAM Disk)它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。并且开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序
5.第五步:启动init并根据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
运行级别:
0 关闭所有服务,关机
1 维护模式:(single user),root用户,无需认证
2 多用户模式:(multl user)会启动网络功能 但不会启动NFS
3 多用户模式:(multl user)完全功能模式,文本界面
4 预备级别:目前无特定的使用目的,默认同级别3
5 多用户模式:(multl user),完全功能模式,启用图形界面
6 重启,reboot
6.启动第六步:init进程执行 rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
7.启动第七步:启动内核模块,执行脚本
分别执行/etc/init/rcS.conf、/etc/init/rc.conf、/etc/init/start-ttys.confl来调用命令执行/etc/rc#.d/文件里面定义的是各种服务的启动脚本,可以ls查看,S开头代表开机启动的服务,K开头的是关机要执行的任务。#代表数字,一个数字代表一个运行级别,共7个运行级别
8.启动第八步:执行/etc/rc.d/rc.local文件
init进程加载配置文件/etc/init所有的conf文件,主要的如下:
---->rcS.conf---rc.syinit(加载fstab)其中initab获得系统的启动级别。
----->rc.conf---根据获得的启动级别调用/etc/rc.d/rc脚本,启动相应级别的目录下的所有软链接(/etc/rc.d/rcN.d)
----->rc.local---开机启动文件(2345级别),注意1级别不能调用rc.local
----->tty.conf和/etc/init/prefdm.conf---加载相应的终端程序然后登录字符或图形界面。
9.启动第九步:执行/bin/login程序,等待用户的登录。
执行/bin/login程序,等待用户登录
二、简述grub启动引导程序配置及命令行接口详解
grub启动分为三个部分:
阶段1: stage1用于启动Boot loader 来加载stage2的内容至内存中(mbr中启动)
阶段2:实际为stage1.5阶段,存放在mbr之后的扇区中,主要作用是让在阶段1中启动的Boot loader能够识别并且驱动第三阶段所在分区上的文件系统。
阶段3:应为stage2阶段,这一步提供菜单和编辑时使用的图形界面,一般挂载至/boot/grub目录下,另外,grub有自己的配置文件用以配置其中的选项,位置通常在/boot/grub/brub.conf且通常有个符号链接文件:/etc/grub.conf
命令行接口
help
help COMMAND
root (hd0,0)设定根分区为第一块磁盘的第一个分区
find (hd0,0)/PATH 查找文件
kernel /PATH init=/sbin/init selinux=0 ro root=/dev/DEVICE 设定内核文件
initrd /PATH 设定ramdisk
boot 启动
配置文件
/etc/grub.conf 是/boot/grub/grub.conf的软链接
配置项:
hiddenmenu:隐藏菜单
timeout:超时时间
default:默认启动菜单项,从0开始
splashing:图片
title:标题
password --md5 STRING:编辑内核时要按p输入密码(使用grub-md5-crypt生成)
三、实现kickstart文件制作与光盘镜像
kickstart 文件组成
kickstart文件共分三部分组成
1.命令段
★必备参数
认证方式:authconfig --enableshadow --passalgo=sha512
bootloader位置:bootloader --location=mbr --dirverorder=sda --append="crashkernel=auto rhgb quiet"
键盘:keyboard us 美式
语言:lang en_US.UTF-8
清空mbr:zerombr
清除分区:clearpart --all
boot分区:part /boot --fstype=ext4 --size=500
pv分区:part pv.008002 --size=51200
卷组:volgroup myvg --pesize=4096 pv.008002
lv:logvol / --fstype=ext4 --size=10240 myvg
密码:rootpw --iscrypted (使用openssl passwd -1 -salt `openssl rand -hex 4`生成)
时区:timezone Asiz/Shanghai
★可选参数
install:或upgrade 安装或升级
img文件:url url=http://PATH 或cdrom
文本:text,默认gui
网络:network --onboot yes --device eth0 --bootproto dhcp --noipv6
防火墙:firewall --disabled
selinux:selinux --disabled
安装后命令:halt poweroff reboot
repo源:repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
程序包段
%packages
@^minimal
@core
chrony
kexec-tools
%end
脚本段
%pre:安装前脚本
%post:安装后脚本
如何制作kickstart文件
制作kickstart文件的方式:
1)直接手动编辑,可以依据某个模板来进行修改;
2)使用kickstart文件创建工具:system-config-kickstart进行配置,同样可以导入某个模板进行修改。
使用[root@zabbix-server wanglei]# yum install system-config-kickstart命令安装图形化kickstart安装界面
在命令行上运行system-config-kickstart命令即可启动窗口界面:
[root@zabbix-server wanglei]# system-config-kickstart
首先完成基本配置(如图),这里可设置语言类型、键盘类型、时区、管理员密码(加密)以及安装的平台类型等选项
选择安装方式,这里通过网易镜像网站(mirrors.aliyun.com)安装程序包:
选择安装类型、MBR的安装位置以及向内核传递的参数等:
设置分区信息:
网卡配置,可以静态指定也可以使用dhcp动态获取网络属性配置:
认证方式配置:
设定是否开启防火墙和selinux功能:
设置是否安装图形界面:
选定要安装的程序包:
安装前要执行的脚本,注意运行环境是安装介质之上的微型Linux系统环境:
安装后要执行的脚本:
完成配置之后进行保存:
用ksvalidator命令检查kickstart文件是否有语法错误:
[root@walterwong ~]# ksvalidator centosks.cfg
如无报错信息,至此kickstart文件制作完成。
制作光盘镜像
1)通过 df -h 命令确认光盘是否已挂载:
2)创建目录/data/centiso,并复制光盘的isolinux目录、刚才制作的kickstart文件centosks.cfg 到/data/centiso目录:
3)从光盘复制过来的文件都只有只读权限,需要添加可写权限:
4)修改/data/centiso/isolinux/isolinux.cfg配置文件,向默认启动的label所定义的内核传递参数,执行kickstart文件的存放位置:
[root@walterwong data]# vim ./centiso/isolinux/isolinux.cfg
注意:无论kickstart文件是存放在待制作的光盘镜像中的哪个路径下,都可以在此处通过向内核追加参数的方式指明kickstart文件位置。
5)节约等待光盘镜像引导安装时间,修改timeout时间:
6)制作光盘镜像:
[root@walterwong data]# 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 /data/boot.iso ./centiso/
至此,启动文件制作完毕。
注意:
1.制作时centos7与centos6 yum库会有所不同,请注意更改repo文件
2.只需要复制isolinux目录即可