Linux系统引导过程与启动排障

Linux系统引导过程与启动排障

1.Linux操作系统引导过程

1)启动过程

开机自检(BIOS)→ MBR引导 → GRUB(菜单)→ 加载内核(kernet)→ init进程初始化

1、开机自检:检测设备/硬件是否正常。

2、MBR引导:硬盘一块扇区中的核心区域。

  • 当计算机开机时,BIOS会读取硬盘上的MBR,并将控制权交给MBR中的引导程序,从而启动操作系统

3、GRUB菜单:给用户显示菜单-》选择以什么方式运行Linux内核加载Linux内核。

4、加载内核:内核是处于硬件和程序之间,用于管理协调角色(资源)目的:就是把内核程序/文件加载到内存中。

  • Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程,

5、系统第一个进程init进程初始化,及其它自启动程序初始化。

2)systemd(/lib/systemd)

​ systemd是Linux系统的一套基本构建模块,它提供了一个系统和服务管理器,作为PID 1运行并启动系统的其余部分。systemd提供积极的并行化功能,使用套接字和D-Bus激活来启动服务,提供按需启动守护进程,使用Linux控制组跟踪进程,维护挂载和自动挂载点,并实现一个精心设计的基于事务依赖的服务控制逻辑。

①systemd的主要功能和特点
  • 并行启动服务:允许并行启动多个不相互依赖的服务,显著缩短系统启动时间。

  • unit文件:每个系统资源(如服务、挂载点、设备、sockets、计时器等)都被定义为一个“单元”(unit),并由一个相应的配置文件(unit file)来描述。

  • 依赖关系管理:允许精确地定义服务之间的依赖关系,确保服务按照正确的顺序启动或停止。

  • 系统目标(targets):类似于System V init的运行级别,但更加灵活,代表一组服务的集合,定义了系统的某种运行状态。

  • journal日志:提供了一个名为journal的日志系统,用于收集和查看系统日志,支持快速过滤和查询。

  • socket激活:服务可以根据实际需求(如客户端连接)动态激活,而不是一直运行等待请求,提高了资源利用率。

  • 环境变量与资源限制:unit文件中可以设定服务的环境变量、资源使用限制(如内存、cpu时间)等。

  • 用户服务:除了系统级别的服务外,systemd还支持用户级别的服务,通过user@.service类型的单元。

  • 网络命名和管理:提供了一个叫做networkd的组件,用于网络接口的配置和管理。

  • systemd在Linux系统中的作用

    • systemd负责管理系统的启动过程、服务、挂载点、设备、网络等,确保系统按照正确的顺序和方式进行初始化。它取代了传统的init系统,提供了更高效、更灵活的服务管理方式
②systemctl单元类型

systemctl 是 systemd 的命令行工具,用于管理和控制系统服务。在 systemd 中,各种系统资源和对象都被组织成不同的“单元”(units)。每个单元都有一个特定的类型,这些类型决定了单元的行为和用途。以下是一些常见的 systemd 单元类型:

  1. Service(服务)
    • 类型为 .service
    • 定义了一个系统服务,包括如何启动、停止、重启该服务,以及它的依赖关系等。
    • 示例:nginx.service 表示 Nginx 网络服务器服务。
  2. Socket(套接字)
    • 类型为 .socket
    • 定义了一个网络或 IPC 套接字,可以用于监听来自客户端的连接请求。
    • Socket 可以与服务关联,当有新的连接请求时,可以自动激活对应的服务。
    • 示例:dbus.socket 表示 D-Bus 通信套接字。
  3. Target(目标)
    • 类型为 .target
    • 类似于传统的 runlevel,定义了一组服务的集合,代表了系统的某种运行状态。
    • 可以将系统切换到某个目标,从而改变系统的运行级别或状态。
    • 示例:graphical.target 表示图形界面模式,multi-user.target 表示多用户命令行模式。
  4. Device(设备)
    • 类型为 .device
    • 定义了一个系统设备,通常与 udev 规则相关联。
    • 示例:/dev/sda.device 表示一个硬盘设备。
  5. Mount(挂载)
    • 类型为 .mount
    • 定义了一个文件系统的挂载点,包括挂载选项、挂载点路径等。
    • 示例:/mnt/data.mount 表示一个数据挂载点。
  6. Automount(自动挂载)
    • 类型为 .automount
    • 定义了一个自动挂载点,当访问该路径时,系统会自动挂载相应的文件系统。
    • 示例:/mnt/nfs.automount 表示一个 NFS 自动挂载点。
  7. Swap(交换分区)
    • 类型为 .swap
    • 定义了一个交换分区,用于虚拟内存管理。
    • 示例:/dev/sdb1.swap 表示一个交换分区。
  8. Path(路径)
    • 类型为 .path
    • 定义了一个文件系统路径,当该路径发生变化时,可以触发某个服务或操作。
    • 示例:/etc/fstab.path 可以在 /etc/fstab 文件发生变化时执行某些操作。
  9. Timer(计时器)
    • 类型为 .timer
    • 定义了一个定时器,可以在指定的时间间隔后触发某个服务或操作。
    • 示例:backup.timer 可以定期执行备份任务。
  10. Snapshot(快照)
    • 类型为 .snapshot
    • 用于创建当前系统状态的快照,可以用于备份或恢复。
    • 示例:emergency-snapshot.target 表示一个紧急快照目标。
③运行级别所对应的Systemd目标
运行级别Systemd的target说明
0poweroff.target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2multi-user.target用户定义/域特定运行级别。默认等同于3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动,使用该级别时将会重启主机
示例:

以下是一些常见的systemd目标及其与传统运行级别的对应关系:
runlevel命令

  1. runlevel0.targetpoweroff.target
    • 对应传统的运行级别0,即关机模式。
    • 系统会关闭所有服务并关机。
  2. runlevel1.targetrescue.target
    • 对应传统的运行级别1,即单用户模式。
    • 系统仅启动最基本的服务,并以root用户登录,用于系统维护和故障排除。
  3. runlevel2.targetrunlevel3.targetmulti-user.target
    • 对应传统的运行级别2和3,即多用户模式(无图形界面)。
    • 系统启动所有必要的服务,但不启动图形界面。
  4. runlevel4.target
    • 在传统的Linux系统中,运行级别4通常没有特殊含义,可以被配置为自定义状态。
    • 在systemd中,这个目标也可以被用作自定义目标。
  5. runlevel5.targetgraphical.target
    • 对应传统的运行级别5,即多用户模式(带图形界面)。
    • 系统启动所有必要的服务,并启动图形界面。
  6. runlevel6.targetreboot.target
    • 对应传统的运行级别6,即重启模式。
    • 系统会关闭所有服务并重启。

init命令

2.排除启动类故障

1)修复MBR扇区故障
  • 故障原因
    • 病毒、木马等造成的破坏
    • 不正确的分区操作、磁盘读写误操作
  • 故障现象
    • 找不到引导程序,启动中断
    • 无法加载操作系统,开机后黑屏
  • 解决思路
    • 应提前作好备份文件
    • 以安装光盘引导进入急救模式
    • 从备份文件中恢复
  • 解决过程

######修复MBR扇区故障
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节
1.备份MBR 扇区数据到其它磁盘(/dev/sdb1)

mkdir /backup
mount /dev/sdb1 /backup
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1

2.模拟破坏MBR引导扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1

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

sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir 				#挂载带有备份文件的分区
sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda	#恢复备份数据
sh-4.2# exit		
2)修复MBR引导故障
  • 故障原因
    • MBR中的GRUB引导程序遭到破坏
    • grub.cfg文件丢失、引导配置有误
  • 故障现象
    • 系统引导停滞,显示“grub>”提示符
  • 解决思路
    • 尝试手动输入引导命令
    • 进入急救模式,重写或者从备份中恢复grub.conf
    • 向 MBR 扇区中重建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
方法二:进入急救模式,恢复GRUB引导程序
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前466字节是主引导记录,分区表保存在MBR扇区中的第477-510字节中。
mkdir /bak
mount /dev/sdb1 /bak
dd if=/dev/sda of=/bak/grub.bak bs=446 count=1

#模拟对MRB中的GRUB引导程序的破坏,但并不破坏分区表
dd if=/dev/zero of=/dev/sda bs=446 count=1

#引导界面进入急救模式,从备份文件中恢复GRUB引导程序
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir 	
sh-4.2# dd if=/backupdir/grub.bak of=/dev/sda	
sh-4.2# exit
方法三:引导界面进入急救模式,重建GRUB菜单配置文件
rm -rf /boot/grub2/grub.cfg
#进入急救模式,加载系统镜像,切换到系统根环境
先加载好光盘镜像,重启操作系统,
当出现安装向导界面时,选择“Troubleshooting”选项,
再选择“Rescue a CentOS Linux system”选项,进入急救模式
选择“1”选择 Continue并按 Enter 键继续
再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
sh-4.2# chroot /mnt/sysimage

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

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

#退出chroot 环境,并重启
bash-4.2# exit
sh-4.2# reboot

##### 3)遗忘 root 用户

的密码

进入急救模式,加载系统镜像,切换到系统根环境

sh-4.2# chroot /mnt/sysimage
#重设 root 用户密码
bash-4.1# passwd root
  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值