引导和服务

161 阅读6分钟

引导过程

开机自检

服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移 交系统控制权,大多时候会移交给本机硬盘。 网络启动 加载 网络批量pxe

硬件启动POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测

主板的ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等

MBR引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)。 总结:运行放在MBR扇区里的启动 GRUB引导程序

GRUB菜单 系统类型双西雅图 内核文件 默认值

对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。 总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

grub功能和组成

bootloader: 引导加载器,引导硬件去找到 内核(操作系统的核心)

  • Windows: ntloader,仅是启动OS
  • Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

Linux的bootloader

  • LILO:LInux LOader,早期的bootloader,功能单一
  • GRUB: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用GRUB 2.02

GRUB 启动阶段

primary boot loader :

1st stage:MBR的前446个字节 引导 硬件去找 内核
1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

secondary boot loader :2nd stage,分区文件/boot/grub2/grub.cfg

加载Linux内核 操作系统 调度硬件

Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过 程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。 总结:把内核和镜像文件系统加载到内存中 可以使用

init进程初始化 这是linux 系统运行的第一个程序

为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录 总结:加载硬件驱动程序,内核把init进程加载到内存中运行

简化启动引导

1.加电检测硬件是否有故障,如果无故障, 就去bios 中设置的第一启动项找操作系统
2.MBR引导第一个扇区的前446字节 有一个 grub 程序第一阶段,引导硬件找到grub 完整的程序
3.grub会根据grub.cfg 配置文件找到操作系统
4加载内核(操作系统)
5.启动程序进程系统文件 centos7 systemd centos6 init

systemd服务程序

Service段的常用选项:

Type:定义影响ExecStart及相关参数的功能的unit进程启动类型

  1. simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中

  2. forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止

  3. oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中

  4. dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行

  5. notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息

  6. idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务

  7. EnvironmentFile:环境配置文件

  8. ExecStart:指明启动unit要运行命令或脚本的绝对路径

  9. ExecStartPre: ExecStart前运行

  10. ExecStartPost: ExecStart后运行

  11. ExecStop:指明停止unit要运行的命令或脚本

  12. Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务

  13. RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指

  14. 定时间单位,那么将视为以秒为单位。 例如设为"20"等于设为"20s"。

  15. PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

image.png

修复mbr分区

1.备份mbr引导扇区到其他磁盘

2.模拟破坏mbr引导扇区

3.引导镜像急救模式进行mbr扇区恢复

9bfe89f72338526ec4235a859b9e8e7.png
dd if=/dev/sda of=/mnt/mbr/bak
hexdump -C -n 512 /dev/sda

image.png image.png 接下来是实机操作,命令附在图上

image.png
进入急救模式
选择第三个,随后第二个进入急救 image.png

image.png

image.png

image.png

image.png

image.png
到此修复完成

修复GRUB引导故障

故障原因
·MBR中的GRUB引导程序遭到破坏ogrub.conf文件丢失、引导配置有误
故障现象
系统引导停滞,显示“grub>”提示符
解决思路
尝试手动输入引导命令
进入急救模式,重写或者从备份中恢复grub.conf·
向 MBR 扇区中重建qrub程序

引导界面进入急救模式,重建GRUB菜单配置文件rm -rf /boot/grub2/grub.cfg#进入急救模式,加载光盘镜像切换到硬盘的系统根环境sh-4.2
chroot /mnt/sysimage
重新将GRUB引导程序安装到第一块硬盘 (/dev/sda) 的MRB扇区,如果有多个分区可省略bash-4.2
grub2-install /dev/sda4
重新构建GRUB菜单的配置文件 bash-4.2 grub2-mkconfig -o/boot/grub2/grub.cfg
退出chroot 环境,并重启 bash-4.2 exitsh-4.2
reboot