Используя Ubuntu 20.04 на AWS (ec2), я хотел сменить свое ядро с AWS на универсальное. Когда я пробую предложенный способ с изменением конфигурации Grub, он останавливает машину.
Это связано с тем, что Jibri (видеорегистратор Jitsi) требует использования ALSA и modprobe snd-aloop, но то же самое необходимо и для тех, кому требуется низкая задержка или другое ядро.
Что я пробовал:
Возьмите изображение:
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' {
В том, что, скорее всего, находится в верхней строке, а не в той, где упоминается режим восстановления, скопируйте его menuentry в начале строки. На моем выглядит как Ubuntu, с Linux 5.4.0-84-generic, но у всех будет по-разному.
Сейчас я отредактирую/etc/default/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)
Опять же, это хорошо! Мы знаем, что указали что-то, что он распознает. В наши дни все используют grub новее 2.00, поэтому мы снова редактируем /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 в соответствии с ним. В этот момент мне, по сути, придется завершить экземпляр и попробовать снова, так как я не могу его легко восстановить.
Есть ли лучший способ изменить ядро на универсальное? Я был бы рад использовать универсальный образ в любом возможном месте на данном этапе, если он загружается.