操作系统启动流程&&kickstart光盘镜像的制作

(一).简述linux操作系统启动流程

第一步: 计算机加电,加载BIOS进行开机自检

打开计算机电源,计算机会通过主板上的供电芯片加载预先设置好的BIOS,从BIOS中读取对应的CPU、内存、硬盘等等相关信息,以及包括提前设置好的开机启动顺序.

第二步: 读取MBR信息

若计算机通过BIOS得知启动项磁盘为先,随即会去读取硬盘上(0磁道,0柱面,1扇区)MBR信息,MBR文件大小为512字节,其中前446字节为主引导记录,后64字节为分区表信息,最后2个字节为对应的校验.通过主引导记录,系统会将活动分区引导记录导入到内存中.而这一过程就是加载引导程序,对于Linux而言即为加载Grub信息.

第三步: 加载Grub菜单(Boot Loader)

Grub是在加载操作系统之前运行的一小段程序,目的是初始化硬件设备、建立内存空间的映射、系统软硬件调优为进一步的加载内核做准备.
Grub第一部分引导加载程序,即 1st stage.
Grub第二部对应的文件系统驱动,即 1_5 stage.
Grub第三部分对应的/boot/grub,即 2nd stage.

第四步: 加载kernel内核以及驱动程序

根据Grub设定的内核映像所在路径,系统读取内存映像来解压缩内核,同时还会加载内核所需的驱动程序文件,从而对内核进行挂载以及驱动根文件系统.

第五步: 启动init进程,调取运行级别文件

内核加载完毕后,系统会第一个运行/sbin/init程序,进程号永远为1.
通过init程序来读取系统上事先配置好的运行级别文件/etc/inittab 或( /etc/init/*.conf 或 /usr/lib/systemd/system)来调取默认的运行级别,为后续执行做好准备

第六步: init进程执行rc.sysinit初始化系统

init进程会初始化系统,同时设置多项内容,包括主机名、欢迎信息、防火墙及selinux等

第七步: init进程执行对应运行级别下的脚本

根据系统设定运行级别的不同,系统会运行0-6中相对应的脚本程序,从而实现启动相应的服务

运行级别 对应说明
0 关机,shutdown
1 单用户模式,root用户,无须认证,一般是维护模式
2 不带NFS网络服务的多用户多任务模式,一般也是维护模式
3 多用户多任务的完全功能模式,文本行界面
4 预留模式
5 多用户多任务的完全功能模式,图形界面
6 重启,reboot

第八步: 关闭和启动服务

第九步: 启动终端,进入登录前的状态

系统读取/etc/init/tty.conf,根据对应运行级别,启动mingetty


(二).简述grub启动引导程序配置及命令行接口详解

Grub启动引导程序主要针对/boot/grub/grub.conf来配置

示例:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=9784d4b2-b45b-4b2b-9977-b3376a78ee27 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-504.el6.x86_64.img
参数选项 解释说明
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_FILE [PARAMETERS] 启动的内核
initrd /PATH/TO/INITRAMFS_FILE 内核匹配的ramfs文件
password [--md5] STRING 启动选定的内核或操作系统时进行认证
- (hd#,#)
    - hd#: 磁盘编号,用数字表示;从0开始编号
    - #:分区编号,用数字表示;从0开始编号
    - (hd0,0)
- grub的命令行接口:
    - help: 获取帮助列表
    - help KEYWORDS: 详细帮助信息
    - find (hd#,#)/PATH/TO/SOMEFILE:
    - 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

(三).实现kickstart文件制作与光盘镜像制作

(1) 什么是kickstart?

kickstart是一个利用Anconda工具实现服务器自动化安装的方法;通过生成的kickstart配置文件ks.cfg,服务器安装可以实现从裸机到全功能服务的的非交互式(无人值守式)安装配置。ks.cfg是一个简单的文本文件,文件包含Anconda在安装系统及安装后配置服务时所需要获取的一些必要配置信息(如键盘设置,语言设置,分区设置等);Anconda直接从该文件中读取必要的配置,只要该文件信息配置正确无误且满足所有系统需求,就不再需要同用户进行交互获取信息,从而实现安装的自动化。

(2) 使用kickstart的安装方法

i. 直接手动编辑,可以依据某个模板来进行修改

ii. 使用kickstart文件创建工具:system-config-kickstart进行配置,同样可以导入某个模板进行修改

(3) 使用kickstart工具进行文件新制作

  • 安装system-config-kickstart工具
[root@CentOS7 ~]#system-config-kickstart
bash: system-config-kickstart: command not found...
[root@CentOS7 ~]#yum install system-config-kickstart -y
  • 在命令行调用kickstart工具


    1.png
  • 基本配置信息


    2.png
  • 安装方法


    3.png
  • 引导程序安装


    4.png
  • 分区信息配置


    5.png
  • 网络信息配置


    10.png
  • 密码设置


    7.png
  • 防火墙设置


    8.png
  • 图形界面配置信息


    9.png
  • 包组配置


    11.png
  • 安装前后脚本配置


    13.png

(4) 保存文件且校验

[root@CentOS7 ~]#ls
anaconda-ks.cfg  Desktop  Documents  Downloads  initial-setup-ks.cfg  Music  mynew-ks.cfg  Pictures  Public  Templates  Videos
[root@CentOS7 ~]#ksvalidator mynew-ks.cfg 
[root@CentOS7 ~]#

(5) 制作光盘引导文件

  • 需要明确制作光盘引导文件所需要的组成部分: bootloader、kernel、initrd以及kickstart文件.
  • 其中,我们可以通过原iso镜像里自带的isolinux直接来拷贝一份带有BootLoader、kernel以及initrd的文件.
  • 所以我们只需要找到isolinux和kickstart进行iso镜像制作即可.

  • 第一步: 挂载原光盘镜像到/mnt/cdrom
[root@CentOS7 ~]#mkdir /mnt/cdrom
[root@CentOS7 ~]#mount -r /dev/cdrom /mnt/cdrom/
[root@CentOS7 ~]#df 
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  52403200 3818144  48585056   8% /
devtmpfs                   481816       0    481816   0% /dev
tmpfs                      498988       0    498988   0% /dev/shm
tmpfs                      498988    8224    490764   2% /run
tmpfs                      498988       0    498988   0% /sys/fs/cgroup
/dev/sda1                  508580  153328    355252  31% /boot
tmpfs                       99800       0     99800   0% /run/user/0
/dev/sr0                  9176232 9176232         0 100% /mnt/cdrom
  • 第二步: 拷贝光盘中isolinux目录到新iso镜像目录
[root@CentOS7 ~]#mkdir newiso
[root@CentOS7 newiso]#cp /root/mynew-ks.cfg .
[root@CentOS7 newiso]#cp -r /mnt/cdrom/isolinux/ .
[root@CentOS7 newiso]#ls
isolinux  mynew-ks.cfg
  • 第三步: 对拷贝的新isolinux目录文件添加权限
[root@CentOS7 isolinux]#chmod +w *
[root@CentOS7 isolinux]#ls -l
total 58124
-rw-r--r-- 1 root root     2048 Sep 28 16:00 boot.cat
-rw-r--r-- 1 root root       84 Sep 28 16:00 boot.msg
-rw-r--r-- 1 root root      281 Sep 28 16:00 grub.conf
-rw-r--r-- 1 root root 52893200 Sep 28 16:00 initrd.img
-rw-r--r-- 1 root root    24576 Sep 28 16:00 isolinux.bin
-rw-r--r-- 1 root root     3032 Sep 28 16:00 isolinux.cfg
-rw-r--r-- 1 root root   190896 Sep 28 16:00 memtest
-rw-r--r-- 1 root root      186 Sep 28 16:00 splash.png
-rw-r--r-- 1 root root     2215 Sep 28 16:00 TRANS.TBL
-rw-r--r-- 1 root root   152976 Sep 28 16:00 vesamenu.c32
-rwxr-xr-x 1 root root  6224704 Sep 28 16:00 vmlinuz
  • 第四步: 向默认启动的lable定义的内核添加ks文件参数


    112.png
  • 第五步: 跳出文件路径外,对文件进行iso镜像制作

[root@CentOS7 newiso]#mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 7 NEW-TEST boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/NEW-TEST.iso /root/newiso/
[root@CentOS7 ~]#ls
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  mynew-ks.cfg  NEW-TEST.iso  Public     Videos
Desktop          Downloads  Music                 newiso        Pictures      Templates
  • 第六步: 通过xshell传导到windows桌面


    19.png
  • 第七步: 新建虚拟机进行测试


    113.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容