dmesg命令是最常用的查看系统启动日志的方式。它可以打印出内核环形缓冲区中的信息,包括系统启动时的内核消息。使用dmesg命令可以查看系统从BIOS加电自检到内核初始化的整个过程。执行dmesg命令后,会看到大量的系统启动信息,包括硬件检测、内核模块加载等。系统出现启动问题,通常可以从dmesg的输出中找到异常信息。
在使用systemd作为init系统的Linux发行版中,可以使用systemd-analyze工具来分析系统启动时间。systemd-analyze可以打印出系统启动时各个服务的启动时间,以及整个启动过程的耗时。
执行systemd-analyze命令可以显示系统从开机到登录提示符的总启动时间。
systemd-analyze
Startup finished in 2.804s (kernel) + 18.595s (userspace) = 21.399s
使用systemd-analyze blame命令可以查看各个服务的启动耗时情况,帮助我们定位启动过程中的瓶颈。
systemd-analyze blame
18.595s network-online.target
11.163s snapd.seeding.service
7.024s ModemManager.service
6.283s dev-disk-by\x2duuid-3de3e4b2\x2d57e1\x2d4d74\x2dbeaa\x2d00580b0b5265.device
5.958s systemd-networkd-wait-online.service
4.837s grub-common.service
4.805s accounts-daemon.service
4.502s systemd-journal-flush.service
3.801s apparmor.service
3.633s upower.service
3.464s systemd-resolved.service
2.572s plymouth-quit-wait.service
systemd引入新的日志管理工具 journalctl,它可以替代传统的syslog日志系统。journalctl命令可以查看系统从开机到当前时间的所有日志信息,包括内核日志和应用程序日志。
执行journalctl -b命令可以查看当前引导的日志信息,而journalctl -b -1则可以查看上一次引导的日志。
journalctl -b
-- Logs begin at Tue 2023-04-11 23:04:55 CST, end at Wed 2023-04-12 10:30:09 CST. --
Apr 12 10:24:34 localhost systemd[1]: Starting Authorization Manager...
Apr 12 10:24:34 localhost polkitd[537]: Started application polkitd
Apr 12 10:24:34 localhost systemd[1]: Started Authorization Manager.
Apr 12 10:24:34 localhost systemd[1]: Starting Load/Save RF Kill Switch Status...
Apr 12 10:24:34 localhost systemd-rfkill[540]: Permanent kernel RFKill switch found on rfkill0
Apr 12 10:24:34 localhost systemd[1]: Started Load/Save RF Kill Switch Status.
journalctl还支持多种过滤选项,比如按时间范围、按服务名称、按日志级别等进行查看。这些选项可以帮助我们快速定位问题。
除上述命令行工具,我们还可以直接查看系统日志文件。在CentOS/RHEL系统中,系统日志文件通常存放在/var/log/messages中,其中包含从系统启动到当前的所有系统日志信息。
在Ubuntu/Debian系统中,可以查看/var/log/syslog文件,它记录系统的各种日志信息。
另外,内核日志信息也可以通过查看/var/log/dmesg文件来获取,它包含从系统启动到当前的内核日志。
除上述介绍的日志,在排查系统启动问题时,我们还可能需要查看其他服务的日志信息,比如:
Linux系统提供多种方式查看系统启动过程中的日志信息,帮助我们更好地理解和分析系统的启动过程,排查启动过程中可能出现的问题。掌握这些日志查看工具对于系统管理和故障排查非常有帮助。