1、简述linux操作系统启动流程   

   

    POST自检--Boot Sequence(BIOS) --Boot loader(MBR)--Kernel -- rootfs -- switchroot --/sbin/init(/etc/inittab,/etc/init/*.conf)--设定默认运行级别--系统初始化脚本--关闭或启动对应级别下的服务--启动终端(命令行终端或图形界面终端) 


  1.POST自检

     电脑主机打开电源的时候随后会听到滴的一声响系统启动开始了开机自检POST,自检开始这个过程中主要是检测计算机硬件设备比如CPU内存主板显卡等设备是否有故障存在。如果有硬件故障的话将按两种情况理对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成不能给出任何提示或信号,对于非严重故障则给出提示或声音报警信号等待用户处理,如果没有故障POST完成自己的接力任务将尾部工作交接给BIOS处理。


2.Boot Sequence(BIOS)

   Boot Sequence主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。这一步的实现是这样的:根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。


3.加载Boot loader(MBR)

   步骤2的BIOS通过读取并执行启动设备的MBR中的bootloader,而bootloader要实现的功能就是提供一个菜单给用户,让用户去选择要启动的系统或不同的内核版本,然后把用户选择的内核版本加载至RAM中的特定空间,接着在RAM中解压、展开,而后把系统控制权移交给内核。

                       

  在这个过程中CentOS 6之后的系统主要靠Grub的引导,而Grub最要分为两个版本:grub 0.xx:grub legacy和grub 1.xx:grub2;

    Grub分为两个阶段

           stage1:存放在MNR中,主要是Boot loader

           stage1.5:存放于MBR之后的扇区,加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统;

           stage2:存放在磁盘中,主要是/boot/grub/目录下


  4.Kernel初始化:

     自身初始化

     探测可识别到的所有硬件设备

     加载硬件驱动程序(有可能会借助于ramdisk加载驱动)

     以只读方式挂载根文件系统

      运行用户空间的第一个程序:/sbin/init


            init的类型:

               CentOS 5: SysV init

                    配置文件:/etc/inittab

               CentOS 6: Upstart

                    配置文件:/etc/inittab

                           /etc/init/*.conf

               CentOS 7: Systemd

                    配置文件: /usr/lib/systemd/system/    

                              /etc/systemd/system/


            ramdisk:

                Linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问

                    ramdisk --> ramfs 

                    CentOS 5:initr

                        工具程序:mkinitrd

                    CentOS 6、7:initramfs

                        工具程序:dracut,mkinitrd


            系统初始化流程(内核级别):POST -->Boot Sequence(BIOS) --> Boot loader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init (运行级别)



  5.启动/sbin/init进程:

            CentOS 5: SysV init 

                  运行级别:为了系统的运行或维护等目的而设定的机制

                       0-6:7个级别

                           0:关机,shutdown

                           1:单用户模式(single user),root用户,无须认证:维护模式

                           2:多用户模式(multi user),会启动网络功能,但不会启动NFS:维护模式

                           3:多用户模式(multi user),完全功能模式,文件界面

                           4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用

                           5:多用户模式(multi user),完全功能模式,图形界面

                           6:重启,reboot

                     默认级别:3,5

                     级别切换: init #

                     级别查看:who -r  runlevel 

                   配置文件:/etc/inittab



2、简述grub启动引导程序配置及命令行接口详解   


  配置文件:/boot/grub/grub.conf

      配置项:

        default=#:设定默认启动的菜单栏,落单项(title)编号从0开始

       timeout=#:指定菜单项等待选项选择的时长

       splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径

       hiddenmenu:隐藏菜单

       password [--md5] STRING:菜单编辑认证

       title TITLE:定义菜单项“标题”,可出现多次

           root (hd#,#) :grub查找stage2及kernel文件所在设备分区:为grub的“根”

           kernel /PATH/TO/VMLINUZ-VERSION-RELEASE [PARAMETERS] :启动的内核

           initrd /PATH/TO/INITRAMFS-VERSION-RELEASE.img:内核匹配的ramfs文件

           password [--md5] STRING:启动选定的内核或操作系统时进行认证  

  

  命令行接口详解:

      grub的命令行接口

           help:获取帮助列表

           help KEYWORD:详细帮助信息

          find (hd#,#)/PATH/TO/SOMEFILE

          root (hd#,#)

          kernel /PATH/TP/KERNEL_FILE:设定本次启动时用到的内核文件,额外可以添加许多内核支持使用的cmdline参数

                例如:init=/path/to/init,selinux=o

          initrd /PATH/TP/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk

          boot:引导启动选定的内核

   

           

3、实现kickstart文件制作与光盘镜像制作


   kickstart文件的格式

          命令段:

             指定各种安装前配置选项,如键盘类型等

                 必备命令

                 可选命令

         程序包端:

            指明要安装程序包,以及包组,也包括不安装的程序包

                %package

                @group_name

                package

                -package

                %end

        脚本段:

              %pre:安装前脚本

                   运行环境:运行安装介质上的微型Linux系统环境

              %post:安装后脚本

                  运行环境:安装完成的系统


        命令段中的必备命令:

               authconfig:认证方式配置

                     authconfig --enableshadow --passalgo=sha512

               BootLoader:定义BootLoader的安装位置以及相关配置

                     bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"

               keyboard:设置键盘类型

                     keyboard us

               lang:语言类型

                     lang zh_CN.UTF-8

               part:分区布局(默认为#注释)

                     part /boot --fstype=ext4 --size=2000

                     part swap --size=2048

                     part / --fstype=ext4 --grow --size=200

              rootpw:管理员密码

                     rootpw  --iscrypted $6$oEcMb4he0tpIbfRy$EZ0YlMAOnQ9tpAv5jzVpAQTrFSGqLgabWgO/YNwyPzeQnTvmYExgr1yb8ELV3.0TS/6FyF1mdGJxTaZOj0wT60

              timezone:时区

                     timezone --utc Asia/Shanghai


            补充:分区相关的其他命令

                  clearpart:清除分区

                       clearpart --none --drives=sda:清除磁盘分区

                  volgroup:创建卷组

                       volgroup myvg --pesize=4096 pv.008002

                  logvol:创建逻辑卷

                       logvol /home --fstype=ext4 --name=lv_home --vgname=myvg --size=5120


            生成加密密码的方式:

                  ~]#openssl passwd -1 -salt `openssl rand -hex4`


        可选命令:

               install or upgrade:安装或升级

               text:安装界面类型,text为tui,默认为GUI

               network:配置网络接口

                   network --onboot yes --device eth0 --bootproto dhcp --noipv6

               firewall:防火墙

                   firewall --service=ssh

               selinux:SELinux

                   selinux --enforcing

               halt、poweroff或reboot:安装完成之后的行为

               repo:指明安装时使用的repository

                   repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100

               url:指明安装时使用的repository,但格式为URL格式

                   url --url=https://mirrors.aliyun.com/centos/7/os/x86_64/


 参考官方文档:《installation guide》


  光盘镜像制作命令:

       创建光盘镜像:

           ~]#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