在 AWS 中更改 20.04 的内核似乎会破坏启动顺序(可能是 grub 配置问题?)

在 AWS 中更改 20.04 的内核似乎会破坏启动顺序(可能是 grub 配置问题?)

在 AWS (ec2) 上使用 Ubuntu 20.04 时,我想将我的内核从 AWS 更改为通用内核。当我尝试按照建议的方式更改 Grub 配置时,它会停止机器。

这是因为 Jibri(Jitsi 视频录像机)需要使用 ALSA 并 modprobe snd-aloop ,但任何想要低延迟或不同内核的东西都会有相同的需求——想要使用与 AWS 不同的内核。

我尝试过的:

抓取图像:

sudo apt install linux-image-extra-virtual

您将看到它在安装包中引用了类似 Linux 5.4.0-84-generic 的内容,这对以后有帮助。现在,列出您为该新通用内核拥有的启动项

grep -A200 submenu /boot/grub/grub.cfg |grep -P '^(?=.*menuentry)(?=.*generic)'

我懂了:

menuentry 'Ubuntu,带有 Linux 5.4.0-84-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-84-generic-advanced-e8070c31-bfee-4314-a151-d1332dc23486' { menuentry 'Ubuntu,带有 Linux 5.4.0-84-generic (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-84-generic-recovery-e8070c31-bfee-4314-a151-d1332dc23486' {

在最上面的一行(不是提到恢复模式的那一行)中,复制行首的菜单项。我的看起来像是 Ubuntu,带有 Linux 5.4.0-84-generic ,但每个人的情况都不一样。

现在,我将编辑/etc/默认/grub

注释掉 GRUB_DEFAULT=0(加载 grub 启动列表中的第一个条目),并将其更改为我们之前找到的字符串。对我来说,文件的这一部分现在看起来像:

#GRUB_DEFAULT=0
GRUB_DEFAULT="Ubuntu, with Linux 5.4.0-84-generic"

这还不是一个正确的设置 - 我们正在使用它来让 grub 检查并告诉我们最好的方法。

此时,我们可以 sudo update-grub,它会给我一个这样的友好警告(这很好!)

Warning: Please don't use old title `Ubuntu, with Linux 5.4.0-84-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-84-generic' (for versions before 2.00) or `gnulinux-advanced-e8070c31-bfee-4314-a151-d1332dc23486>gnulinux-5.4.0-84-generic-advanced-e8070c31-bfee-4314-a151-d1332dc23486' (for 2.00 or later)

再次,这很好!我们知道我们指定了它能识别的东西。现在每个人都在运行 2.00 以上的 grub,所以我们现在再次编辑 /etc/default/grub 并将其更改为最终值:

(我的价值观与你的不同)

#GRUB_DEFAULT=0
#GRUB_DEFAULT="Ubuntu, with Linux 5.4.0-84-generic"
GRUB_DEFAULT="gnulinux-advanced-e8070c31-bfee-4314-a151-d1332dc23486>gnulinux-5.4.0-84-generic-advanced-e8070c31-bfee-4314-a151-d1332dc23486"

sudo update-grub,我看到警告现在已经消失。

现在我做一个sudo reboot now

此时,grub 已为我提供了一个配置,该配置应该尝试启动通用内核,然后恢复到正常内核。

相反,它会陷入启动循环。

在串行控制台中,我在其启动循环期间反复看到此现象。

[    0.000000] Linux version 5.4.0-84-generic (buildd@lgw01-amd64-050) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 
(Ubuntu 5.4.0-84.94-generic 5.4.133)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-84-generic root=PARTUUID=5198cbc0-01 ro console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295 panic=-
1
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Hygon HygonGenuine
[    0.000000]   Centaur CentaurHauls
[    0.000000]   zhaoxin   Shanghai  
... lots of cpu init that's hard to copy ..
[   10.366218] rtc_cmos 00:00: setting system clock to 2021-09-21T11:25:30 UTC (1632223530)
[   10.373185] md: Waiting for all devices to be available before autodetect
[   10.460173] md: If you don't use raid, use raid=noautodetect
[   10.464642] md: Autodetecting RAID arrays.
[   10.468024] md: autorun ...
[   10.470867] md: ... autorun DONE.
[   10.473906] VFS: Cannot open root device "PARTUUID=5198cbc0-01" or unknown-block(0,0): error -6
[   10.562806] Please append a correct "root=" boot option; here are the available partitions:
[   10.569825] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[   10.674637] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.4.0-84-generic #94-Ubuntu
[   10.682527] Hardware name: Amazon EC2 t3.small/, BIOS 1.0 10/16/2017
[   10.686735] Call Trace:
[   10.691100]  dump_stack+0x6d/0x8b
[   10.759061]  panic+0x101/0x2e3
[   10.761974]  mount_block_root+0x23f/0x2e8
[   10.765568]  mount_root+0x38/0x3a
[   10.768584]  prepare_namespace+0x13f/0x194
[   10.771873]  kernel_init_freeable+0x23f/0x263
[   10.775368]  ? rest_init+0xb0/0xb0
[   10.859141]  kernel_init+0xe/0x110
[   10.862101]  ret_from_fork+0x35/0x40
[   10.865843] Kernel Offset: 0x36a00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)

它告诉我找不到启动设备或与之对应的 partuuid。此时,我几乎必须终止实例并重试,因为我无法轻松恢复它。

有没有更好的方法将我的内核更改为通用内核?如果它可以启动,我很乐意以任何可能的方式使用通用映像。

答案1

如日志跟踪所述:

FS: Cannot open root device "PARTUUID=5198cbc0-01" or unknown-block(0,0): error -6
[   10.562806] Please append a correct "root=" boot option; here are the available partitions:
[   10.569825] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

问题主要在于 /etc/default/grub.d/40-force-partuuid.cfg 中强制设置 PARTUUID

解决方案是:

  1. 安装特定linux-generic内核(sudo apt install linux-generic最新版)。您可以使用命令检查可用的内容linux-version list
  2. 更改GRUB_DEFAULT="1>2"或相应地更改grub.cfg菜单顺序列表。

(“1>2”)解释:数字 1 代表“高级 Ubuntu 选项”(从零开始的第二个菜单项),数字 2 是“高级 Ubuntu 选项”中的第三个子菜单选项(从零开始),这是我的情况应该使用的通用内核。

  1. 注释掉GRUB_FORCE_PARTUUID/etc/default/grub.d/40-force-partuuid.cfg
  2. sudo update-grub && sudo update-grub2
  3. Reboot

相关内容