Linux引导过程和服务控制

本文详细介绍了Linux操作系统的引导过程,包括MBR、GRUB、内核加载和init初始化。同时,系统初始化由传统的sysvinit转变为systemd,对比了两者的差异。还讲解了如何排除MBR和GRUB引导故障,以及如何重置root密码。最后,提到了系统服务控制和运行级别的查看与切换,以及ntsysv服务管理工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、操作系统引导过程

1. 大致过程

开机自启 >>>MBR引导>>>GRUB菜单>>>加载内核(kernel)>>>init初始化
在这里插入图片描述

2. 详细过程

1.开机自检
当服务器开机时,会进行开机自检,检测硬件设备比如CPU、内存、显卡、键盘等设备是否有故障,无故障便会根据预设的开机启动顺序,移交系统控制权,正常情况下为本机硬盘。
总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱

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

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

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

5.init 进程初始化
内核被加载后,第一个运行的程序就是“/sbin/init”(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录。
总结:加载硬件驱动程序,内核把init进程加载到内存中运行

二、系统初始化的进程

1. init

  1. 由Linux内核加载运行 /sbin/init 程序
  2. init 进程是系统中第一个进程,是所有进程的父进程
  3. init进程的PID (进程标记)号永远为1

2. systemd

  1. Systemd是Linux操作系统的一种 init 软件
  2. CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
  3. CentOS7中运行的第一个 init 进程是 /lib/systemd/systemd
2.1 systemd与sysvinit比较
  • sysvinit
    依赖于串行执行 Shell 脚本启动服务(各个文件间有依赖关系,按依赖关系启动,分先后顺序) 所有服务都启动,导致效率低下 系统启动速度较慢
  • systemd
    将更多的服务进程并行启动(先忽略依赖关系,同时启动,待相应的依赖软件启动后,在建立依赖关系) 提供按需启动服务的能力,使得启动更少进程,效率高 系统启动速度快
  • 总结: sysvinit串行执行脚本启动服务,效率慢 。 systemd 并行启动服务进程,效率高
2.2 systemd单元类型

在这里插入图片描述

2.3 init运行级别对应systemd目标(target)

在这里插入图片描述

例如常用的

init 6 对应 systemctl reboot.target

级别 2、4几乎很少使用

三、排除系统引导启动项故障

1. MBR故障

1.1 故障分析

故障原因

  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

故障现象

  • 找不到引导程序,启动中断
  • 无法加载操作系统,开机后黑屏

解决思路

  • 应提前作好备份文件
  • 以安装光盘引导进入急救模式
  • 从备份文件中恢复
1.2 故障修复

因为是实验,所以事先需要模拟故障
添加一新硬盘,并且挂载使用,用作为备份磁盘

第一步:备份MBR 扇区数据到其它磁盘
在这里插入图片描述

将sda里的mbr备份到sdb1中的 MBR.bak文件中(sdb1挂载在/backup目录下)

第二步:模拟破坏mbr扇区

思路就是从“零”文件中取512字节数据 把扇区占满
在这里插入图片描述
第三步:开始修复步骤

先加载好光盘镜像,重启操作系统,
当出现安装向导界面时,选择“Troubleshooting”选项,
再选择“Rescue a CentOS Linux system”选项,进入急救模式
选择“1”选择 Continue并按 Enter 键继续
再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境

sh-4.2# mkdir /backup0
sh-4.2# mount /dev/sdb1 /backup0				
#挂载带有备份文件的分区
sh-4.2# dd if=/backupdir/MBR.bak of=/dev/sda	
#恢复备份数据
sh-4.2# exit									
#执行exit命令退出临时Shell 环境,系统将会自动重启

重启后图示步骤如下:
在这里插入图片描述
(上下键移动光标 回车键确认)
在这里插入图片描述
然后等待一会加载 会进入到急救模式

在这里插入图片描述
按照图示操作即可
然后在sh-4.2#界面中输入exit退出
然后正常开机 mbr扇区已恢复
在这里插入图片描述

2. GRUB故障

2.1 故障分析

故障原因

  • MBR中的GRUB引导程序遭到破坏
  • grub. cfg 文件丢失、引导配置有误(centos7文件所在位置/boot/grub2/grub. cfg)

故障现象

  • 系统引导停滞,显示 “grub>” 提示符

解决思路

  • 尝试手动输入引导命令
  • 进入急救模式,重写或者从备份中恢复grub.conf
  • 向MBR扇区中重建grub程序
2.2 故障恢复

方法一:手动输入命令

  • 此方法不建议使用,因为不能复制粘贴,所有命令全是一个字符一个字符的手动输入,较为繁琐且容易出错

有兴趣的同学可以试试

/boot/grub/目录下的包是用于启动菜单的背景图片及样式
/boot/grub2/grub.cfg			
#GRUB配置文件

grub> insmod xfs					
#加载指定的模块到内核
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet LANG=zh_CN.UTF-8	
 #内核的名字及位置等信息
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img			
#镜像系统文件
grub> boot		
#引导boot

方法二:同修复MBR扇区类似 进入急救模式恢复

  • 但是要注意一点,在整个MBR扇区中 ,前446个字节才是GRUB引导记录,所以只需要恢复前446个字节即可

操作命令同上修复MBR 只需要把512字节改为446字节即可,不再演示

方法三:引导界面进入急救模式,重建GRUB菜单配置文件

  • 这种方法一般处理/boot/grub2/grub. cfg 文件误删丢失或引导配置有误的情况。

1 >所以模拟实验,先删除/boot/grub2/grub. cfg文件 模拟故障

rm -rf /boot/grub2/grub.cfg

2>进入bios模式 把CD-ROM Drive 修改为第一位在这里插入图片描述

  • 然后进入急救模式 操作步骤在上面(修复MBR扇区)不再演示

3>进入急救模式
在这里插入图片描述


sh-4.2# chroot /mnt/sysimage 
//加载系统镜像,切换到系统根环境

bash-4.2# grub2-install /dev/sda  
//重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区

bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg  
//重新构建GRUB菜单的配置文件

然后退出急救模式 重启即可

3. 重设root密码

进入急救模式步骤与↑相同 不再演示

sh-4.2# chroot /mnt/sysimage     #进入急救模式,加载系统镜像,切换到系统根环境
bash-4.2# passwd root      #重设 root 用户密码
按照步骤重设即可

四、系统服务控制

1.命令格式

systemctl 控制类型 服务名称

2.常用控制类型:

  • start:启动
  • stop:停止
  • restart:重新启动
  • reload:重新加载
  • status:查看服务状态

五、运行级别

1. 查看运行级别

  1. runlevel命令
  2. systemctl工具
  3. systemctl get-default(查看系统默认的运行级别)

2. 临时/永久切换运行级别

临时切换

  1. init命令
  2. systemctl工具

永久切换

两条命令:

ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target 
#设置永久运行级别

ystemctl set-default multi-user.target    
#设置永久运行级别

六、ntsysv系统服务管理工具

  • 提供一个交互式、可视化窗口
  • 可以在字符终端运行
  • 便于集中管理多个服务
  • 用于控制服务是否开机自启动
ntsysv
ntsysv --level 级别列表

在这里插入图片描述
上下键移动 空格键选择/取消选择(开机自启/取消开机自启)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值