Linux 引导过程与服务控制

Linux 引导过程与服务控制

一,引导过程

正常开启Linux的流程

电源启动 → POST → BIOS/UEFI → 引导加载程序 → 内核加载 → initramfs → 根文件系统挂载 → systemd → 启动服务 → 用户登录

1. 电源启动与固件

1.1 POST(加电自检)

  • 作用:硬件自检(CPU、内存、外设等)。

  • 异常处理:蜂鸣声/错误码提示硬件故障。

1.2 BIOS vs UEFI

特性BIOSUEFI
分区表MBR(最大2TB)GPT(支持大容量磁盘)
引导文件位置MBR引导扇区(512字节)ESP分区(/boot/efi)中的.efi文件
启动速度较慢更快(支持Secure Boot)
配置文件无直接配置使用/boot/efi/EFI/[distro]/中的配置文件

2. 引导加载程序(Bootloader)

2.1 GRUB(传统BIOS流程)

  • :存储在MBR,定位Stage 1.5或Stage 2。

  • :读取/boot/grub/grub.cfg,显示启动菜单。

    [root@localhost ~]# cd /boot/grub2/
    [root@localhost grub2]# ls
    device.map  fonts  grub.cfg  grubenv  i386-pc  locale  themes

    grub.cfg 里面是引导程序的配置文件,主要用于定义操作系统的启动选项和引导参数。

  • 关键参数:root=UUID=...(根分区)、initrd=/initramfs-xxx.img

2.2 UEFI启动

  • 直接加载:从ESP分区运行.efi文件(如grubx64.efi)。

  • 配置文件:/boot/efi/EFI/ubuntu/grub.cfg(以Ubuntu为例)。


3. 内核初始化

3.1 内核加载

  • 内核文件:vmlinuz-<版本>(压缩内核镜像)。

  • initramfs作用:

    • 提供临时根文件系统。

    • 加载关键驱动(如LVM、加密模块)。

    # 重建initramfs(Debian/Ubuntu)
    update-initramfs -u -k all
    # Arch Linux
    mkinitcpio -P

3.2 根文件系统挂载

  • 内核参数:root=指定根分区(UUID或设备路径)。

  • 切换根目录:pivot_rootswitch_root


4. 用户空间初始化(systemd)

4.1 systemd核心流程

  • PID 1进程:首个用户态进程,替代传统init

  • 启动目标(Target):

    • default.target:符号链接指向默认目标(如graphical.target)。

    • 查看当前目标:systemctl get-default

    • 修改目标:sudo systemctl set-default multi-user.target

4.2 并行启动服务

  • 服务单元:.service文件定义依赖关系。

  • 分析启动耗时:

    systemd-analyze blame       # 各服务启动时间
    systemd-analyze critical-chain  # 关键路径

5. 用户登录

5.1 显示管理器

  • 图形登录:GDM(GNOME)、LightDM、SDDM。

  • 控制台登录:直接启动getty服务(如tty1)。

5.2 用户环境初始化

  • Shell配置:/etc/profile~/.bashrc(Bash)。

  • 显示欢迎信息:/etc/motd(Message of the Day)。

6.故障处理

6.1 MBR扇区故障 (MBR主引导记录)

mbr

mbr作用

  1. 引导操作系统

    • BIOS在POST完成后读取MBR的引导代码,执行引导程序(如GRUB)。

    • 引导代码将控制权交给操作系统的内核(如Linux的vmlinuz)。

  2. 管理磁盘分区

    • 分区表定义每个分区的起始/结束位置、类型(如Linux的83、交换分区的82)。

    • 扩展分区通过链式结构支持更多逻辑分区(突破4个主分区的限制)。

MBR修复过程

下面将通过示例模拟MBR扇区进行备份,模拟破坏,修复过程

备份

mbr扇区引导记录不能备份到用一个磁盘内这样等于没有进行备份

[root@localhost /]# mount /dev/sda  
sda   sda1  
[root@localhost /]# mount /dev/sda1 /backup/
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
[root@localhost /]# dd if=/dev/nvme0n1 of=/backup/nvme0n1.mbr.bak bs=512 count=1
输入了 1+0 块记录
输出了 1+0 块记录
512 字节已复制,4.232e-05 s,12.1 MB/s
​

模拟MBR扇区故障

使用dd命令将MBR扇区记录覆盖这样在重启电脑找不到mbr信息会会造成无法正常开机

[root@localhost /]# dd if=dev/zero of=/dev/nvme0n1 bs=512 count=1
###从/dev/zero取出512个字节输入/devnvme0n1中覆盖mbr第一个扇区的512字节记录mbr分区信息从而照成无法正常开机

模拟MBR扇区修复

重新启动F2进入bios界面上下左右键控制在boot选项下找到+Hard Drive点击回车按键 并把第一个nvme设备选在第一个(看个人硬盘在那个就那个启动我的是nvme选着nvme)这里的选项都是让你选着以那个设备进行开机如果找不到会重新装一个新的系统我们都会找不到因为我们刚刚把第一个mbr分区信息给覆盖掉了

这里选着exit 下的第一个保存并退出

选择第三个进入 Troubelshooting (解决麻烦)

选着模式菜单

第三个是Troubleshooting

选着第二个进入救援模式

救援模式

  1. Continue:继续正常启动,或者挂载文件系统为读写模式。

  2. Read-only:以只读方式挂载文件系统,防止数据被修改,适合检查问题。

  1. Skip:跳过自动挂载,进入命令行,由用户手动操作。

  2. Quit (Reboot) 重新启动

这里我们选着第一个继续并且再次按下enter

这里我们无法正常访问文件因为我们的mbr分区信息被错误信息覆盖导致系统找不到

创建一个目录bak 并且把我们的文件挂在下该目录 (我们mbr文件备份在/dev/sda1)

通过  dd if=/bak/mbr.bak  of=/dev/nvme0n1 bs=512 count=1

       if=输入 of=输出 bs=大小  count=次数

再次重新启动就可以正常登录系统了成功修复MBR扇区故障

GRUB

  • 算机通电后,BIOS/UEFI 首先运行,随后将控制权交给 GRUB。
  • GRUB 从硬盘的 引导分区(如 /boot)读取配置文件(grub.cfg),加载 Linux 内核(vmlinuz)和初始化内存盘(initramfs)。
  • 最终将控制权交给内核,启动完整的操作系统。

GRUB模拟故障修复过程

模拟故障

将grub文件改名以完成到grub菜单系统找不到模拟故障

解决方法一

手动指定加载内核和初始化镜像

insmod xfs ###进入文件系统

linux16 /vmlinuxz-6.6.0-72.oe2403sp1.x86_64 root=/dev/mapper/openeuler-root  ###手动指定加载内核

initrd16  /initramfs-6.6.0-72.0.0.76.oe2403sp1.x86_64.img    ###手动指定加载初始化镜像

在boot重新启动就文成grub故障修复

解决方法二

再有备份的情况下

[root@localhost ~]# cd /boot/grub2/
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale  themes
[root@localhost grub2]# mv grub.cfg grub.cfg.bak

我们在/boot/grub2/grub.cf

 更改名字模拟grub故障

重启

会进入到grub界面

再次重启进入grub模式

重启的时候快速点按esc (一定要快 有多快就多快)

选着第三个cd—ROM Drive 以光盘开启

跟修复mbr扇区一样选着第三个Troubleshooting 在选择第二个进入救援模式

chroot更改根目录不该根目录会到光盘的根目录

然后恢复grub文件重启完成grub故障修复

GRUB 是 Linux 系统的“启动导航员”,负责:

  1. 加载内核和初始化系统。

  2. 管理多操作系统引导。

  3. 提供修复和调试接口(如单用户模式)。

  4. 支持加密和 Secure Boot 等安全功能。

二,服务控制

1.1 systemd 核心概念

  • 服务单元文件
    服务配置文件位于 /usr/lib/systemd/system/(系统级)和 /etc/systemd/system/(自定义或覆盖配置)。
    示例:nginx.servicesshd.service

  • 服务生命周期管理
    systemd 负责服务的启动、依赖关系、日志和资源监控。


2. 常用命令速查表

2.1 基本服务操作

操作systemd 命令SysVinit 命令
启动服务sudo systemctl start <服务名>sudo service <服务名> start
停止服务sudo systemctl stop <服务名>sudo service <服务名> stop
重启服务sudo systemctl restart <服务名>sudo service <服务名> restart
查看状态systemctl status <服务名>service <服务名> status
启用开机自启sudo systemctl enable <服务名>sudo chkconfig <服务名> on
禁用开机自启sudo systemctl disable <服务名>sudo chkconfig <服务名> off
查看是否开机自启systemctl is-enabled <服务名>chkconfig <服务名>

2.2 查看服务信息

操作命令说明
列出所有已启动的服务systemctl list-units --type=service显示正在运行的服务
列出所有服务(含状态)systemctl list-unit-files --type=service包括未运行的服务
查看服务依赖关系systemctl list-dependencies <服务名>显示服务依赖的其他单元

启动服务:start
停止服务:stop
重启服务:restart
查看状态:status
开机自启:enable

关闭服务:disable
日志跟踪:journalctl -u <服务名> -f

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值