天天看点

Linux运维基础(九):Linux的引导过程

Linux运维基础(九):Linux的引导过程

计算机从开启电源到用户可以登录,主要经历了四个阶段:

  • 初始化BIOS
  • 执行启动加载程序
  • 载入内核
  • 启动systemd服务

BIOS

Linux运维基础(九):Linux的引导过程

    计算机通电后,首先由BIOS进行POST自检,然后依据BIOS内置的引导顺序从引导设备中读取引导模块。

    BIOS由两部分组成:POST代码和运行时服务。当POST完成之后,它被从内存中清理出来,但是BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务。

    通常,Linux系统都是从硬盘上引导,其中主引导记录(MBR)中包含主引导加载程序。MBR是一个512B大小的扇区。位于磁盘上第一个扇区(0道,0柱面,1扇区),当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。

启动加载程序

    在单一MBR中只能存储一个操作系统的引导记录,当需要多个操作系统时就会出现问题,这时就需要更加灵活的引导加载程序。

    Linux系统支持两种常用的引导加载程序: LILO和GRUB,其中GRUB使用更加广泛。

GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

    相比于LILO,GRUB的功能更多,其拥有交互式界面,支持网络引导,同时其使用更加安全,避免因配置文件出错而出现系统无法启动的问题。

载入内核

内核(Kernel)是操作系统最重要的组件,用来管理计算机中所有的软硬件组件,以使操作系统具有基本能力。

Centos的许多功能,比如软件磁盘阵列,LVM,磁盘配额等,都是由内核提供的。

载入内核的过程就是将内核映像加载到内存中,内核镜像不是一个可执行的内核。内核映像的前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压缩,然后将其放入高端内存中。然后该历程会调用内核,开始启动内核引导过程。

Linux内核启动后,将依次完成四项工作:

  • 检查所有硬件设备
  • 驱动硬件设备
  • 以只读方式挂载根文件系统
  • 启动systemd服务

systemd 服务

在Centos7系统中,systemd进程是系统中所有进程的起点,是第一个运行的,而在Centos6中,第一个运行的进程是init。

systemd服务任务

  • 建立系统使用环境。Centos7中所有的环境都是由systemd服务管控的,比如提供虚拟控制台,切换到其他Target等。
  • 确保系统正常运行。Centos7上所有的进程都可视为systemd服务的衍生后代,如果Linux上出现了僵尸进程(Orphan Process),则systemd服务必须结束这些僵尸进程,以确保Linux系统正常运行。
  • 监控串行端口的周边设备。systemd服务也会监控通过串行端口连接到的外部设备,比如UPS,调制解调器等。
  • 扮演终结父进程的角色。系统总是可以确信systemd进程的存在,当出现孤儿进程的时候,孤儿进程会以systemd作为他们的父进程。

systemd服务的特点

  • PID永远为1,由于systemd服务是Centos7启动后第一个被启动的程序,因此,systemd服务第一个特性就是其进程标识符(Process ID,PID)永远为1。
  • 无法被root用户终止。Centos7系统上所有的进程都可视为systemd的子进程,如果systemd可以被任意终止的话,那么系统中所有的进程都将会被结束掉。为避免这种情况发生,systemd服务被设计为无法被任何用户终止,包括超级用户(root)。

初始化系统环境

一般来说默认的default.target只是一个软链接,它所指向的是一个服务集合。

一个服务集合一般依赖于另外一个或多个服务集合。

可以通过

systemctl list-dependencies <target>

进行查看

部分target的分析

local-fs.target 和 swap.target

这两个target 主要用于管理本机 /etc/fstab 文件所记录的相关设备的挂载动作

sysinit.target

该target主要用于侦听硬件,载入所需核心模块。例如特殊文件系统的挂载,包括dev-hugepages.mount,dev-mqueue.mount等,RAID磁盘阵列,iSCSI存储,LVM逻辑卷等也使用该target管理,以及其他日志,终端字体,额外的核心参数等都用到该target

basic.target

该target用于加载主要的硬件驱动和防火墙等时,牵扯到firewalld防火墙,SELinux的安全设置,开机日志等模块的加载

multi-user.target

对于一般系统服务的加载,该target所定义的系统服务可在/usr/systemd/system目录下查看,一般性服务可在/etc/systemd/system目录下查看。