Linux学习博客7

2018-01-21  本文已影响0人  sky_c146

简述linux操作系统启动流程

以CentOS 5、6为例
系统启动流程大体可以表示为POST加电自检-->BIOS根据其中的启动顺序-->MBR设备的bootloader(GRUB)-->启动Kernel(中间可能需要借助ramdisk加载根文件系统并进行rootfs转换)-->Init-->Runlevel关闭和启动对应的服务进程。
上述过程从Init开始就是用户空间的启动操作了,CentOS 5、6、7的Init启动机制有所不同,所以Init的启动过程会有所区别:
CentOS 5:systemV
CentOS 6:Upstart
CentOS 7:systemd
下面的过程以systemV的Init机制为基础:

CentOS_boot.png
  1. BIOS
    BIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

  2. MBR
    MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes(魔术字)用于MBR的有效性检查。

  3. GRUB
    Grand Unified Bootloader,多系统启动程序,其执行过程可分为三个步骤:

  1. Kernel
    内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。
  1. Init
    该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,这个脚本的任务有:
  1. Runlevel
    运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种
  0:关机模式

  1:单一用户模式(直接以管理员身份进入)

  2:多用户模式(无网络)

  3:多用户模式(命令行)

  4:保留

  5:多用户模式(图形界面)

  6:重启

在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/

这些目录下的脚本只有K*和S*开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

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

grub启动引导程序配置

grub的配置文件/boot/grub/grub.conf,该配置文件的信息如下:

    grub.conf: 

    #boot=/dev/sda

    default=0        #设定默认启动的title的编号,从0开始

    timeout=5       #等待用户选择的超时时间

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片

    hiddenmenu     #隐藏菜单

    title CentOS (2.6.18-194.el5PAE)      #内核标题

        root (hd0,0)         #内核所在的设备hd表示硬盘,第一个0是硬盘号,第二个0是分区号

        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数

        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径

grub 命令行用法

  1. 进入GRUB的命令行模式
    开机后grub引导菜单
    grub1.png
grub>
  1. 获取GRUB命令行帮助
    在grub>提示符的后面输入help
grub> help


如果需要得到某个指令的帮助,就在 help 后加空格跟指令,比如:
grub>help kernel
  1. cat查看文件内容
    有时我们不知道Linux的/boot分区,以及/ 根分区所在的位置,要查看/etc/fstab的内容来得知,这时,我们就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容,注意要灵活使用tab键命令补齐的功能
grub> cat (hd0,  #输入hd0,然后再按tab键会跳出hd0有的分区
grub> cat (hd0,2)/etc/fstab  #显示所在分区的/etc/fstab文件信息
  1. root (hd[0-n,y) 指令来指定/boot所在的分区
比如我们确认/boot在(hd0,0)
grub> root (hd0,0)
  1. kernel 指令,用来指定Linux的内核,及/所在的分区
grub> kernel /boot/vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=根所在的路径

grub> kernel /vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=根所在的路径
例如
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=[fstab文件中查询到的root所在的挂载UUID]
  1. initrd 命令行来指定initrd文件
grub> initrd /boot/initr  #在这里tab来补齐有可能是initrd,也可能是initramfs
grub> initrd /boot/initrmfs-2.6.32-696.el6.x86_64.img

如果/boot是独立的一个分区
grub> initrd /initr  #在这里tab来补齐
grub> initrd /initrmfs-2.6.32-696.el6.x86_64.img
  1. boot命令来引导系统
grub>boot
  1. grub的保护机制
    grub可以通过设置密码来保护配置文件不被轻易的修改,方法为:
  1. grub-install重建grub
重建grub到第一硬盘mbr
grub-install /dev/sda
  1. grub救援模式
    如果系统无法启动,利用CentOS安装光盘进入Rescue installed system救援模式
进入命令行后,使用命令
#chroot /mnt/sysimage #挂载原系统的根,此路径在进入救援模式后有提示
挂载根后即可进行各种命令行操作了,例如重装grub
#grub-install /dev/sda

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

关于kickstart

kickstart是一个定义了Linux安装过程的配置文件,比如系统语言、键盘选项、要在系统中使用的时区、如何对磁盘进行分区、应该安装哪些软件包等。有了这个文件可以解放双手,让Linux安装过程按照我们预先定义的要求进行自动化安装,同时部署大量主机时十分有用。一般centos系统安装后,会在root目录下生成一个名为anaconda-ks.cfg的kickstart配置文件
ks文件主要由三个部分组成:

  1. 命令段:用于配置系统
install  #出现install可代表下面为安装配置命令段
cdrom    #安装介质
lang zh_CN.UTF-8    #安装语言
keyboard us    #键盘类型
selinux --enforcing    #是否开启selinux
timezone --utc Asia/Shanghai    #时区、系统时钟是否使用UTC时间
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
  1. 软件包段:选择要安装的软件包组及软件包
@core    #安装
@base    #安装
lftp    #安装
-zsh    #这里说明不安装,但如果有其他安装的文件需要依赖其时,也会安装
  1. 脚本段:安装前后执行的脚本
%pre    #安装过程开始之前执行的脚本;所能够执行的操作较少,因为是anaconda加载的简洁版的shell环境
%post    #所有软件包安装完成之后执行的脚本;由于是此时系统已安装完成,所以是完整的shell环境

利用ks文件安装系统

在boot提示符指定本机的网络参数和kickstart配置文件,配置文件中又设定了安装源(一般自建http、ftp服务器和yum源),执行下面的命令后,系统会自动结合kickstart文件,实现快速安装系统

  1. 利用光盘引导后,在CentOS安装界面按ESC键进入boot提示符
    kickstart1.png

在boot提示符后键入安装命令

例如指定了网络配置、ks文件路径
boot:linux ip=192.168.1.106 netmask=255.255.255.0 gateway=192.168.1.1 dns=192.168.1.1 ks=http://10.1.1.100/centos6-x86_64.cfg
  1. 指定kickstart配置文件的路径
支持以下格式:
CD            ks=cdrom:/directory/ks.cfg
硬盘驱动器     ks=hd:device/directory/ks.cfg 
FTP服务器      ks=ftp://server.mydomain.com/directory/ks.cfg
HTTP服务器     ks=http://server.mydomain.com/directory/ks.cfg
HTTPS服务器    ks=https://server.mydomain.com/directory/ks.cfg
NFS服务器      ks=nfs:server.mydomain.com:/directory/ks.cfg
其它设备       ks=file:/device/directory/ks.cfg

kickstart文件制作

  1. 利用图形化工具system-config-kickstart制作ks文件
运行system-config-kickstart
~]# system-config-kickstart
ks1.jpg ks2.jpg ks3.jpg ks4.jpg ks5.jpg ks6.jpg ks7.jpg ks8.jpg ks9.jpg ks10.jpg
  1. 制作包含ks文件的光盘映像
将制作好的ks文件和安装光盘中的isolinux文件夹都复制到一个文件夹下例如/tmp/mykickstart下
]# ls
isolinux  ks.cfg
编辑/isolinux/isolinux.cfg文件
]# vim /isolinux/isonux.cfg
在文件中添加新的label并设置成默认选项,将原来的默认default行删除
label linux
  menu label ^Install CentOS based mykickstart
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
#此处指定了ks文件所在的路径
在ks.cfg和isolinux文件夹共同的父目录的父目录即/tmp下执行
]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 by mykickstart" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /tmp/centos6.9_by_ks.iso mykickstart
]# ls
mykickstart  centos6.9_by_ks.iso
光盘映像制作完成
上一篇下一篇

猜你喜欢

热点阅读