启动 Linux
启动 Linux 是指计算机系统上电时 Linux作系统所经历的过程。当您打开设备时,系统引导加载程序会从固定位置加载到主内存中,以启动主作系统。
整个过程包括几个阶段,包括 POST(开机自检)、MBR(主引导记录)、GRUB(GRand Unified Bootloader)、Kernel、Init 进程,最后是用户交互的 GUI 或命令行界面。
在此过程中,将执行重要的系统检查、检测硬件、加载适当的驱动程序、挂载文件系统、启动必要的系统进程,最后向用户显示登录提示。
以下是用于配置 GRUB 引导加载程序选项的 GRUB 配置文件示例:/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
这是引导 Linux 的基本介绍。但是,具体情况可能会因 Linux 发行版和系统的特定配置而异。
🖥️ Linux启动流程就像店铺开张营业
核心步骤比喻:
-
开店前检查 → 自检硬件
-
值班经理到岗 → 加载引导程序
-
核心团队就位 → 加载内核
-
各部门启动 → 初始化系统服务
-
开门迎客 → 显示登录界面
🔄 详细开张流程
1️⃣ 开店前检查(POST自检)
-
动作:检查电源、CPU、内存等硬件是否正常
-
异常处理:蜂鸣报警/屏幕提示错误代码(如内存松动)
2️⃣ 值班经理到岗(GRUB引导)
# GRUB菜单示例:
Ubuntu 22.04
Ubuntu 22.04 (恢复模式)
Windows 11
-
功能:选择要启动的系统或内核版本
-
配置位置:
/boot/grub/grub.cfg
(由/etc/default/grub
生成)
3️⃣ 核心团队就位(内核加载)
-
关键任务:
-
驱动硬件(显卡、磁盘等)
-
挂载根文件系统
-
启动初始化进程(systemd/sysvinit)
-
4️⃣ 各部门启动(系统初始化)
# systemd启动流程
├─1 启动基础服务(udev设备管理)
├─2 挂载文件系统(/etc/fstab)
├─3 启动网络服务
└─4 启动图形界面/GDM登录管理器
5️⃣ 开门迎客(用户登录)
-
登录方式:
-
图形登录:GNOME/KDE登录界面
-
命令行登录:tty1~tty6终端切换(Ctrl+Alt+F1~F6)
-
🛠️ 常见问题处理
💻 GRUB菜单消失?
开机时按住Shift
(BIOS)或反复按Esc
(UEFI)调出菜单
🚧 启动卡在内核加载?
-
在GRUB菜单按
e
编辑启动参数 -
找到
linux
行末尾添加:
systemd.unit=rescue.target # 进入救援模式
📝 修改GRUB配置
sudo nano /etc/default/grub # 修改默认启动项/超时时间等
sudo update-grub # 生成新配置(重要!)
⚙️ GRUB配置参数解析
GRUB_TIMEOUT=5 # 菜单停留5秒
GRUB_CMDLINE_LINUX="quiet" # 静默启动(不显示内核信息)
GRUB_DISABLE_OS_PROBER=false # 允许探测其他系统(双系统必备)
💡 启动优化技巧
-
加速启动:
systemd-analyze blame # 查看各服务启动耗时
sudo systemctl disable 慢服务 # 禁用非必要服务
-
内核调试:
删除quiet splash
参数可查看详细启动过程
最终效果:像观看一场精密协作的舞台剧,每个环节严丝合缝,最终呈现流畅的使用体验! 🎭🚀
日志简介
与其他作系统非常相似,Linux 维护日志以帮助管理员了解系统上发生的情况。这些日志记录了所有内容,包括用户活动、系统错误和内核消息。对于有洞察力的日志消息来说,一个特别重要的时间是在系统启动过程中,此时会加载和初始化关键系统组件。
Linux 中的“引导日志”是指在引导过程中生成的消息和信息。这些日志记录系统引导时发生的所有作和事件,这可能有助于诊断系统问题或了解系统行为。
Linux 使用从 (系统不可用) 到 (调试级别消息) 的各种日志消息级别。在引导过程中,将存储来自系统各个组件(如 kernel、init、services 等)的消息。许多 Linux 发行版使用 systemd logging system,它保存引导过程的日志。emerg
debug
journalctl
可以使用该命令实时查看启动消息。它用于读取和打印内核环缓冲区。或者,可以通过系统的日志记录设置来访问它们,其中通常包括 中的文本文件。dmesg
/var/log
dmesg | less
此命令以不太直接的格式显示引导日志,并能够上下滚动。kernel ring buffer 只有一定的大小,所以一段时间后旧消息会被丢弃。
📜 Linux日志系统就像飞机的黑匣子
核心概念:
-
日志 = 飞行记录(记录系统的一举一动)
-
启动日志 = 起飞关键阶段记录(最易出问题)
-
日志级别 = 事件紧急程度(从"引擎故障"到"例行检查")
🔍 日志查看指南
1️⃣ 查看起飞全过程(启动日志)
journalctl -b # 本次启动日志
journalctl -b -1 # 上次启动日志(适合排查崩溃重启问题)
2️⃣ 机械师专用仪表盘(内核日志)
sudo dmesg -H # 彩色显示内核日志(支持方向键滚动)
# 按q退出查看
3️⃣ 快速故障定位
journalctl -p err -b # 只看本次启动的错误日志
dmesg | grep -i error # 过滤内核错误信息
📂 日志仓库位置
日志类型 | 存储位置 | 查看方式 |
---|---|---|
系统服务日志 | /var/log/syslog | tail -f /var/log/syslog |
认证日志 | /var/log/auth.log | cat /var/log/auth.log |
内核启动日志 | /var/log/kern.log | less /var/log/kern.log |
系统全局日志 | journalctl 统一管理 | journalctl -u 服务名 |
🌰 实战案例:开机黑屏无法进入系统
-
进入恢复模式,查看启动日志:
journalctl -b | grep failed
-
发现报错:
Failed to start Load Kernel Modules
-
排查模块加载问题:
dmesg | grep -i "failed\|error" # 查看内核加载阶段的详细错误
⚙️ 日志级别对照表
级别 | 数值 | 说明 | 类比 |
---|---|---|---|
emerg | 0 | 系统不可用 | 飞机引擎失效 |
alert | 1 | 必须立即采取行动 | 燃油泄漏 |
crit | 2 | 严重情况 | 起落架故障 |
err | 3 | 错误状态 | 导航系统异常 |
warning | 4 | 警告信息 | 燃油不足 |
notice | 5 | 普通但重要的事件 | 进入巡航高度 |
info | 6 | 常规信息 | 安全带指示灯熄灭 |
debug | 7 | 调试级详细信息 | 发动机转速监测 |
💡 高级技巧
-
实时监控日志:
journalctl -f # 像看电影一样实时滚动显示最新日志
-
按时间筛选:
journalctl --since "2023-10-01 09:00:00" --until "2023-10-01 12:00:00"
-
保存内核日志(默认只存内存):
sudo mkdir /var/log/kern_log
echo 'kernel.* /var/log/kern_log/kern.log' | sudo tee -a /etc/rsyslog.d/00-kern.conf
sudo systemctl restart rsyslog
⚠️ 注意事项
-
日志轮转:系统自动压缩旧日志(/var/log/目录下.gz文件)
-
存储占用:定期清理:
sudo journalctl --vacuum-size=200M # 保留最近200MB日志
-
敏感信息:日志可能包含密码等敏感信息,注意保护!
最终效果:像航空工程师分析黑匣子一样,精准定位系统问题根源! 🛠️🔧
引导加载程序
Boot Loader 在启动任何基于 Linux 的系统方面都起着不可或缺的作用。当系统打开时,Boot Loader 负责并将作系统的内核加载到系统的内存中。然后,内核初始化硬件组件并加载必要的驱动程序,然后启动调度程序并执行 init 进程。
通常,Linux 中最常用的两个引导加载程序是 LILO (Linux Loader) 和 GRUB (GRand Unified Bootloader)。GRUB 为现代 Linux 引导设定了标准,提供了丰富的功能,如图形界面、脚本和调试功能。另一方面,LILO 更旧,没有那么多功能,但可以在更广泛的硬件平台上运行。
# This command updates the GRUB bootloader
sudo update-grub
无论使用哪种类型的 Boot Loader,正确理解和配置它们对于维护高效、稳定和安全的作系统都至关重要。如果需要,引导加载程序还允许用户在同一台计算机上的不同作系统之间切换。
🚀 引导加载程序就像机场的航班调度员
核心作用:
引导加载程序是电脑启动的"总指挥",负责协调硬件检测、系统选择,最终把控制权交给操作系统内核。
📋 启动流程三阶段
-
飞机滑行(BIOS/UEFI自检)
-
检查发动机(CPU)、油箱(内存)、导航系统(硬盘)
-
-
调度员就位(GRUB/LILO启动)
-
显示航班列表(多系统菜单)
-
装载乘客(内核)和行李(驱动模块)
-
-
起飞升空(内核接管)
-
启动客舱服务(系统服务)
-
进入自动驾驶(用户界面)
-
🆚 两大调度员对比
GRUB(新一代智能调度) | LILO(传统人工调度) | |
---|---|---|
操作界面 | 图形化菜单 + 主题皮肤 | 纯文本菜单 |
系统支持 | 支持Windows/Mac/Linux多系统 | 仅限Linux系统 |
配置方式 | 动态配置文件(/boot/grub/grub.cfg) | 静态配置需重写MBR |
故障恢复 | 支持命令行调试模式 | 修复较复杂 |
🛠️ GRUB日常管理
1️⃣ 更新航班时刻表(生成新配置)
sudo update-grub # 探测新系统/内核后必须执行!
2️⃣ 修改默认航班(设置默认启动项)
编辑 /etc/default/grub
:
GRUB_DEFAULT=0 # 0表示第一个菜单项,可改为"saved"记忆上次选择
GRUB_TIMEOUT=5 # 菜单停留5秒
sudo update-grub # 改完必须更新!
3️⃣ 紧急迫降(修复GRUB)
适用于系统重装后GRUB丢失:
# 使用Live CD启动后执行
sudo grub-install /dev/sda
sudo update-grub
🌰 实战场景:双系统启动
-
安装Windows后Linux启动项消失:
-
进入Linux安装U盘的Try模式
-
挂载原系统分区 → 重新安装GRUB
-
-
调整启动顺序:
-
在GRUB界面按
E
编辑启动参数 -
临时修改
root=
指向正确分区
-
⚠️ 重要注意事项
风险操作 | 安全措施 |
---|---|
误删GRUB | 常备系统修复U盘 |
错误配置 | 修改前备份/etc/default/grub |
多硬盘环境 | 注意安装GRUB到系统盘(非数据盘) |
💡 高级技巧
-
美化GRUB界面:
使用GRUB主题包或自定义背景图sudo apt install grub2-splashimages # Ubuntu系
-
密码保护:
在/etc/grub.d/40_custom
添加:set superusers="admin" password_pbkdf2 admin grub.pbkdf2.sha512.25000.长密码哈希
最终效果: 像熟练的机场调度员一样,轻松掌控多系统启动,确保每次开机平稳"起飞"! ✈️🛬