linux操作系统启动流程与kickstart自动化部署

1、简述linux操作系统启动流程
2、简述grub启动引导程序配置及命令行接口详解
3、实现kickstart文件制作与光盘镜像制作
 
这里完整的作业链接
http://note.youdao.com/noteshare?id=f61694c5187e75e13287ecbb400d4128&sub=1534F1575FE64B38B5920433D77F87E4
 
1、简述linux操作系统启动流程
CentOS 系统的启动流程:
概述
CentOS6,且运行级别为3为例
clipboard
详细过程
 
1.POST加电自检;
 
POST(power on system test)。利用BIOS(Basic Input Output System)检测硬件设备是否存在,是否能正常运行,以及选择通过什么设备启动,硬盘光盘或者U盘等
BIOS(Basic Input Output System)它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件
2.读取MBR
 
硬件初始化自检之后,通过BIOS选择启动设备,一般来说设备是硬盘,这时候就会去读取硬盘的MBR(Maser Boot Record,主引导记录)
MBR是启动时所必须要读取的首个扇区。这个扇区一共有512个字节,开头的446字节为引导加载器(bootloader),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)
由于MBR中只有446个字节装载bootloader这个部分非常小,所以在grub中为了解决这个问题,将grub分为2个阶段,第一个阶段在MBR446字节中,主要就是找到并且加载第二阶段引导程序,第一阶段与第二阶段中间还有个1.5阶段主要完成第一阶段和第二阶段的交互。第二阶段主要任务是加载Linux内核和可选的初始磁盘。
    • 常见的bootloader;
      • Windows:ntloader
      • Linux:
        • LILO:LIinux LOader
        • GRUB:Grand Uniform Bootloader,注意这里的GRUB 1.X已经完全重写GRUB0.X没什么关系
          • GRUB 0.X:Grub Legacy
          • GRUB 1.X:Grub2
3.加载内核Kernel
 
在内核引导过程中,初始 RAMDISK(initrd)是由引导程序加载到内存中的,它会被复制到 RAM 中并挂载到系统上。这个 initrd作为 RAM 中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导。
为什么需要ramdisk呢,因为内核设计的非常精简,而很多计算机的硬件是不相同的,于是驱动程序非常多,为了达到通用的目的,我们应该支持更多的硬件,但是每台机器的硬件是确定的,也就是说通用的目的可能有几百种硬盘驱动程序,但是我的硬盘是确定的我只需要一种,这时候如果吧几百种驱动程序都装到内核这个是非常不合理的,也很浪费空间,因为内核需要足够精简,所以这时候需要ramdisk出现进行一个过渡,ramdisk作为一个内存根文件系统相当于一个临时根文件系统,把需要的驱动程序加载出来,包括lvm,raid等,挂载上去ramdisk之后,驱动程序还是在磁盘上,我们还是没有磁盘的驱动程序,我们怎么加载我们需要的驱动程序?
initrd 函数让我们可以创建一个小型的 Linux 内核,其中包括作为可加载模块编译的驱动程序。这些可加载的模块为内核提供了访问磁盘和磁盘上的文件系统的方法,并为其他硬件提供了驱动程序。由于根文件系统是磁盘上的一个文件系统,因此 initrd 函数会提供一种启动方法来获得对磁盘的访问,并挂载真正的根文件系统。在没有硬盘的嵌入式目标中,initrd 可以是最终的根文件系统,或者也可以通过网络文件系统(NFS)来挂载最终的根文件系统
但是大家应该也已经发现了,如果我们计算机的驱动程序编译进了内核,就是说内核是我们自己编译的,需要的驱动也编进去了,这时候我们是不需要ramdisk这个临时根文件系统的,所以ramdisk不是必须的一个过程。但是通过它可以做到通用的目的。
 
4. 启动用户空间第一个程序执行程序/sbin/init
当内核被引导并进行初始化之后,内核就可以启动自己的第一个用户空间应用程序了。这是第一个调用的使用标准 C 库编译的程序。在此之前,还没有执行任何标准的 C 应用程序。 主要功能是准备软件的运行环境,包括系统的主机名称,网络配置,文件系统格式等其他服务的启动管理。 init程序在CentOS5,CentOS6,CentOS7中的实现方式也不相同。
    • init程序的类型:
      • CentOS 5-:SysV init,特点是启动用户空间的服务程序,通常通过脚本进行,有依赖关系的服务将被串行启动,这也导致启动过程非常慢
        • 配置文件:/etc/inittab
          • 格式:id:runlevels:action:process
            • id:一个任务的标识符;
            • runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;
            • action:在什么条件下启动此任务;
              • wait:等待切换至此任务所在的级别时执行一次;
              • respawn:一旦此任务终止,就自动重新启动之;
              • initdefault:设定默认运行级别;此时,process省略;
              • sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;
            • process:任务;
          • 例子:
            • id:3:initdefault: 设置默认运行级别为3,多用户模式
            • si::sysinit:/etc/rc.d/rc.sysinit 设定系统初始化方式
            • l1:1:wait:/etc/rc.d/rc 1 意味着去启动或关闭/etc/rc.d/rc1.d/目录下的服务脚本所控制服务;
        • init的处理流程:
          1. 先去默认的运行级别,一般默认为3
          2. 使用/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. 清理操作
          1. 由于采用3级别,因此只进行l3:3:wait:/etc/rc.d/rc 3即运行/etc/rc.d/rc3.d/目录下的脚本 K*:要停止的服务;K##,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的; S:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;注意:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local (/etc/rc.local)脚本;因此,不便或不需写为服务脚本的程序期望能开机自动运行时,直接放置于此脚本文件中即可。
          2. 配置好[ctrl]+[alt]+[del]组合件的功能
          3. 配置不断电系统pf,pr两种机制
          4. 启动mingetty6个终端
          5. 如果级别是5,则会启动图形界面
      • CentOS 6:Upstart,特点是守护进程间的通信依赖于D-Bus进行,因此可以实现类似并行启动
        • 配置文件:/etc/inittab,/etc/init/*.conf
      • CentOS 7:Systemd,特点是服务只在第一次访问才真正启动起来,因此centos7启动过程非常快
        • 配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
 
 
2、简述grub启动引导程序配置及命令行接口详解
 
配置文件
 
CentOS6: /etc/grub.conf -> ../boot/grub/grub.conf
CentOS7: /etc/grub2.cfg -> ../boot/grub2/grub.cfg
Centos6配置项:
  • default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;自上而下
  • timeout=#:指定菜单项等待选项选择的时长;
  • splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
  • hiddenmenu:隐藏菜单;
  • password [–md5] STRING: 菜单编辑认证;这里的密码STRING需要在命令行执行grub-md5-crypt ,然后输入密码,这时候返回的字符串才是STRING而不是直接写密码字符串
  • title TITLE:定义菜单项“标题”, 可出现多次;
    • root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
    • kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
    • initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
  • password [–md5] STRING: 启动选定的内核或操作系统时进行认证;这里的密码STRING需要在命令行执行grub-md5-crypt ,然后输入密码,这时候返回的字符串才是STRING而不是直接写密码字符串

 

 

grub的命令行接口
在菜单处输入c即可进入命令行接口。
常用命令:
  • help: 获取帮助列表
  • help KEYWORD: 详细帮助信息
  • find (hd#,#)/PATH/TO/SOMEFILE:
如何识别设备: (hd#,#) hd#: 磁盘编号,用数字表示;从0开始编号 #: 分区编号,用数字表示; 从0开始编号 (hd0,0)
  • root (hd#,#)
  • kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
例如:
init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk; boot: 引导启动选定的内核;
手动在grub命令行接口启动系统:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
 
 
3、实现kickstart文件制作与光盘镜像制作
 
 
制作kickstart文件
一般制作有两种方法
  • 手动编写
  • 利用程序生成,主要介绍这种system-config-kickstart生成ks文件的方法
利用system-config-kickstart生成的时候需要使用linux的桌面环境这里
第一步:安装system-config-kickstart程序
yum install system-config-kickstart -y
第二步:命令行打开输入system-config-kickstart
clipboard
第三步:按照需求配置
 
第四步:保存
clipboard
 
保存在了root目录下
 
 
ksvalidator 检查语法错误
 
查看一下
[root@localhost ~]# cat ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall –disabled
# Install OS instead of upgrade
install
url –url=http://mirrors.aliyun.com/centos/6/os/x86_64/
# Root password
rootpw –iscrypted $1$m9M6a3Kx$WNccappVgq7TbRKEPzeBP0
# System authorization information
auth –useshadow –passalgo=sha512
# Use graphical install
graphical
firstboot –disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux –disabled
# Installation logging level
logging –level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network –bootproto=static –device=eth0 –gateway=192.168.253.2 –ip=192.168.253.142 –nameserver=192.168.253.2 –netmask=255.255.255.0 –onboot=on
# System bootloader configuration
bootloader –location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart –all –initlabel
# Disk partitioning information
part /boot –fstype=”ext4″ –size=150
part swap –fstype=”swap” –size=2048
part / –fstype=”ext4″ –grow –size=1
 
repo –name=”CentOS” –baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/ –cost=100
 
 
使用方法
先将ks文件 上传到ftp服务器上,然后进入系统引导的命令行
这里的自建ftp服务器为192.168.253.131,
clipboard
 
 
自定义镜像文件
 
第一步:创建myboot目录
mkdir -pv /root/myboot
 
第二步:复制光盘的isolinux目录
cp -r /media/isolinux/ /root/myboot/
 
第三步:放置ks文件到myboot目录
cp ks.cfg /root/myboot
 
第四步:安装mkisofs命令
yum install mkisofs -y
 
第五步:执行命令
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 /root/boot.iso myboot/
 
clipboard
这个文件就是镜像文件,上传到window然后导入虚拟机即可。
 
第六步,在安装菜单页面 输入ESC进入命令行
表示ks文件在磁盘上,如果ks文件在ftp服务器,web服务器上可以写URL指名网络上ks文件地址
 
备注:转自运维部落,hal