引导过程与服务控制

一,Linux操作系统的引导过程

1:引导过程总览

开机自检(POST,Power-On Self Test)

  • 硬件检测:计算机通电后,BIOS(Basic Input/Output System)或UEFI(Unified Extensible Firmware Interface)执行硬件的初步检查,确保诸如CPU、内存、硬盘、显卡等关键组件正常工作。此过程还包括读取硬件配置信息,如CPU速度、内存大小等。
  • 启动设备选择:根据用户在BIOS/UEFI设置中的配置,决定启动设备的优先级,如硬盘、USB驱动器、光盘或网络启动。
  • 加载引导程序信息:如果启动设备是硬盘,BIOS/UEFI将读取并执行硬盘最前面的主引导记录(MBR)中的引导代码。

MBR(Master Boot Record)引导

  • 引导加载程序加载:MBR中的引导代码非常简短,其主要任务是定位并加载更复杂的引导加载程序(如GRUB、LILO等)。对于GRUB,这通常意味着加载位于硬盘上的/boot/grub目录下的第二阶段引导加载程序。
  • 分区信息:MBR还包含了一个分区表,记录了硬盘上的分区布局,这对于引导加载程序选择正确的分区以加载操作系统至关重要。

GRUB(GRand Unified Bootloader)菜单

  • 多系统选择:GRUB提供一个菜单,列出所有可启动的操作系统或内核版本,允许用户选择要启动的系统或调整内核启动参数。
  • 编辑启动参数:用户可以通过按e键在启动前临时编辑启动项的参数,例如,添加nomodeset以禁用显卡驱动的自动加载,解决启动问题。
  • 高级启动选项:GRUB还提供了命令行模式,允许高级用户手动控制启动流程,如手动加载内核和指定根文件系统。

加载Linux内核

  • 内核初始化:GRUB加载并执行Linux内核映像(如vmlinuz),内核开始进行自身的初始化,包括内存管理初始化、设置中断处理机制、初始化CPU核心等。
  • Initramfs挂载:内核加载一个临时的文件系统(Initramfs),这是一个包含必要驱动和工具的压缩文件系统,用于识别并挂载真正的根文件系统(如/dev/sda1)。
  • 根文件系统挂载:当识别到磁盘和文件系统类型后,内核挂载根文件系统,并从中读取进一步的初始化脚本和服务配置。

init进程初始化(以Systemd为例)

  • Systemd启动:内核完成根文件系统的挂载后,启动init进程,现代Linux系统普遍使用Systemd作为init系统。
  • Target和服务管理:Systemd根据默认的target(如multi-user.targetgraphical.target)启动预先定义的一系列服务和守护进程。这些服务的启动是并行且按依赖关系排序的,极大地提高了启动效率。
  • 系统就绪:所有必要的服务启动完毕后,Systemd将系统置于指定的运行级别(target),此时系统准备好接受用户登录或直接进入图形界面。

2:系统初始化进程及文件

init进程

Linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux 操作系统的过程中,“/sbin/init"是内核第一个加载的程序,因此 init 进程对应的 PID 号总是为 1。

init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程。反过来说,init 进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。

从以上描述可以看出,init 进程正是维持整个 Linux 操作系统运行的所有进程的“始祖”因此init 进程是不允许被轻易终止的。需要切换不同的系统运行状态时,可以向init 进程发送正确的执行参数,由init 自身来完成相关操作。

Systemd概述

Systemd 是 Linux 操作系统的一种 init 软件,CentOS7系统中采用了全新的 Systemd启动方式,取代了传统的 SysVinit。Systemd启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。CentOS7系统中“/sbin/nit"是“/lib/systemd/systemd”的链接文件。换言之,CentOS7系统中运行的第一个init 进程是"/lib/systemd/systemd”。systemd 守护进程负责 Linux的系统和服务,systemctl 用于控制 Systemd 管理的系统和服务状态。

二,排除系统启动类故障

1:MBR扇区故障

(1)备份MBR扇区数据
  • 命令行操作:使用dd命令备份MBR到一个文件中,例如:
  sudo dd if=/dev/sda of=/path/to/mbr_backup bs=512 count=1
  

其中,/dev/sda是硬盘设备名,/path/to/mbr_backup是备份文件保存路径,确保替换为实际路径。

(2)模拟MBR扇区故障
  • 警告:这一步骤涉及对硬盘的直接操作,存在数据丢失风险,建议在虚拟机或非重要系统上进行。
    • 可以使用dd命令将MBR清零,模拟损坏,但请在执行前确保有完整备份:
    sudo dd if=/dev/zero of=/dev/sda bs=446 count=1
    
此命令会覆盖MBR的前446字节(不包括分区表),模拟损坏。
(3)从备份文件中恢复MBR扇区数据
  • 恢复步骤:使用之前备份的MBR扇区数据恢复硬盘MBR:
  sudo dd if=/path/to/mbr_backup of=/dev/sda bs=446 count=1 conv=notrunc
  

确保正确填写备份文件路径,并谨慎操作,以防数据丢失。

2. GRUB引导故障

  • 诊断:首先,确认GRUB是否损坏,可通过启动时是否出现GRUB菜单判断。
  • 修复:使用Live CD/USB启动系统,然后:
    • 安装或重新安装GRUB到硬盘的MBR:
    sudo grub-install /dev/sda
    
如果GRUB配置文件也丢失或损坏,还需更新配置:
    sudo update-grub
    
  • 对于UEFI系统,可能需要在ESP(EFI系统分区)上操作,使用boot-repair工具可能更方便。

3. 遗忘root用户的密码

  • 重启系统:在启动过程中,进入GRUB菜单。
  • 编辑启动参数:选择要启动的内核版本,按e键编辑启动参数,在linux16或类似的行末尾(取决于GRUB版本),添加rd.breakinit=/bin/bash,然后按Ctrl+X或F10启动。
  • 获取shell:系统将进入紧急shell,没有密码限制。
  • 重新设置root密码:执行以下命令以重新挂载根文件系统为读写模式:
  mount -o remount,rw /
  

然后,使用passwd命令更改root密码:

  passwd root
  
  • 重启系统:输入exec /sbin/initexit退出shell,让系统正常重启,使用新密码登录root账户。

三,服务控制及优化启动过程

1:系统服务控制

  • 启动服务:使用systemctl start 服务名.service启动指定服务。
  • 停止服务systemctl stop 服务名.service停止指定服务。
  • 重启服务systemctl restart 服务名.service重启服务。
  • 查看服务状态systemctl status 服务名.service检查服务当前状态。
  • 启用/禁用开机启动systemctl enable 服务名.service使服务开机启动;systemctl disable 服务名.service取消开机启动。

2:切换运行级别

(1)查看系统的target
  • 使用systemctl get-default命令可以查看当前系统的默认Target(相当于旧系统的运行级别)。
(2)切换系统的target
  • 要临时切换到另一个Target,例如从图形界面切换到多用户命令行界面,可以执行:
  systemctl isolate multi-user.target
  
  • 若要永久更改默认Target,使用:
  systemctl set-default target_name.target
  

target_name.target替换为你想要设置的目标,如multi-user.targetgraphical.target

3:优化启动过程

(1)常见的系统服务

  • 核心服务:包括systemd-logind.service(用户会话管理)、dbus.service(消息总线系统)、systemd-timesyncd.service(时间同步)。
  • 网络服务:如network.service(网络配置)、firewalld.service(防火墙管理)。
  • 系统安全:包括selinux.service(SELinux安全策略)。

(2)优化开机自动加载的服务

1 使用ntsysv工具(适用于RPM-based旧系统)
  • 启动ntsysv工具(需root权限),在图形界面中可以直观地开启或关闭服务的开机启动状态。
  • 使用--level参数指定运行级别,如ntsysv --level 35针对多用户图形界面设置。
2 使用systemctl工具
  • 查看自动启动服务sudo systemctl list-unit-files | grep enabled 列出所有计划开机启动的服务。
  • 禁用服务sudo systemctl disable 服务名.service 阻止服务在启动时自动加载。
  • 启用服务sudo systemctl enable 服务名.service 设置服务开机启动。
  • 优化服务:利用systemd-analyze blame找出启动耗时较长的服务,针对性地优化或禁用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值