Linux系统启动的详细步骤是怎样的?

Linux系统的启动是一个涉及硬件、固件和软件协同工作的复杂过程,从用户按下电源键到最终进入用户界面,经历了一系列精心设计的初始化阶段,理解这一流程不仅有助于系统管理,也能在出现启动故障时快速定位问题,以下从硬件加电开始,逐步拆解Linux系统的完整启动链路。

linux系统如何启动

电源开启与BIOS/UEFI初始化

按下电源键后,计算机首先执行的是主板固化固件(BIOS或UEFI)的加电自检(POST),POST阶段会检测CPU、内存、显卡、硬盘等核心硬件是否正常,若发现硬件故障,通常会通过蜂鸣器或错误码提示,硬件自检通过后,固件会根据预设的启动顺序(如硬盘、U盘、网络)寻找引导设备。

传统BIOS采用16位实模式,仅支持2TB以下容量的MBR分区,而现代UEFI(统一可扩展固件接口)则采用32/64位保护模式,支持GPT分区、Secure Boot安全启动(验证引导加载器和内核签名)以及快速启动(Fast Boot,跳过部分硬件检测),UEFI还会读取引导设备的EFI系统分区(ESP),加载其中的引导加载器程序,这是与BIOS的关键区别之一。

引导加载器(GRUB2)阶段

主流Linux发行版普遍使用GRUB(Grand Unified Bootloader)作为引导加载器,其中GRUB2是当前版本,当固件找到引导设备后,会加载GRUB2的第一阶段引导程序(位于硬盘的MBR或ESP分区),该程序负责加载第二阶段引导程序,并读取GRUB2的配置文件(通常为/boot/grub2/grub.cfg/boot/grub/grub.cfg)。

GRUB2配置文件定义了启动菜单项、内核路径、initramfs文件路径及内核参数,若系统安装多个操作系统,GRUB2会显示菜单供用户选择;若未设置超时,默认启动第一个条目,选定后,GRUB2会将内核(如/boot/vmlinuz-5.15.0-76-generic)和初始RAM磁盘(initramfs,如/boot/initrd.img-5.15.0-76-generic)加载到内存中,并将控制权交给内核。

GRUB2配置文件关键参数示例

menuentry "Ubuntu Linux" {
    linux   /boot/vmlinuz-5.15.0-76-generic root=/dev/sda2 ro quiet splash
    initrd  /boot/initrd.img-5.15.0-76-generic
}

linux行指定内核路径和根文件系统位置(root=/dev/sda2),ro表示以只读模式挂载根文件系统(后续会切换为读写);initrd行加载initramfs,为内核提供启动初期的驱动和工具。

内核加载与解压

内核被加载到内存后,首先进行自解压(现代内核通常为压缩格式,如zImage或bzImage),解压完成后,内核会初始化核心硬件子系统(如进程调度、内存管理、中断处理),并检测CPU、总线等设备。

linux系统如何启动

随后,内核会挂载根文件系统(rootfs),此时根文件系统尚未完全可用,因此需要借助initramfs提供的临时环境,initramfs是一个内存中的微型文件系统,包含必要的驱动程序(如存储驱动、RAID驱动、LVM驱动)、文件系统工具(如mountfsck)和二进制文件(如/sbin/init),内核会以initramfs为根,执行/init脚本(通常是/usr/lib/systemd/systemd/sbin/init),完成根文件系统的挂载和切换。

initramfs的核心作用

  • 为内核提供启动初期所需的硬件驱动(如SATA、NVMe、RAID),否则内核可能无法识别真实根文件系统;
  • 在挂载真实根文件系统前,检查并修复文件系统错误(通过fsck);
  • 挂载真实根文件系统后,清理临时环境并切换到真实根文件系统。

systemd初始化系统

当内核切换到真实根文件系统后,会启动系统的第一个进程(PID为1),该进程由initramfs中的/init脚本决定,现代Linux发行版普遍采用systemd作为init系统,取代了传统的SysVinit和Upstart。

systemd启动流程的核心是“并行化”和“依赖管理”:

  1. 挂载基本文件系统:systemd首先挂载/proc(进程信息)、/sys(设备信息)、/dev(设备文件)等虚拟文件系统,这些文件系统为内核和用户空间提供交互接口。
  2. 启动systemd-initrd.target:若仍在initramfs环境,systemd会执行initramfs的清理任务;若已切换到真实根文件系统,则继续后续流程。
  3. 解析依赖关系:systemd通过单元文件(Unit File,.service.target.mount等)定义服务间的依赖关系,例如network.target依赖sysinit.target系统初始化目标),而sysinit.target又依赖local-fs.target(本地文件系统挂载)。
  4. 启动默认目标:systemd的默认目标(Default Target)通常为graphical.target(图形界面)或multi-user.target(命令行多用户),默认目标由/etc/systemd/system/default.target文件定义,实际是符号链接,如default.target -> graphical.target

systemd目标与传统运行级别的对应关系

传统运行级别 systemd目标 说明
0 poweroff.target 关机
1 rescue.target 救援模式(单用户)
2,3,4 multi-user.target 多用户命令行模式
5 graphical.target 多用户图形界面模式
6 reboot.target 重启

系统服务启动与用户登录

在确定默认目标后,systemd会根据依赖关系并行启动所需服务。multi-user.target需要启动sshd(SSH服务)、cron(定时任务)、network.service(网络服务)等;graphical.target则额外启动display-manager.service(如gdm3sddm图形登录管理器)。

服务启动过程中,systemd会通过socket(套接字)、device(设备)、mount(挂载点)等激活器(Activator)按需启动服务,而非全部常驻内存,从而提高资源效率,当有SSH连接请求时,sshd.socket会触发sshd.service启动。

linux系统如何启动

服务启动完成后,若为图形界面模式,系统会加载X Window System或Wayland显示服务器,启动图形登录界面(如GDM、SDDM),用户输入用户名和密码后,登录进程(如/bin/bash或桌面环境)启动,最终进入桌面环境或命令行终端。

相关问答FAQs

Q1:Linux启动过程中卡在GRUB菜单界面,无法进入系统,如何解决?
A:通常由GRUB配置错误或根文件系统问题导致,可尝试以下步骤:

  1. 进入GRUB菜单界面,选择“Advanced options for Ubuntu”或类似条目,查看是否能进入恢复模式;
  2. 若无法进入,通过GRUB命令行(按c键)手动指定内核和initramfs路径,
    linux (hd0,gpt2)/boot/vmlinuz-5.15.0-76-generic root=/dev/sda2 ro  
    initrd (hd0,gpt2)/boot/initrd.img-5.15.0-76-generic  
    boot  
  3. 若能进入系统,检查/boot/grub2/grub.cfg中的root参数是否正确(根文件系统设备名可通过lsblkfdisk -l确认);
  4. 若GRUB配置丢失,可重新生成:sudo update-grub

Q2:如何查看Linux系统启动耗时及慢的服务?
A:使用systemd提供的systemd-analyze命令:

  1. 查看总启动耗时:systemd-analyze,显示从内核启动到系统就绪的总时间;
  2. 查看详细启动时间分布:systemd-analyze blame,按耗时排序列出各服务启动时间;
  3. 生成启动流程图:systemd-analyze plot > boot-plot.svg,用SVG查看器打开可视化流程;
  4. 分析特定服务依赖:systemd-analyze critical-chain sshd.service,查看sshd.service的启动依赖链,定位瓶颈。

通过以上工具,可快速定位启动缓慢的服务(如某驱动加载失败或服务依赖过多),针对性优化。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/28202.html

(0)
酷番叔酷番叔
上一篇 1小时前
下一篇 1小时前

相关推荐

  • Linux中启动一个进程的具体步骤和命令有哪些?

    在Linux系统中,进程是程序执行的基本单位,启动进程的方式多种多样,从简单的命令行执行到复杂的系统服务管理,每种方式适用于不同的场景,理解这些方法有助于更高效地管理Linux系统中的任务,命令行直接启动进程最基础的启动方式是通过终端直接输入命令,当用户在终端输入一条指令并按下回车后,shell(如bash)会……

    2025年8月29日
    1500
  • 如何在u盘上运行linux系统下载

    下载能启动的Linux镜像文件,再用工具如Rufus将镜像写入U盘,制作

    2025年8月9日
    1900
  • 如何快速创建用户字体目录?

    为何需要添加字体?应用场景:解决文档/设计软件中字体缺失、乱码问题,支持多语言显示(如中文、日文),或满足编程字体需求(如JetBrains Mono、Fira Code),兼容性:Linux原生支持TTF、OTF等主流格式,Windows字体(如微软雅黑)也可直接导入,安装方法详解方法1:用户级安装(无需ro……

    2025年6月16日
    5200
  • 如何快速安装TigerVNC详细步骤

    在Linux服务器管理中,图形界面连接能显著提升操作效率,尤其适合桌面环境管理、可视化软件调试等场景,以下是三种主流图形连接方法的详细操作指南,所有步骤均基于Linux发行版(如Ubuntu/CentOS)验证,注重安全性与易用性,准备工作服务器端配置安装桌面环境(以GNOME为例): # Ubuntu/Deb……

    2025年7月17日
    3400
  • 如何实现linux计划任务

    Linux 中,通过 crontab 命令设置计划任务,编辑任务列表,指定

    2025年8月16日
    1700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信