1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

第一步:加电自检

        这个步骤中,CPU在通电后会自动到指定位置找一段代码执行加电自检动作。

第二步:启动BIOS

        加载Bootloader程序,这个阶段可以分为三步:1、运行GRUB第一阶段,这个阶段的作用是运行一个程序加载GRUB的程序代码。2、由于GURB的程序代码在磁盘上,第1.5阶段就是挂载GRUB所在分区读取GRUB程序代码 第二阶段就是运行GRUB程序并启动内核程序。

第三步:内核加载

        第一步探测可识别的所有硬件设备

        第二步加载硬件设备驱动程序(有可能需要借助ramdisk)

        第三步以只读的方式挂在根文件系统(防止内核将根文件系统破坏,当系统运行正常后再以读写方式挂载)

        第四步运行用户空间的第一个应用程序/sbin/init

第四步:设置默认运行级别

第五步:运行系统初始化操作

        1、设置主机名

        2、设置欢迎信息

        3、激活udev和selinux

        4、挂载/etc/sysctl.conf文件的设置,来设定内核参数

        5、检测根文件系统,并以读写方式重新挂载根文件系统

        6、设置系统时钟

        7、根据/etc/sysctl.conf文件的设置,来设定内核参数

        8、激活LVM及RAID设备

        9、加载额外设备的驱动程序

        10、清理操作

第六步:关闭、启动对应级别下要停止的服务

第七步:设置登录终端

第八步:启动图形界面(可选)

2、通过现有系统,添加第二块硬盘,在该硬盘上安装grub及相关程序,可以让第二块硬盘成为其他设备的启动盘(CentOS6)

第一步向现有系统添加硬盘

图片.png

第二步 将新添加的硬盘进行分区处理

一共分为三个分区:一个用于boot分区,一个用于swap分区,一个用于root根分区

图片.png

第三步 将分区格式化

在安装grub的过程中,grub程序必须匹配boot目录,所以/dev/sdb1的挂载点必须是以/boot结尾的路径,现在演示的路径为/tmp/boot

将用于根分区的分区挂载到/tmp/sysroot目录上

第四步 在设备上安装grub

图片.png

现在简单讲下grub-install的命令

图片.png

--root-directory的参数主要是为了指明boot目录的父目录,grub-install会在指定的父目录里找到boot目录并安装grub程序。

最后的/dev/sdb是指定grub安装的磁盘设备。

现在来看看安装了grub之后的/tmp/boot目录

图片.png

图片.png

第五步 现在grub程序有了,需要将内核文件复制到/tmp/boot目录下

图片.png

第六步 创建或者修改/tmp/boot/grub/grub.config的配置文件

一般使用现有系统的配置文件进行改动

图片.png

改的结果是这样的。

必须要写selinux=0 和 init=/bin/bash(如果没有启动程序,需要直接运行bash的情况下)

第七步 配置根文件系统创建必须要的目录,目录里可以没有文件,但是需要有目录

图片.png

第八步  将想要运行的程序的二进制文件和库文件都拷入到相应的目录中,通过ldd命令查看命令执行需要的库文件

图片.png

第九步  通过切换根进行简单的应用测试

图片.png

第十步 将新增的硬盘用于其他设备的启动盘

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

KickstartAnaconda程序的配置文件,里面记录了Anaconda的执行过程的参数。Kickstart文件的生成有三种方式:1、在手动安装完系统后在root的家目录下就会有一个anaconda-ks.cfg的文件 2、通过system-config-kickstart命令生成 3、通过现有的kickstart文件来改

 

System-config-kickstart程序需要先安装才能使用

图片.png

上面这个就是kickstart-config-start程序的界面。

 

制作一个引导镜像文件需要包含几个重要的文件。

图片.png

需要将光盘镜像中的isolinux目录封装到引导镜像中。

 

通过下面的命令去封装镜像文件

mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS6-test" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /boot-test1.iso /boot-test/

最后一个参数/boot-test/是isolinux/xxx文件的父目录。