第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

相关推荐

  • free命令的介绍及参数的详细分析

           通过对free命令的深入学习,我觉得有必要整理一个文档,供自己和小伙伴们今后的复习使用。   free 命令的详细剖析      参数有:-b/k/m/g    分别以bytes/kilobytes/megabyte…

    2017-07-17
  • linux-第一周

    inux命令:(type)                  1,集成在bash中的命令,内部命令。依赖于shell类型。                  2,在文件系统路径下有…

    Linux干货 2017-05-20
  • shell脚本执行

    shell脚本执行 对于我们这些小白而讲,shell脚本无疑是最令人头疼的事了,我再这里讲一下shell脚本运行要注意的哪些。 shell脚本就好像c++,java代码一样,按照从上到下然后从左到右的顺序执行。就像我们日常读书一样。如果shell命令遇见了子进程(嵌套代码),程序就会跟着顺序进入子进程。当子进程完成后,回到父进程,并且把父进程所需要的参数提交…

    2017-06-05
  • Linux终端类型

    目录 1. 终端概述 2. 串行端口终端(/dev/ttySn) 3. 伪终端(/dev/pty/) 4. 控制终端(/dev/tty) 5. 控制台终端(/dev/ttyn, /dev/console) 6. 虚拟终端(/dev/pts/n) 7. 其它类型   终端概述 终端…

    Linux干货 2016-10-18
  • 高可用+LVS-NAT

    关键:floating VIP 要以组为单位同时切换 实验1: 主备VRRP 切换实验 预期: 设定配置文件: A主机 (172.18.48.61) vrrp_sync_group VG1 { group { outside_network inside_network } } vrrp_instance outside_network { state MA…

    2017-05-14
  • Linux下软链接与硬链接

    Linux下软链接与硬链接的区别 Linux中的文件都文件名和数据,在linux上面被分为两个部分:元数据与数据。用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方,而元数据是文件的附加属性,如大小,创建时间,所有者等信息。在Linux中,元数据中的inode号(inode是文件的元数据的一部分,但其不包含文件名,inode号即索…

    Linux干货 2016-10-20

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-23 07:55

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