1. 启动日志概述
各位同学好,我是老张。今天咱们聊聊启动日志。
说实话,我干了十几年运维,最怕听到的一句话就是:「服务器起不来了」。每次听到这个,我第一反应就是——看日志。启动日志,说白了就是系统从按下电源键到完全跑起来,这期间发生的所有事情的记录。
什么是启动日志
启动日志,就是系统在启动过程中产生的所有日志信息。它记录了从硬件自检、引导加载、内核初始化,到服务启动、用户登录的完整过程。
我习惯把它比作「系统的出生证明」。你想想看,一个婴儿出生时,医生会记录体重、身长、时间、有没有异常。系统也一样,它「出生」的时候,每一步都会留下记录。
这些记录包括:
- 硬件是否被正确识别
- 驱动有没有加载成功
- 文件系统是否挂载正常
- 关键服务有没有启动
- 网络配置是否生效
我在项目中遇到过一台服务器,每次重启后网络就断。查了半天,最后发现是启动日志里有一条「network service failed to start」的警告。嗯,就是这条不起眼的日志,帮我们定位到了网卡驱动的兼容性问题。
启动日志的重要性
为什么我要花一整章来讲启动日志?因为它真的太重要了。
第一,它是故障定位的第一手资料。 系统起不来,你总得知道卡在哪一步吧?是硬件没认?是内核崩了?还是某个服务挂了?启动日志会告诉你答案。
第二,它是性能分析的依据。 系统启动慢,到底慢在哪?是磁盘I/O瓶颈?是某个服务启动耗时太长?启动日志里每个步骤的时间戳,就是最好的分析素材。
第三,它是安全审计的线索。 有没有人非法登录?有没有异常进程被拉起?这些在启动日志里都可能留下痕迹。
核心观点: 启动日志是系统健康状态的「晴雨表」。一个经验丰富的运维,光看启动日志就能判断出系统八成的问题。
我曾经处理过一个案例:某天凌晨3点,线上服务器集体重启。所有人都以为是黑客攻击,结果我翻看启动日志,发现所有服务器都在同一时间点触发了「kernel panic」。再往下查,原来是内核热补丁出了问题。如果没有启动日志,这个锅可能就甩给安全团队了。
常见的启动日志类型
启动日志不是单一的文件,它分散在不同的地方。我整理了一下,主要有这么几类:
| 日志类型 | 存储位置 | 记录内容 | 查看命令 |
|---|---|---|---|
| 内核日志 | /var/log/kern.log |
内核启动信息、驱动加载、硬件检测 | dmesg |
| 系统日志 | /var/log/messages |
系统服务启动、用户登录、计划任务 | tail -f /var/log/messages |
| 引导日志 | /var/log/boot.log |
系统引导过程、服务启动状态 | cat /var/log/boot.log |
| GRUB日志 | 内存中(需配置持久化) | 引导加载器阶段的信息 | journalctl -k |
| systemd日志 | /var/log/journal/ |
systemd管理的所有服务启动记录 | journalctl -b |
这里我重点说一下:
1. 内核日志(dmesg)
这是我最常看的。系统启动时,内核会输出大量信息,包括CPU型号、内存大小、磁盘分区、网卡信息等。说白了,就是系统在说「我看到了什么硬件」。
# 查看本次启动的内核日志
dmesg | less
# 只看错误和警告
dmesg | grep -iE "error|fail|warn"
# 查看内存信息
dmesg | grep -i memory
小技巧: 我个人习惯用 dmesg -T 把时间戳转成人类可读的格式。不然那一串数字,看着就头疼。
2. 系统日志(messages)
这个文件记录了系统启动后的各种事件。服务启动、用户登录、网络连接……基本上系统层面的操作都会在这里留下记录。
我曾经遇到一个问题:服务器启动后,SSH服务总是无法连接。查了messages日志,发现有一条「sshd: connection refused」的记录。再往前翻,看到「firewalld started successfully」——原来是防火墙默认规则把SSH端口给封了。
3. 引导日志(boot.log)
这个文件记录了系统引导过程中,各个服务的启动状态。每个服务是「OK」还是「FAILED」,一目了然。
# 查看本次启动的服务状态
cat /var/log/boot.log
# 只看失败的服务
grep "FAILED" /var/log/boot.log
4. systemd日志(journalctl)
现在大多数Linux发行版都用systemd了。它把启动日志管理得更加精细。你可以按启动次数查看,也可以按服务名过滤。
# 查看本次启动的所有日志
journalctl -b
# 查看上一次启动的日志
journalctl -b -1
# 只看某个服务的启动日志
journalctl -u nginx.service
# 查看启动耗时
systemd-analyze blame
注意: systemd日志默认是持久化到磁盘的。如果你发现 journalctl 只能看到本次启动的日志,八成是 /var/log/journal 目录没创建。执行 mkdir -p /var/log/journal 然后重启journald服务即可。
小结
启动日志,说白了就是系统「从生到死」的记录。你想想看,系统每次启动都是一次「新生」,而日志就是它的「病历本」。学会看启动日志,你就掌握了系统故障定位的第一把钥匙。
下一章,我会带大家深入分析启动流程的每个阶段,看看日志里到底藏了哪些秘密。