1. 运行dmesg,查看是否每个输出行都有[0.1234]这样形式的时间戳。重启,从你的系统console中断GRUB并添加选项apic=debug到kernel行。继续启动,启动完毕后,登录并且查看dmesg是否有不一样的地方。里面是否有更多的apic输出?使用https://wiki.centos.org/HowTos/Grub2或者其它合适的发行版,做一个定制的GRUB记录和你当前内核的记录一样,但是有以下的不同:
- 标题为Custom Linux Boot Entry Experiment.
- 添加内核命令行选项initcall_debug到内核行的末尾。
- 对于你的发行版,确定所使用的grub.cfg,然后用grub2-mkconfig做一个新的。比如grub2-mkconfig -o /boot/grub/grub.cfg。
- 重启,选择新的GRUB记录,重启之后,查看/proc/cmdline是否包含initcall_debug。
不一样的地方:
flow the steps in https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/system_administrators_guide/index#sec-Changing_the_Default_Boot_Entry
2. 中断GRUB,选择原来的kernel entry。在vmlinux行的末尾,添加init=/bin/bash然后boot。发生了什么?重启电源并再次中断GRUB,这一次添加rdinit=/bin/sh并boot。发生了什么?
重置你的系统到完全的Linux环境下面
3. init是一个链接吗?你的系统有一个叫做init的程序吗?PID1运行init吗?
4. 从定制init启动
5. 用pstree,你能确定哪些进程是PID1的后代吗?