关于在FreeBSD中运行内核版本的信息有冲突

我之前问了一个关于uname的相关问题,现在想从另外一个angular度来问,因为下面这个简单而明显的相互冲突的输出可能意味着有许多人没有想到的东西(包括我在内)。 我正在运行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 

上面的内核文件build议运行的内核是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之后我重新启动了多次。 而系统不在监狱等,只是该电脑上唯一的系统。

我想到的一件事是你的系统将有一个单独的/boot分区,当你执行freebsd-update时候,它不知何故被卸载。 这使得新的内核被复制到/分区内的/ /boot目录,而不是实际的/boot

现在,在引导期间,您的引导加载程序被configuration为使用实际的/boot ,所以旧的内核被加载。

您可能已将系统从9.1升级到9.2,但未能重新启动。

你可能也只是启动了一个以前的内核,但是给出了你所显示的输出,这似乎不太可能。

还有另外一种可能性,那就是系统实际上是在一个监狱里面运行在一个9.1系统上的,所以当监狱升级到9.2时,主机系统仍在运行9.1。