OpenEuler 24.03作为基于Linux内核的企业级操作系统,其启动流程从硬件初始化开始。当计算机通电后,固件(BIOS或UEFI)首先执行加电自检(POST),检测CPU、内存、存储设备等硬件组件的状态。POST过程中,固件会初始化硬件并加载启动管理器。
在传统BIOS模式下,系统从主引导记录(MBR)加载引导程序;而在UEFI模式下,会从EFI系统分区(ESP)读取引导加载程序。OpenEuler 24.03同时支持两种引导模式,推荐使用UEFI以获得更好的安全性和性能。
关键概念解析:
/boot/efi
目录。OpenEuler 24.03默认使用GRUB2(GNU GRand Unified Bootloader 2)作为引导程序,相比传统GRUB具有更强大的功能和扩展性。GRUB2的配置文件位于/etc/grub2.cfg
,该文件由grub2-mkconfig
命令自动生成,整合了/etc/grub.d/
目录下的各个配置片段。
GRUB2启动流程:
/boot/grub2/grub.cfg
配置文件,显示启动菜单。GRUB2常用操作(OpenEuler 24.03):
# 查看GRUB2配置文件
cat /etc/grub2.cfg
# 重新生成GRUB2配置(修改内核参数后需执行)
grub2-mkconfig -o /etc/grub2.cfg
# 查看可用的启动项
grub2-editenv list
# UEFI模式下更新引导加载程序
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=openEuler
GRUB2加载内核映像(/boot/vmlinuz-
)和初始内存磁盘(/boot/initramfs-
)到内存。内核映像包含压缩的内核代码,而initramfs包含早期启动所需的驱动和工具。
内核启动参数解析:
OpenEuler 24.03的内核启动参数可通过/proc/cmdline
查看,常见参数包括:
root=/dev/mapper/
:指定根文件系统位置ro
:以只读方式挂载根文件系统crashkernel=auto
:预留内核崩溃转储空间rd.lvm.lv=
:指定LVM逻辑卷quiet
:静默启动,仅显示关键信息案例:查看内核启动参数
cat /proc/cmdline
# 输出示例:ro root=/dev/mapper/openeuler-root rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap rhgb quiet
与原文档中的Upstart不同,OpenEuler 24.03采用systemd作为初始化系统(init system),它是一个系统和服务管理器,负责启动用户空间服务,是所有进程的父进程(PID 1)。
systemd核心概念:
multi-user.target
:多用户文本界面(对应运行级别3)graphical.target
:图形界面(对应运行级别5)rescue.target
:救援模式systemd常用命令(OpenEuler 24.03):
# 查看systemd版本
systemctl --version
# 查看所有单元状态(过滤活跃服务)
systemctl list-units --type=service --state=active
# 查看系统启动时间
systemd-analyze
# 启动/停止/重启服务
systemctl start network.service
systemctl stop firewalld.service
systemctl restart sshd.service
# 设置服务开机自启
systemctl enable httpd.service
systemctl disable nfs.service
# 查看服务日志
journalctl -u httpd.service
# 切换运行目标
systemctl isolate multi-user.target # 切换到多用户模式
systemctl isolate graphical.target # 切换到图形模式
systemd根据目标(Target)启动相应的服务单元,初始化过程涉及以下关键步骤:
1. 挂载文件系统
/etc/fstab
文件,挂载本地和网络文件系统noauto
选项的文件系统2. 启动基础服务
3. 执行本地初始化脚本
OpenEuler 24.03在/etc/rc.d/rc.local
中保留了传统初始化脚本的兼容性,该脚本会在系统启动最后阶段执行。用户可在此添加自定义启动命令。
案例:查看文件系统挂载情况
mount
# 输出示例:
# /dev/mapper/openeuler-root on / type xfs (rw,relatime,attr2,inode64,noquota)
# devtmpfs on /dev type devtmpfs (rw,nosuid,size=1629036k,nr_inodes=407259,mode=755)
# tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
系统初始化完成后,会启动登录服务(如getty),等待用户输入凭据。OpenEuler 24.03支持多种登录方式:
1. 命令行登录
tty1-tty6
终端启动/etc/passwd
和/etc/shadow
).bash_profile
、.bashrc
等)2. 图形界面登录
3. 远程登录
环境变量加载顺序:
/etc/profile
、/etc/bashrc
~/.bash_profile
、~/.bashrc
案例:查看当前用户环境变量
env | sort
# 输出示例:
# HOME=/root
# LANG=en_US.UTF-8
# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# PWD=/root
# SHELL=/bin/bash
# USER=root
dmesg命令用于显示内核环形缓冲区(ring buffer)中的启动信息,这些信息由内核在启动过程中输出,包括硬件检测、驱动加载等关键日志。OpenEuler 24.03中,dmesg的输出与传统Linux系统类似,但支持更丰富的过滤和格式化选项。
dmesg常用选项:
-c
:显示信息后清除环形缓冲区-k
:仅显示内核日志-t
:显示时戳-T
:使用人类可读的时间格式-p
:过滤指定日志级别(0-7,0为紧急,7为调试)--color
:使用颜色标记不同日志级别案例1:查看完整启动日志
dmesg
# 输出片段:
# [ 0.000000] Linux version 5.10.0-190.32.1.openeuler24.03.x86_64 ([email protected]) (gcc (GCC) 10.3.0, GNU ld (GNU Binutils) 2.35.2) #1 SMP Fri Jun 9 15:30:21 UTC 2023
# [ 0.000000] Command line: ro root=/dev/mapper/openeuler-root rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap rhgb quiet
# [ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
# [ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
# [ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
案例2:查看带时间戳的日志
dmesg -T
# 输出示例:
# [Sun Jun 16 08:30:21 2024] Linux version 5.10.0-190.32.1.openeuler24.03.x86_64...
# [Sun Jun 16 08:30:22 2024] systemd[1]: Starting System Logging Service...
案例3:过滤网络相关日志
dmesg | grep -i network
# 输出示例:
# [ 2.345678] e1000: eth0: Intel(R) PRO/1000 Network Connection
# [ 2.567890] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
OpenEuler 24.03使用systemd-journald作为系统日志服务,通过journalctl命令可查看包括启动日志在内的所有系统日志,相比dmesg具有更强大的过滤和查询功能。
journalctl常用选项:
-b
:查看当前启动的日志-b -1
:查看前一次启动的日志-u
:查看指定单元的日志--since "2024-06-01 00:00:00"
:查看指定时间之后的日志--until "2024-06-01 12:00:00"
:查看指定时间之前的日志-p
:过滤日志级别(0-7,同dmesg)-f
:实时跟踪日志输出案例1:查看当前启动的所有日志
journalctl -b
案例2:查看systemd启动过程
journalctl -u systemd --no-pager
# 输出示例:
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Starting System and Service Manager...
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Initializing machine ID from random generator.
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Set hostname to .
案例3:实时跟踪网络服务日志
journalctl -u network.service -f
在传统BIOS引导模式下,OpenEuler 24.03的磁盘主引导扇区(MBR)结构与标准Linux系统一致,包含以下四个部分:
MBR结构表:
偏移地址 | 长度(字节) | 内容描述 |
---|---|---|
0x0000 | 446 | 主引导程序 |
0x01BE | 64 | 分区表(4个分区项) |
0x01FE | 2 | 结束标志(0x55AA) |
案例1:备份MBR到文件
# 备份整个MBR(512字节)
dd if=/dev/sda of=/root/mbr.backup bs=512 count=1
# 解释:
# if=/dev/sda:输入设备为第一个磁盘
# of=/root/mbr.backup:输出文件路径
# bs=512:块大小512字节
# count=1:仅读取1块
# 恢复MBR(危险操作,谨慎使用)
dd if=/root/mbr.backup of=/dev/sda bs=512 count=1
案例2:查看MBR十六进制内容
# 使用hexdump命令查看MBR前64字节
hexdump -C /dev/sda | head -n 16
# 输出示例:
# 00000000 eb 3c 90 4d 53 44 4f 53 35 2e 30 00 02 01 01 00 |.<.MSDOS5.0......|
# 00000010 02 e0 00 40 0b f0 09 00 12 00 02 00 00 00 00 00 |...@............|
# 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# ...(省略中间内容)
# 000001be 80 01 01 00 02 e0 00 40 0b f0 09 00 12 00 02 00 |.........@......|
# 000001ce 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 000001de 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 000001ee 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
OpenEuler 24.03在UEFI模式下使用GPT(GUID分区表),相比MBR具有以下优势:
GPT磁盘的引导信息存储在EFI系统分区(ESP),通常为FAT32格式,位于/boot/efi
目录。UEFI引导程序(如grubx64.efi
)存储在ESP中,由UEFI固件直接加载。
查看GPT分区表:
# 使用gdisk工具查看GPT分区
gdisk -l /dev/sda
# 输出示例:
# GPT fdisk (gdisk) version 1.0.5
#
# Partition table scan:
# MBR: protective
# BSD: not present
# APM: not present
# GPT: present
#
# Found valid GPT with protective MBR; using GPT.
# Disk /dev/sda: 209715200 sectors, 100.0 GiB
# Sector size (logical/physical): 512/512 bytes
# Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# Partition table holds up to 128 entries
# Main partition table begins at sector 2 and ends at sector 33
# First usable sector is 34, last usable sector is 209715166
# Partitions will be aligned on 2048-sector boundaries
# Total free space is 2048 sectors (1.0 MiB)
#
# Number Start (sector) End (sector) Size Code Name
# 1 2048 4194303 2.0 GiB EF00 EFI System
# 2 4194304 4398591 100.0 MiB 8200 Linux swap
# 3 4398592 209713151 98.0 GiB 8300 Linux filesystem
OpenEuler 24.03采用systemd作为初始化系统,替代了传统的sysvinit和Upstart,主要优势包括:
特性 | systemd | sysvinit | Upstart |
---|---|---|---|
启动模式 | 并行启动,依赖关系管理 | 串行启动 | 事件驱动,部分并行 |
单元类型 | 服务、套接字、设备等多种类型 | 仅服务 | 作业(Job) |
启动速度 | 极快(毫秒级启动) | 慢 | 较快 |
依赖管理 | 显式定义依赖关系 | 无依赖管理 | 事件触发 |
日志系统 | 统一日志(journald) | 分散日志 | 分散日志 |
systemd单元配置文件位于/usr/lib/systemd/system/
和/etc/systemd/system/
目录,后者优先级高于前者。用户可通过修改或创建配置文件来自定义服务行为。
单元文件结构:
[Unit]
Description=HTTP Server
After=network.target remote-fs.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/sbin/httpd -DFOREGROUND
ExecReload=/usr/sbin/httpd -k graceful
ExecStop=/usr/sbin/httpd -k stop
Restart=on-failure
User=apache
Group=apache
EnvironmentFile=/etc/sysconfig/httpd
[Install]
WantedBy=multi-user.target
关键段说明:
systemd使用目标(Target)替代传统运行级别,常见目标如下:
目标名称 | 等价运行级别 | 说明 |
---|---|---|
default.target | 5 | 默认目标,通常为图形界面 |
multi-user.target | 3 | 多用户文本界面 |
graphical.target | 5 | 图形界面 |
rescue.target | 1 | 救援模式 |
emergency.target | 0 | 紧急模式(单用户) |
shutdown.target | 6 | 关机 |
reboot.target | 6 | 重启 |
案例:查看当前目标
systemctl get-default
# 输出示例:graphical.target
案例:切换到多用户模式
systemctl isolate multi-user.target
# 或
systemctl set-default multi-user.target
OpenEuler 24.03的系统级环境配置文件位于/etc/
目录,对所有用户生效,加载顺序如下:
/etc/profile.d/
下的脚本。/etc/profile关键内容解析:
# 定义PATH环境变量
PATH=$PATH:$HOME/bin
export PATH
# 加载语言环境
if [ -f /etc/locale.conf ]; then
. /etc/locale.conf
elif [ -z "$LANG" -a -f /etc/default/locale ]; then
. /etc/default/locale
if [ -z "$LANG" ]; then
LANG=en_US.UTF-8
fi
fi
export LANG
# 调用profile.d目录下的脚本
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
每个用户的家目录下包含以下环境配置文件,仅对当前用户生效:
~/.bashrc
。~/.bash_profile示例:
# 加载bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 设置个人PATH
PATH=$PATH:$HOME/bin
export PATH
# 设置Java环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
使环境变量立即生效:
# 重新加载系统profile
source /etc/profile
# 重新加载用户profile
source ~/.bash_profile
调试环境变量加载:
# 启动bash时显示所有执行的脚本
bash -x
# 查看环境变量加载顺序
env | sort
systemd提供了强大的启动时间分析工具,可帮助定位启动瓶颈:
案例1:查看总体启动时间
systemd-analyze
# 输出示例:
# Startup finished in 1.234s (kernel) + 3.456s (userspace) = 4.690s
# graphical.target reached after 3.210s in userspace
案例2:查看各单元启动耗时
systemd-analyze blame
# 输出示例:
# 1.234s network.service
# 0.876s sshd.service
# 0.543s firewalld.service
# 0.321s chronyd.service
案例3:生成启动时间可视化图表
systemd-analyze plot > boot-time.svg
# 在浏览器中打开boot-time.svg查看可视化图表
通过禁用不必要的服务可显著加快启动速度:
案例:禁用不常用服务
# 查看所有开机自启服务
systemctl list-unit-files --state=enabled | grep .service
# 禁用DNS缓存服务(如无需本地DNS)
systemctl disable systemd-resolved.service
# 禁用蓝牙服务(如无蓝牙设备)
systemctl disable bluetooth.service
# 禁用打印服务(如无打印机)
systemctl disable cups.service
修改/etc/default/grub
中的内核参数可优化启动过程:
案例:优化grub配置
# 编辑grub配置
vi /etc/default/grub
# 优化参数示例(添加到GRUB_CMDLINE_LINUX行)
GRUB_CMDLINE_LINUX="rhgb quiet elevator=deadline numa=off"
# 重新生成grub配置
grub2-mkconfig -o /etc/grub2.cfg
OpenEuler 24.03的启动与引导流程融合了现代Linux系统的最佳实践,从BIOS/UEFI自检到systemd初始化,每个环节都经过精心设计以确保稳定性和性能。通过深入理解启动流程和掌握systemd管理工具,系统管理员可更好地维护和优化OpenEuler系统,实现快速启动和稳定运行。
(如无蓝牙设备)
systemctl disable bluetooth.service
systemctl disable cups.service
### 3. 内核参数优化
修改`/etc/default/grub`中的内核参数可优化启动过程:
**案例:优化grub配置**
```bash
# 编辑grub配置
vi /etc/default/grub
# 优化参数示例(添加到GRUB_CMDLINE_LINUX行)
GRUB_CMDLINE_LINUX="rhgb quiet elevator=deadline numa=off"
# 重新生成grub配置
grub2-mkconfig -o /etc/grub2.cfg
OpenEuler 24.03的启动与引导流程融合了现代Linux系统的最佳实践,从BIOS/UEFI自检到systemd初始化,每个环节都经过精心设计以确保稳定性和性能。通过深入理解启动流程和掌握systemd管理工具,系统管理员可更好地维护和优化OpenEuler系统,实现快速启动和稳定运行。
在日常管理中,熟练使用systemctl
、journalctl
等工具进行服务管理和日志分析,结合环境配置文件的合理设置,能够有效提升系统管理效率,为企业应用提供坚实的底层平台支持。