我问了一个相关问题尤纳姆之前和现在想从另一个角度问一下,因为以下简单但明显相互矛盾的输出可能意味着有许多人没有想到的事情(包括我在内)。我正在运行 FreeBSD 9 RELEASE;请参阅以下命令:
# sysctl kern.bootfile
kern.bootfile: /boot/kernel/kernel
# strings /boot/kernel/kernel |grep RELEASE|grep 9
@(#)FreeBSD 9.2-RELEASE-p7 #0: Tue Jun 3 11:05:13 UTC 2014
FreeBSD 9.2-RELEASE-p7 #0: Tue Jun 3 11:05:13 UTC 2014
9.2-RELEASE-p7
上面的内核文件表明正在运行的内核是 9.2-RELEASE-p7。但是...
# dmesg
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012
...
# uname -a
FreeBSD localhost.localdomain 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
因此 dmesg 和 uname 显示它是 9.1-RELEASE。
我也做了广泛的研究find / -type f -exec grep -l "9.1-RELEASE" {} \;
,但没有找到包含 9.1-RELEASE 的内核文件。
什么可能导致上述冲突?我实际上正在运行什么内核?
请注意,我运行了 RELEASE 并运行了 freebsd-update 来执行二进制更新,因此不涉及编译的内核。而且我在 freebsd-update 之后重新启动了多次。而且系统没有被关在监狱里等,只是那台电脑上唯一的系统。
答案1
我想到的是,你的系统会有一个单独的/boot
分区,当你执行 时,这个分区不知怎么就被卸载了freebsd-update
。这使得新内核被复制到分区内的/boot
目录中/
,而不是实际的/boot
。
现在,在启动期间,您的引导加载程序被配置为使用实际的/boot
,因此旧内核被加载。
答案2
您可能已将系统从 9.1 升级到 9.2,但无法重新启动。
您可能还只是启动了以前的内核,但根据您所显示的输出,这种情况似乎不太可能。
我想到另一种可能性,即系统实际上是在 jail 内,在 9.1 系统上运行,因此虽然 jail 升级到 9.2,但主机系统仍在运行 9.1。