ZFS 不允许我跟踪内核更新

ZFS 不允许我跟踪内核更新

我在六月的某个时候安装了 ubuntu 20.04。

现在我已更新至 ubuntu 20.04.1 LTS

已经有几个内核更新。每次我运行更新时,Zsys 都会尝试将新内核版本作为第一个选项。

我只想使用新的内核。

但它们根本无法启动。

当我说无法启动时,我的意思是在启动过程中发生了某种冻结,我无法进入 TTY/boot 命令行,也没有收到任何错误消息(也许我没有按正确的键)

我只有我的主板徽标,仅此而已。

ubuntu 徽标和旋转器不会出现,如果我什么都不做,它可能会一直保持这种状态。

幸运的是我仍然有我的旧 grub 条目,并且使用 grub 定制器我一直将它保持在列表顶部。

但是我想现在就解决这个问题,以免 ubuntu 认为我储存旧内核太久了。

我应该做些什么特别的事情来使用 ZFS 启动新内核吗?

我猜测这与特定的内核版本无关,而与 zfs 有关,因为它是一个尚未与操作系统其余部分紧密联系在一起的块。并且 ubuntu 能够在其他地方自动更新内核引用,但它还不能自动更新 ZFS 内部指向内核版本的变量,或者类似的东西?

我不知道。

无论如何 :

t@tsu:~$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+'
ii  linux-image-5.4.0-40-generic                                5.4.0-40.44                                                 amd64        Signed kernel image generic
ii  linux-image-5.4.0-45-generic                                5.4.0-45.49                                                 amd64        Signed kernel image generic
ii  linux-image-5.4.0-47-generic                                5.4.0-47.51                                                 amd64        Signed kernel image generic

5.4.0-40 启动,是我安装的 ubuntu 20.04

5.4.0-45 无法启动,不是我通过更新安装的

5.4.0-47 无法启动,不是我通过更新安装的

理想情况下我想启动 5.4.0-47

编辑 :

在内核安装时我确实收到一个错误:

Setting up linux-modules-5.4.48-050448-generic (5.4.48-050448.202006220832) ...
Setting up linux-image-unsigned-5.4.48-050448-generic (5.4.48-050448.202006220832) ...
I: /boot/vmlinuz.old is now a symlink to vmlinuz-5.4.0-47-generic
I: /boot/initrd.img.old is now a symlink to initrd.img-5.4.0-47-generic
I: /boot/vmlinuz is now a symlink to vmlinuz-5.4.48-050448-generic
I: /boot/initrd.img is now a symlink to initrd.img-5.4.48-050448-generic
Processing triggers for linux-image-unsigned-5.4.48-050448-generic (5.4.48-050448.202006220832) ...
/etc/kernel/postinst.d/dkms:
 * dkms: running auto installation service for kernel 5.4.48-050448-generic
   ...done.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-5.4.48-050448-generic
I: The initramfs will attempt to resume from /dev/sda2
I: (UUID=53c19176-f03e-4c40-a6ed-3a2627160647)
I: Set the RESUME variable to override this.
/etc/kernel/postinst.d/zz-update-grub:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...

还有大量这样的:

Warning: Couldn't find any valid initrd for dataset rpool/ROOT/ubuntu_38tazy@autozsys_7lfyl1.

这是更新grub:

(看上去不是最佳)

https://pastebin.com/8y6x36u4

答案1

查看您的日志时,我想知道 Ubuntu 是否能够正确生成启动文件,并且我在想 /boot 中是否有足够的空间。/boot 是一个分区还是根文件系统下的目录?许多默认的 Ubuntu 安装都有较小的 /boot 分区,这些分区已满并会产生问题。您使用加密吗?

另一个想法是,那些失败的内核会尝试通过更新进行安装;你可以手动安装其中一个内核吗?apt 安装?。

干杯

答案2

好的,我找到了它是什么。最终与内核版本完全无关......

与往常一样……Windows 向 Linux 宣战。

他们太低劣了。

无论如何。任何 Windows,即使安装在单独的计算机上,只要您将硬盘插入与 Linux 操作系统相同的主板,都会尝试以某种方式杀死 grub。

而这一系列攻击中最新的一次只是让 grub 本身保持原样,但将启动项作为目标并使其无法启动。

我将其与内核关联起来,因为 grub 条目以内核版本命名,并且只有在我启动窗口之前的 grub 条目保持完整。

也许它们对于 Windows 来说是无法检测到的,也许这与 ZFS 当您选择它时简单地恢复到该状态有关,从而使攻击变得无关紧要。

所以,

我以前曾遇到过这个问题:每次启动和更新 Windows 时,Windows 都会删除 grub 分区;我的解决方案是使用 Ubuntu live usb 驱动器启动并运行启动修复,它将使用正常工作的 grub 重新创建启动分区。

尽管使用 ZFS,启动修复无法为您的 ZFS 分区创建有效的启动项。

因此,最好的解决方案是先发制人,即在您的 Linux 附近的任何地方拥有 Windows 分区之前使用 grub-customizer 并创建您最喜欢的启动项的重复备份,以便当有一天它损坏时,您可以使用重复的,删除损坏的,并制作新的重复。

但是还有最后一个问题。Windows 以某种方式将其更改(我猜是通过利用针对 ubuntu 的 BIOS)渗透到任何新创建的条目中。

这意味着您在启动 Windows 一次之后将无法跟踪内核升级。

只剩下我最古老、最麻烦的解决方案:

当插入 Windows 硬盘时,完全关闭系统电源并拔下任何其他硬盘。

答案3

只是想法,也许值得尝试。

ZFS 不是内置于标准 Linux 内核中的,因此您必须将其构建为模块,并针对每个内核版本进行重建。我不相信 ubuntu 附带集成的 zfs 模块(也许在某个时候确实如此)。尝试在工作内核上重新安装它们,这应该会为新内核构建模块并创建新的 initrd 映像。

列出已安装的 zfs 包:

apt list zfs*

使用 apt reinstall 重新安装它们。

您可能需要的 zfs apt 软件包:

zfs-dkms
zfs-initramfs

相关内容