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

Joh*_*ohn 6 freebsd

我之前问过一个关于uname的相关问题,现在想换个角度问,因为下面简单但明显的冲突输出可能意味着很多人没有想到的东西(包括我)。我正在运行 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
Run Code Online (Sandbox Code Playgroud)

上面的内核文件建议运行的内核是 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     root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
Run Code Online (Sandbox Code Playgroud)

所以 dmesg 和 uname 说它是 9.1-RELEASE。

我也做了一个广泛的find / -type f -exec grep -l "9.1-RELEASE" {} \;,但我发现没有可能包含 9.1-RELEASE.

什么可能导致上述冲突,我实际运行的是什么内核?

请注意,我运行 RELEASE 并运行 freebsd-update 进行二进制更新,因此不涉及已编译的内核。而且我在 freebsd-update 后重新启动了多次。并且系统不在监狱等等,只是那台计算机上唯一的系统。

Jan*_*nen 7

我想到的一件事是您的系统会有一个单独的/boot分区,在您执行freebsd-update. 这使得新内核被复制到分/boot区内的目录中/,而不是实际的/boot.

现在,在引导期间,您的引导加载程序被配置为使用实际的/boot,因此旧内核被加载。

  • 确切地。发生的事情是,我使用单独的 /boot/ 分区设置了全盘加密。但是在从 9.1 到 9.2 的一次 freebsd-update 期间,我可能在合并时不小心从 fstab 中删除了 /boot/ 条目,因此最终在加密的 / 中出现了一个伪造的 /boot/。所以现在我只是把那个虚假的 /boot 放在一边,在 fstab 中重新创建 /boot 条目,挂载它,复制最新的 /boot,重新启动。现在 dmesg 和 uname 都运行 9.2-RELEASE-p7。谢谢! (2认同)