深入解析Linux系统启动全流程
LINUX操作系统的引导过程
Linux操作系统的引导过程是指从计算机开机到系统完全启动并进入用户界面的整个序列。这个过程涉及多个阶段,确保硬件初始化、内核加载、系统服务和用户环境的启动。下面我将逐步解释这个过程,以帮助您理解其工作原理。每个阶段都依赖于前一个阶段的成功执行。
1. 硬件启动阶段(BIOS/UEFI阶段)
- 当计算机通电时,硬件首先执行自检(Power-On Self-Test, POST),检查CPU、内存、存储设备等基本组件是否正常。
- 接着,系统固件(如传统的BIOS或现代的UEFI)被激活。UEFI是更先进的固件标准,支持更快的启动和安全特性(如Secure Boot)。
- 固件从预定义的启动设备(如硬盘、SSD或USB)中读取引导信息,并加载第一个引导加载程序(boot loader)。如果使用UEFI,它会直接加载EFI应用程序;在BIOS模式下,它会加载主引导记录(MBR)。
2. 引导加载程序阶段(GRUB或类似工具)
- 引导加载程序负责加载Linux内核。最常用的工具是GRUB(GRand Unified Bootloader)。
- GRUB会显示一个菜单(如果有多个操作系统或内核版本),让用户选择启动选项。它读取配置文件(如
/boot/grub/grub.cfg
),其中包含内核位置和启动参数。 - GRUB加载内核映像(通常位于
/boot/vmlinuz-*
)和初始内存盘(initramfs或initrd)。initramfs是一个临时根文件系统,包含启动内核所需的驱动程序和工具(例如,用于访问加密分区或特定硬件)。 - 例如,GRUB的命令行可能包含参数如
$root=/dev/sda1$
,指定根文件系统位置。
3. 内核启动阶段
- Linux内核被加载到内存中,并开始初始化。内核解压缩自身,设置内存管理、中断处理等核心功能。
- 内核挂载initramfs作为临时根文件系统,并执行其中的初始化脚本(如
/init
)。这个阶段加载必要的硬件驱动(如磁盘控制器、网络接口),以便访问真实的根文件系统。 - 一旦驱动加载完毕,内核切换到真正的根文件系统(由GRUB参数指定),并卸载initramfs。
- 内核启动第一个用户空间进程(通常是
/sbin/init
),标志着系统进入用户空间阶段。
4. 初始化系统阶段(systemd或传统init)
- 现代Linux发行版(如Ubuntu、Fedora)使用systemd作为初始化系统;较旧系统可能使用SysV init。
- systemd作为第一个进程(PID 1),负责启动所有系统服务和守护进程。它读取配置文件(如
/etc/systemd/system
),按依赖关系并行启动服务。 - 关键步骤包括:
- 挂载文件系统(如
/etc/fstab
中定义)。 - 启动基础服务(如网络、日志、硬件管理)。
- 执行启动脚本(位于
/etc/rc.d
或类似目录)。
- 挂载文件系统(如
- systemd的目标(target)如
multi-user.target
或graphical.target
定义了系统启动模式(命令行或图形界面)。
5. 用户登录阶段
- 初始化完成后,系统启动登录管理器(如GDM、LightDM)或直接进入命令行登录提示。
- 用户输入凭据后,系统验证身份并启动用户会话(例如,通过PAM模块)。
- 最后,用户环境加载(如桌面环境、bash shell),系统完全可用。
Systemd 常用单元类型表格
单元类型 | 扩展名 | 描述 |
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程问通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中的文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron 的调度任务) |
Snapshot | .snapshot | 用于保存一个 Systemd 的状态,保存了系统当前的运行状态 |
Scope | .scope | 使用 Systemd 的总线接口以编程的方式创建外部进程 |
Scope | .slice | 描述居于 Cgroup 的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组 Systemd 的单元 |
systemctl 控制类型 服务名称
控制类型:
start(启动):运行指定的系统服务程序,实现服务功能。
stop(停止):终止指定的系统服务程序,关闭相应的功能
restart(重启):先退出,再重新运行指定的系统服务程序
reload(重载):不退出服务程序,只是刷新配置。在某些服务中与“restart”控制类型的操作相同
status(查看状态):查看指定的系统服务的运行状态及相关信息
Systemd 的 target与SysVinit 的运行级别
SysVinit 的运行级别 | Systemd 的 target | 说 明 |
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescuc.target | 单用户模式,无须密码验证即可登录系统,多用于系统维护 |
2,4 | multi-user.target | 用户定义/域特定运行级别。默认等同于运行级别3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
查看系统的运行级别:runlevel
举个列:当要重启系统时可以敲命令 systemctl reboot 或 init 6
systemctl 控制选项 服务名称
管理开机自启动服务
第一种 工具ntsysv
按 上 下 方向键选择服务
有 * 号表示开机自启动,没有反之,用 空格键 控制
按 tab 可以移动到确定或取消
第二种 systemctl 控制选项 服务名称
控制选项:
enable:开机自启动
disable:关闭自启动
is-enable:查看自启动状态