第10周作业(上)

第10周作业

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)。
CentOS系统启动详细的过程如下(以CentOS7为例):

  • 加电自检(POST)
    按下电源开关,BIOS系统随即开始加电自检,检查CPU、内存、主板及各接口、硬盘、键盘、光驱等,检测它们的好坏。

  • 读取启动顺序
    检查完成后,BIOS会根据预先设定好的启动顺序去挨个寻找可引导设备,它找到的第一个有引导程序的设备成为本次启动的引导设备。

  • 主引导记录(MBR)
    BIOS程序会自动去读取可引导设备中具有引导作用的代码部分,即通常所说的主引导记录(MBR),共512字节大小,由446字节的bootloader,64字节的分区表,2字节的结束标志组成。

    • GRUB
      现主流的GRUB版本为grub 1.x,即grub2。它的代码不能完全装于MBR扇区中,所以将它分为两段,一起来完成系统的引导工作。工作过程分以以下几个阶段:

    • stage1
      这一阶段的代码位于MBR中,BIOS读取MBR中的boogloader代码,这段代码不包含文件系统的驱动,但它可以识别到stage2位于哪个分区中,但因为不包含文件系统的驱动所以stage1无法直接访问stage2所在的分区,因此就有了stage1_5,以构建stage1和stage2通信的桥梁。

    • stage1_5
      这个阶段的代码位于MBR后的63个扇区之中,它的作用是提供各种文件系统的驱动文件,以便stage1中的程度可以和stage2所在的分区通信进而找到stage2所存储的内核文件和rootfs的文件系统驱动。

    • stage2
      因为此时GRUB已可识别stage2所在的文件系统,所以这个阶段它会找到grub的配置文件(/boot/grub2/grub.cfg),并根据其中的设定给用户提供一个可选择的菜单,用于选择想要启动的系统或内核版本。同时stage2即/boot/目录下还提供了Linux系统内核文件(vmlinuz文件)和虚拟文件系统文件(initramfs)等其它核心文件。
      待用户选择了相应的系统或等待超时后,系统启动进入下一个阶段。

    • Bootloader
      提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM(内存)中的特定空间中,解压,展开,而后把系统控制权移交给内核。现在Linux中流行的bootloader程序是grub,它的工作过程是这样的:

  • 系统内核加载
    在用户选择了要启动的系统后,这时bootloader程序会将/boot下的内核文件、虚拟文件系统文件加载至内存中解压并运行,至此bootloader的工作已圆满完成。接下来的工作将由Linux内核来完成。
    内核首先探测所有可识别的硬件设备,然后加载驱动,有的设备驱动可能需要借助虚拟根文件系统来装载。
    由于现在很多硬件驱动都是以模块的形式存在的,如usb,raid,lvm,scsi,sata。此时的内核还不具备驱动这些设备的能力。(正如我们经常看到各Linux发行版它们的/boot分区文件系统不会是lvm或raid,大多为单独的一个分区)这时就需要用到initramfs这个虚拟的根文件系统,这样就可以借助这个虚拟的根文件系统来加载各模块驱动,进而可以挂载各设备,包括磁盘上真实的根文件系统。此阶段使用的是只读挂载。

  • 启动systemd
    在系统核心将硬件识别及驱动加载完成后主机硬件已经准备就绪。此时内核会主动启动系统第一个程序:systemd。systemd的主要功能是完成以下任务:

    • 挂载/etc/fstab里所有的文件系统(local-fs.target+swap.target)

    • 侦测硬件,加载所需要的核心模块(sysinit.target)

    • 加载主要的外围硬件设备驱动程序和防火墙相关任务(basic.target)

    • 加载multi-user.target相关的服务,如tty登录界面等

    • 加载图形界面相关的服务

当登录终端tty或者图形界面加载完成以后,至此,整个系统的启动工作即已完成。

2、为运行于虚拟机上的CentOS 6添加一块新硬盘,提供两个主分区。
(1) 为硬盘新建两个主分区;并为其安装grub。
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs。
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件。
(4) 为grub提供配置文件。
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机。

这题纠结了很久,浪费了大量的时间,做了几十遍,但总是会碰到提示according mtab /dev/sda2 已经挂载的错误提示,导致系统不能正常启动,找了很多同学做的作业,以及搜索错误提示信息,但都没个准确的说法和解决办法。但唯一做成的一次其步骤如下,和马哥视频中的也只是个别步骤的顺序不同。(总结一点:当理论还不足以撑起随便折腾的欲望时,请使用前人的方法,完全照抄然后加以熟练。)

新增硬盘为系统中识别为sdb,相关步骤如下:

fdisk /dev/sdb #然后创建两个主分区(sdb1,sdb2,sdb3),并且创建一个swap分区,因为宿主机有swap分区,强烈建议和宿主环境保持一致
mke2fs -t ext4 /dev/sdb1   #给新分区创建ext4文件系统
mke2fs -t   ext4 /dev/sdb3 #给新分区创建ext4文件系统
mkswap /dev/sdb2 #启用swap分区
mkdir /mnt/boot     #给新分区创建挂载点
mkdir /mnt/sysroot  #给新分区创建挂载点
mount /dev/sdb1 /mnt/boot  #将新分区挂载至/mnt/boot,作用类似于/boot分区
mount /dev/sdb2 /mnt/sysroot # 将新分区挂载至/mnt/sysroot,用于后面构建新系统的rootfs
grub-install --root-directory=/mnt /dev/sdb  #root-directory指定根所在的位置,不要指定/mnt/boot,gurb会自动去找指定路径下的boot目录的,/dev/sdb 用于指定想将grub安装到哪个设备上。
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/  #为新硬盘第一分区提供内核文件
 cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot/  #为新硬盘第一分区提供ramdisk文件
 mkdir -pv /mnt/sysroot/{bin,sbin,lib,lib64,etc,home,root,media,mnt,dev,tmp} #为第二分区提供rootfs
 cp /bin/{bash,ls,cat} /mnt/sysroot/bin  #将/bin目录下的bash,ls,cat程序复制到/mnt/sysroot/bin目录中
cp `ldd /bin/{bash,ls,cat} | grep -o "/lib64/.*[[:space:]]" | sort -u` /mnt/sysroot/lib64   #将bash,ls,cat所依赖的库文件一同复制到新rootfs中的lib64目录中
cp /boot/grub/splash.xpm.gz /mnt/boot/grub/  #提供开机画面背景图片(此处使用原系统中的图片)
cp /etc/grub.conf /mnt/boot/grub/  #给新的grub提供配置文件
vim /mnt/boot/grub/grub.conf   #编辑新硬盘中的grub配置文件 ,修改kernel处的root=/dev/sda2,硬盘编号为BIOS识别的顺序,第一个识别到的编号为a,这里这块硬盘在此系统中实际为sdb,但把它拿到一台没有硬盘的机器上去,它就成了sda。数字2表示为硬盘上的第2个分区,然后保存退出,关机,将硬盘卸载,然后以此硬盘新建虚拟机,以验证配置结果。以下为grub.conf文件需要发动的配置的说明:
title CentOS 6 (2.6.32-642.el6.x86_64) Test_OS   #在此处添加了"Test_OS"
        root (hd0,0)   #只有一块硬盘的情况下,其编号即为0,这里的root实际是指grub的根,是指grub stage2和kernel文件所在的分区,我们将grub stage2和kernel文件放置在了新增硬盘的第一分区,在grub中编号从0开始。
        kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda3 selinux=0 init
=/bin/bash  #此处指定文件系统的根所在的位置,在Linux系统中分区编号是从开始的,我们把根文件系统建立在这块硬盘上的第3个分区上了,并同时关闭了selinux,将指定init程序为/bin/bash
        initrd /initramfs-2.6.32-642.el6.x86_64.img  #此处指定虚拟文件系统文件的位置。
最后新建虚拟机并指定使用这块新增的虚拟磁盘,然后启动虚拟机,即可进入系统,并以bash程序初始化系统,只有ls和cat指令以及bash内置指令可以使用

3、制作一个kickstart文件以及一个引导镜像。描述其过程。
可以使用系统安装过程中生成的文件(/root/anaconda-ks.cfg)加以修改或者使用图形化的kickstart工具来完成kickstart文件的制作。图形化kickstart工具需要先安装system-config-kickstart软件包。以下是使用图形化工具生成的一份文件,全部选项配置完成以后,将文件保存为ks.cfg了,详细内容如下:

[root@localhost ~]# more ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled  #关闭防火墙
# Install OS instead of upgrade
install   #指定安装类型为全新安装
# Use CDROM installation media
cdrom  #安装方式配置为从光驱安装
# Root password
rootpw --iscrypted $1$2xS8GSnM$IHzs2YYbCRGvcJmNxQ51W0  #加密后的root账号密码,配置时输入明文密码,并启用加密选项
# System authorization information
auth  --useshadow  --passalgo=sha512  #指定root密码加密方式
# Use graphical install
graphical  #使用图形化方式进行安装
firstboot --disable   #第一次启动的时候禁用代理
# System keyboard
keyboard us  #设定键盘为美式键盘
# System language
lang en_US #设定系统语言为美式英语
# SELinux configuration
selinux --disabled #关闭selinux
# Installation logging level
logging --level=info  #设定anaconda日志级别
# Reboot after installation
reboot  #设定安装完成后系统自动重启
# System timezone
timezone  Asia/Shanghai  #设定系统时区为上海
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on  #设定网卡开机自启,并使用dhcp获取ip
# System bootloader configuration
bootloader --location=mbr  #设定bootloader的安装位置,安装到mbr中
# Partition clearing information
clearpart --all  #设定清理磁盘上所有分区信息
# Disk partitioning information
part / --fstype="ext4" --size=20000    #按需要自定义分区
part /boot --fstype="ext4" --size=500
part swap --fstype="swap" --size=2000

%packages      #选择要安装的软件包
@chinese-support
@desktop-platform-devel
@development
@eclipse
@emacs
@hardware-monitoring
@internet-browser
@kde-desktop
@network-tools
@perl-runtime
@ruby-runtime
@x11

%end

bash    56

制作引导镜像:
先将光盘镜像文件挂载至光驱,然后将除Packages和repodata之外的目录全部copy至某目录下,如/tmp/myiso;
然后使用如下指令生成名为boot.iso的引导镜像,放置于/boot目录下。

mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.catlog -o /root/boot.iso /tmp/myiso/

原创文章,作者:N24_lantian,如若转载,请注明出处:http://www.178linux.com/65727

(0)
N24_lantianN24_lantian
上一篇 2017-01-03
下一篇 2017-01-03

相关推荐

  • ansible的入门使用手册

    ansible1

    2018-01-15
  • Linux的主要发行版及区别

    Linux的主要发行版介绍 主流的发行版 Linux至上世纪90年代基于Unix而诞生,至今其发行版有几百种之多,但其主流的发行版有三个系列。 Debian系 Ubuntu属于Debinan系。 Redhat系CentOS属于Redhat系。Slackware系SUSE Linux即属于Slackware系。 主要区别 软件包管…

    Linux干货 2016-10-29
  • vim编辑器和bash算术入门

    vim末行模式:       内建的命令行接口      (1)地址界定          :start_pos[,end_pos]          #: 特定的第#行,例如5即第5行; &nbsp…

    Linux干货 2016-12-23
  • zabbix快速创建筛选(sql操作)

        公司由于大量业务调整,尤其是服务器功能和性能的转变,监控也跟随这变化,其中操作最为繁琐的当数zabbix筛选(相信各位从页面添加的都深感痛苦)于是有了本文。     本文采用的方法是sql操作(由于本人不会php等,无法写程序直接调用官方api,所以,嘿嘿,不解释,同时也希望各路大…

    Linux干货 2015-12-17
  • 马哥教育网络班20期第1周课程练习

    答: 1、 ①控制器:是计算机的中枢神经,协调计算机各部分工作及内存与外设的访问等 ②运算器:运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 ③储存器:存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。 ④IO:输入设备是将数据或控制命令等信息输入到计算机。输出设备把机算机的各种数据符号及文字或各种控制信号等…

    Linux干货 2016-06-23
  • 集群-基础知识(1)

    背景 随着互联网访问量的急剧增加,单台服务器的能力已严重不能满足需求。则需要从两个方面考虑提高服务能力:1、向上扩展,2、向外扩展 向上扩展的缺点: 1、造价高 2、随着性能的提高,会在某个临界点遇到瓶颈,导致性能随后降低。 向外扩展的优点: 1、造价低 2、提供高并发能力和高可用性 3、可扩展性好。 分类 负载均衡集群(Load Balance) 高可用集…

    Linux干货 2015-11-26

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-23 07:55

    对于开机启动流程其实是一个非常重要的知识,尤其是在面试过程中经常会被问到,所以这部分希望能通过自己的理解图解出来。