Linux运维基础(九):Linux的引导过程
Posted 漂亮姐姐1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维基础(九):Linux的引导过程相关的知识,希望对你有一定的参考价值。
计算机从开启电源到用户可以登录,主要经历了四个阶段:
- 初始化Bios
- 执行启动加载程序
- 载入内核
- 启动systemd服务
BIOS
计算机通电后,首先由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目录下查看。
以上是关于Linux运维基础(九):Linux的引导过程的主要内容,如果未能解决你的问题,请参考以下文章