我刚刚更新了我的 Gentoo 系统,更新了我的世界,包括 ZFS。除了内核之外的一切。我想我应该先重新启动,然后构建一个新内核。目前,它在内核上运行3.17.8-gentoo-r1。
我的内核受 ZFS 支持。另外,过去我已经能够从 ZFS 0.6.2 更新到 0.6.3。今天,我从说0.6.3到0.6.5.4。
由于除了 /boot 之外的所有内容都在 ZFS 上,因此我无法再启动并陷入半衰期。没有内核恐慌,但文件系统为空。每当我尝试任何 zfs/zpool 操作时,都会收到错误:
# zpool status
internal error: Success
Aborted
尽管这个成功的声明可能很有趣,但我却漂泊不定。
通过名称调用它会产生不同的错误:
# zpool status system
zpool: libzfs_status.c:201: Assertion `nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, &version) == 0' failed.
Aborted
起初我记得 ZFS 检查内核版本以针对该内核进行自身编译。另外,ZFS 是一个模块。所以我已经做了一个make modules
and make modules_install
。我需要重建内核和 initramfs 吗?第二个很烦人,因为 genkernel 有一个错误。但这是可以完成的。
我目前正在使用 Funtoo 的 ZFS 救援 CD chroot 到系统(已安装 ZFS)。仅供参考,同样的错误发生在 chroot 环境中。 “主机”环境的卷没有问题。
我将继续寻找答案。不过,我确实想在这个时候提出这个问题,因为你也许可以减少我搜索的时间。 ZFS 更新的确切过程/顺序尚未得到很好的记录。
PS 它运行在 SystemD 上,如果这很重要的话。我不相信会这样。
答案1
嗯,确实是我不期待的部分。所有模块都更新了,只有一处没有更新。当我更新了 initrd 文件后,她就正常启动了。
所以这个过程是:
- (可选)根文件系统快照。
- 出现 ZFS 更新。
- 如果您使用 initramfs,请更新/重建它以获取新模块。
- 重新加载内核模块。如果您的 root-fs 是 ZFS,则意味着您需要重新启动。如果不是,重新启动仍然是最简单的。
现在,如果您还需要更新内核,我建议您在更新 ZFS 后进行更新。这意味着你要重复某些事情,但对我来说,这比想知道这是否是一个新选择要好。
更新内核后,在生成内核映像之后、生成 initrd 文件之前,执行 操作emerge -va @module-rebuild
,这将为新内核创建模块。将隐藏在 initrd 文件中的模块。
就是这样了。我只是希望那里有文档......
在此过程中,我也发现 Genkernel-Next 不喜欢压缩模块,所以我不得不停用该功能。用 LZ4 压缩内核工作得很好,但是当我对 InitRD 做同样的事情时,她就惊慌了。
因此 Genkernel 创建了 12 个不同的 InitRD 文件,我必须手动打开这些文件来更改一行,否则它将无法工作。但现在可以了。在 4.1.15 上运行。 ZFS 性能的提升是显而易见的。在删除所有旧的之前,我会让它运行一段时间。
现在,如果有人可以告诉我是否可以升级池功能而不变得无法启动,我将不胜感激。