Linux系统启动速度非常快,大多数输出滚动速度太快,无法读取发送到控制台的文本(显示正在启动的服务)。 因此,观察引导问题/错误对我们来说是一个挑战。
在本文中,我们将简要介绍一下Linux系统启动过程中的不同阶段,然后学习如何建立和了解引导问题的底层:根据文件来查看或命令查看系统引导消息。
Linux引导过程摘要
总而言之,一旦我们按下电源开关按钮, BIOS ( 基本输入输出系统 )集成在主板上的程序执行POST ( 开机自检 ) - 其中硬件如磁盘,RAM(随机存取存储器),键盘,扫描。 如果发生错误(缺少/出现故障的硬件),则会在屏幕上报告。
在POST期间, BIOS还会查找引导设备,从中进行统计的磁盘(通常是第一个硬盘,但是我们可以将其配置为DVD,USB,网卡等)。
然后,系统将连接到磁盘并搜索存储引导加载程序(大小为446字节)的主引导记录 (大小为512字节),其余的空间存储有关磁盘分区(最多四个)和MBR的信息本身。
建议阅读: 4最好的Linux引导加载程序
引导加载程序将标识并指向,并加载内核和initrd文件(初始化RAM磁盘 - 提供内核访问安装的根文件系统和/ lib目录中存储的模块/驱动程序),这些文件通常存储在/ boot目录下的文件系统。
在加载内核之后,它会执行init(或者在更新的Linux发行版上使用systemd),这是PID 1的第一个进程,后者又会启动系统上的所有其他进程。 它也是在系统关闭时执行的最后一个进程。
如何找出Linux引导问题或错误消息
如前所述,Linux引导过程发生迅速,甚至无法清楚地读出发送到控制台的大部分输出。
因此,请注意引导问题/错误调用,让系统管理员结合特定命令查看某些重要文件。 其中包括:
/var/log/boot.log - 记录系统引导消息
这可能是您想查看的第一个文件,以查看在系统引导期间展开的所有文件。
在启动过程中,不要太努力地按照屏幕上的输出,我们可以在引导过程完成后查看此文件,以帮助我们确定和解决引导问题/错误。
我们为此目的使用cat命令如下(下面是这个文件的示例):
# cat /var/log/boot.log
[ OK ] Started Load/Save RF Kill Switch Status. [ TIME ] Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.device. [DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615. [DEPEND] Dependency failed for Swap. [ OK ] Reached target System Initialization. [ OK ] Listening on UUID daemon activation socket. [ OK ] Started Daily Cleanup of Temporary Directories. [ OK ] Listening on CUPS Scheduler. [ OK ] Started Daily apt activities. [ OK ] Reached target Timers. [ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket. [ OK ] Started ACPI Events Check. [ OK ] Started Trigger resolvconf update for networkd DNS. [ OK ] Started CUPS Scheduler. [ OK ] Reached target Paths. [ OK ] Listening on D-Bus System Message Bus Socket. [ OK ] Listening on ACPID Listen Socket. Starting Console System Startup Logging... [ OK ] Listening on Cockpit Web Service Socket. [ OK ] Reached target Sockets. [ OK ] Reached target Basic System. Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"... [ OK ] Started ACPI event daemon. [ OK ] Started mintsystem.service. Starting Detect the available GPUs and deal with any system changes... Starting LSB: daemon to balance interrupts for SMP systems... Starting Bluetooth service... [ OK ] Started ClamAV virus database updater. Starting LSB: Starts syslogd... [ OK ] Started Regular background program processing daemon. Starting Modem Manager... Starting Accounts Service... ......
从上面的输出,我们可以看到有一个引导问题由下面的行表示。
[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615. [DEPEND] Dependency failed for Swap.
问题 :交换分区问题 系统无法读取交换文件/设备/分区,或者它不存在。
我们来检查系统是否使用带空闲命令的交换空间。
# free total used free shared buff/cache available Mem: 3742792 2421060 433696 287376 888036 967000 Swap: 0 0 0
或者,我们可以运行swapon命令查看系统交换空间使用情况汇总(我们不会得到任何输出)。
# swapon -s
注意 :该文件的内容在系统关闭时被清除:新的数据存储在新的引导中。
/ var / log / messages - 常规系统日志
此文件存储常规系统消息,包括在系统引导期间记录的消息。
要查看它,请键入:
# cat /var/log/messages
Jun 4 13:04:44 youcl syslogd (GNU inetutils 1.9.4): restart Jun 4 13:19:55 youcl -- MARK -- Jun 4 13:39:55 youcl -- MARK -- Jun 4 13:59:55 youcl -- MARK -- Jun 4 14:19:55 youcl -- MARK -- Jun 4 14:20:17 youcl vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jun 4 14:20:17 youcl vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jun 4 14:20:17 youcl vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jun 4 14:20:17 youcl vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jun 4 14:20:17 youcl vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment Jun 4 14:20:17 youcl vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref] .....
因为这个文件可能比较冗长,所以我们可以在页面中使用更多的命令 (甚至显示百分比)来查看它。
# more /var/log/messages
与以前的文件不同, / var / log / messages的内容不会被关闭,因为它不仅包含引导消息,还包含有关其他系统活动的消息。 因此,较旧的文件被压缩并保存在系统上以供以后检查,如下所示。
# ls -l message* -rw-r--r-- 1 root root 1206127 Jun 10 14:20 messages -rw-r--r-- 1 root root 1419494 Jun 4 13:00 messages.1 -rw-r--r-- 1 root root 153011 May 28 09:30 messages.2.gz
dmesg - 显示内核消息
引导过程完成后, dmesg命令可以显示操作,如传递给内核的命令行选项; 检测到硬件组件,添加新USB设备时出现的事件,或NIC(网络接口卡)故障等故障,并且驱动程序报告没有在网络上检测到链接活动等等。
# dmesg
[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 4.4.0-21-generic ([email protected]) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers' [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. [ 0.000000] x86/fpu: Using 'eager' FPU context switches. [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable [ 0.000000] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable [ 0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable [ 0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable [ 0.000000] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable [ 0.000000] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20 [ 0.000000] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS ....
journalctl - 系统日志的查询内容
这在使用systemd:最新的系统和服务管理器的大多数当前Linux发行版中非常有用。 在其下,系统日志记录是通过日志组件完成的 - 这是对不同组件记录的所有消息的集中位置。
这些消息包括内核和引导消息; 来自syslog或各种服务的邮件。 我们可以使用它来查看引导消息并通过读取输出并识别感兴趣的行来建立引导问题(根据终端文本颜色设置,红线指出的错误)。
# journalctl
Jun 13 16:35:32 youcl mtp-probe[963]: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/u Jun 13 16:35:32 youcl mtp-probe[963]: bus: 2, device: 5 was not an MTP device Jun 13 16:35:54 youcl systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615. Jun 13 16:35:54 youcl systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d Jun 13 16:35:54 youcl systemd[1]: Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c2 Jun 13 16:35:54 youcl systemd[1]: Dependency failed for Swap. Jun 13 16:35:54 youcl systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'. Jun 13 16:35:54 youcl systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615. Jun 13 16:35:54 youcl systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615. Jun 13 16:35:54 youcl systemd[1]: Reached target System Initialization. Jun 13 16:35:54 youcl systemd[1]: Started ACPI Events Check. Jun 13 16:35:54 youcl systemd[1]: Listening on CUPS Scheduler. Jun 13 16:35:54 youcl systemd[1]: Starting Console System Startup Logging... Jun 13 16:35:54 youcl systemd[1]: Started Daily Cleanup of Temporary Directories.
以上是通过查看/var/log/boot.log已经识别的错误的命令输出示例 :交换分区错误。 要查看更多输出行,只需按[Enter]按钮。
还要查看有关Linux系统引导和服务管理的常见系统和服务管理器的有用指南:
- RHEL 7中的进程管理:启动,关闭和之间的一切
- 管理系统启动过程和服务(SysVinit,Systemd和Upstart)
- 'init'和'systemd'背后的故事:为什么'init'需要替换为'systemd'
在本文中,我们简要介绍了Linux系统引导过程的不同阶段,并了解了如何建立和可能解决引导问题。 要向本指南添加任何想法,请使用下面的注释表单。