第七周作业

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

inux系统启动流程大致是这样的:

BIOS(Boot Sequence) –> MBR(GRUB) –> Kernel(ramdisk) –> rootfs –> /sbin/init(/etc/inittab)

BIOS

主板在接通电源后,BIOS会第一个获得系统的控制权。BIOS首先会对系统硬件进行检测(POST, Power On Self Test, 上电自检),自检测过程大致为:加电-CPU-ROM-BIOS-System Clock-DMA-64KB RAM-IRQ-显卡等。如果关键部件有问题,计算机会发出报警声。

自检一切正常后BIOS会调用一些设备自身ROM中的初始化代码,对这些设备进行初始化,比如显卡。这时可以看到一些初始化信息,介绍生产厂商、芯片类型等内容。

最后,BIOS会根据COMS中设置的启动顺序(Boot Sequence),依次尝试启动。当启动设备是硬盘时,BIOS会把系统控制权交给硬盘MBR中的bootloader。

MBR

MBR是Master Boot Record的简写, 即主引导记录。MBR记录一般在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoader(引导程序),后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。

大多数Linux系统使用GRUB作为BootLoader。GRUB可以引导多种操作系统,它可以识别磁盘文件系统的格式,所以只需要内核文件名和内核所在分区就可以加载内核,通过/boot/grub/grub.conf文体来配置这些信息。

GRUB分为3个阶段:

bootloader:1阶段
     Stage1 的代码保存在MBR中前446字节。

partition:filesystem driver 1.5阶段
     Stage1_5的代码允许GRUB识别多种类型的文件系统,识别每个文件系统的代码的代码保存在/boot/grub/*stage1_5 的文件中。

partition:/boot/grub,2阶段
    Stage 2 代码读取/boot/grub/grub.conf文件,决定如何加载内核

Kernel

GRUB的最后阶段stage2会根据/boot/grub/grub.conf文件中的配置加载kernel到内存中,并将系统控制权交给kernel。

initrd是”initial RAM disk”的缩写,随kernel一起被GRUB加载进内存,在系统引导过程中挂载的一个临时根文件系统。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块。

rootfs

真正的根文件系统,作为接手initrd的。

/sbin/init

/sbin/init进程是Linux启动的第一个进程,PID=1。是所有传统的 centos 5 中sysvinit 已经淡出历史舞台,新系统普遍采用 UpStart 和 systemd 。

运行级别

运行级别:为了系统的运行或维护等目的而设定的机制;
                 0-6 :7个级别;
                     0:关机 shutdown
                     1:单用户模式,root用户,无须认证,维护模式;
                     2:多用户模式,会启动网络功能,但不会启动NFS,维护模式;
                     3:多用户模式,完全功能模式,文本界面,
                     4:预留级别,
                     5:多用户级别,完全功能模式,图形界面
                     6:重启,reboot

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

grub的版本:

grub的版本分为:

grub 0.X (grub legacy)

grub 1.X (grub 2)

目前centos 5和centos 6使用的就是 grub legacy 版本 centos 7使用的是 grub2 版本的启动引导程序

grub的三个阶段

bootloader:Stage1
     Stage1 的代码保存在MBR中前446字节。

partition:filesystem driver  : Stage1_5
     Stage1_5的代码允许GRUB识别多种类型的文件系统,识别每个文件系统的代码的代码保存在/boot/grub/*stage1_5 的文件中。

partition:/boot/grub,Stage 2
    Stage 2 代码读取/boot/grub/grub.conf文件,决定如何加载内核

相关配置文件:

与grub相关的配置文件包括:/etc/grub.conf和/boot/grub/grub.conf

/etc/grub.conf是指向/boot/grub/grub.conf的软连接,grub程序在引导启动时会读取这个配置文件,并按照这个文件的配置参数引导启动系统

Centos 6 内容如下:

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=9e52c88a-8b61-444c-a78a-ac642700cf99 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-431.el6.x86_64.img

default=0 :表示默认选择第一个选项进行配置 timeout: 表示选择菜单的时间,如果过了这个时间没有选择则表示使用默认选项 splashimage: 指定引导菜单中的背景图片的路径 titile: 指定选项的名称 root: 表示kernel和initrd文件所在的分区路径,而不是”根分区”;格式为:

 root(hd#,#)  第一个 # 表示第几块硬盘,第二个 # 表示同一个硬盘上的分区,都是从0开始

kernel: 通常是用于指定要运行的内核文件路径,另外也可在其后设置相关的内核参数,如:ro表示只读,root表示指定根分区所在路径;

initrd: 为内核运行指定其可用的ramdisk文件,其版本须和内核版本一致;

passwd –md5 STRING :设置启动密码

GRUB的功能

1、提供引导菜单;

2、加载用户选择的内核或操作系统,并允许传递相应的内核参数给内核

3、提供命令行接口

命令行接口

在菜单页面按c即可进入命令行接口,在此命令行接口,我们可以配置相关的grub设置。

grub常用的命令有:

 root(DEVICE):指定系统或内核文件所在的分区路径
 kernel :指定要运行的内核文件路径
 initrd :指定要运行的ramdisk文件
 find  /path/to/file:查找指定文件
 help :帮助

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

首先kickstart文件制作需要借助一款图形化程序:system-config-kickstart

[root@dns ~]# yum -y install system-config-kickstart

启动图形化界面:

[root@dns ~]#init 5

在打开的图形界面中通过file菜单选项选择安装过程中生成的/root目录下的anaconda-ks.cfg作为默认配置,在此基础上进行修改,以免去很多需要自己添加的过程;

1

主要内容有:

  基本配置
        安装过程中的默认语言
        键盘类型
        时区
        root用户密码
  安装方法
        安装或升级
        配置安装源(CD-ROM、FTP、HTTP、NFS、Hard Drive)
  引导装载程序选项
        是否需要安装boot loader
        给内核传递的参数(auto rhgb quite)
  分区信息
        是否清楚MBR
        是否清除现有分区
        是否需要初始化磁盘标签
        设定分区布局
  网络配置
        配置网络接口
        IP地址
        子网掩码
        网关
        DNS
  验证
        用户登录的认证方式
  防火墙配置
        是否启用
        安全级别
  显示配置
        是否启用图形界面
  软件包选项
        需要安装哪些软件包
  安装前脚本
  安装后脚本

光盘镜像制作

1、将制作好的kickstart文件改名;

2、将光盘挂载上:

  [root@dns ~]# mkdir /media/cdrom
  [root@dns ~]# mount /dev/cdrom /media/cdrom

3、新建myboot文件夹,将kickstart文件和isolinux文件一起放入;

  [root@dns ~]# mkdir myboot
  [root@dns ~]# cp -r /media/cdrom/isolinux/ myboot/
  [root@dns ~]# cp ks.cfg ./myboot/isolinux/
  [root@dns ~]# rm -f ./myboot/isolinux/isolinux.cfg 
  [root@dns ~]# cd ./myboot/isolinux/
  [root@dns isolinux]# chmod +w *

4、最后执行光盘镜像制作命令:

 [root@dns ~]# 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/
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.9 (Linux)
Scanning myboot/
Scanning myboot/isolinux
Excluded by match: myboot/isolinux/boot.cat
Excluded: myboot/isolinux/TRANS.TBL
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor              Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 18
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 19
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 20
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 21
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 25
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 29
Done with: Directory tree                          Block(s)    2
Writing:   Joliet directory tree                   Start Block 31
Done with: Joliet directory tree                   Block(s)    2
Writing:   Directory tree cleanup                  Start Block 33
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 33
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 34
 26.71% done, estimate finish Mon May 14 16:30:03 2018
 53.32% done, estimate finish Mon May 14 16:30:03 2018
 80.01% done, estimate finish Mon May 14 16:30:03 2018
Total translation table size: 4477
Total rockridge attributes bytes: 1354
Total directory bytes: 2534
Path table size(bytes): 26
Done with: The File(s)                             Block(s)    18576
Writing:   Ending Padblock                         Start Block 18610
Done with: Ending Padblock                         Block(s)    150
Max brk space used 0
18760 extents written (36 MB)

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/102003

(0)
nininini
上一篇 2018-06-29 21:09
下一篇 2018-06-29

相关推荐