我在六月的某个时候安装了 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:
(看上去不是最佳)
答案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