Как мне создать личинку запись для загрузки другого экземпляра grub?

У меня есть две зашифрованные установки Ubuntu (20.10) на двух отдельных физических дисках. Я хочу загрузить личинку второй установки из первой. В настоящее время мне удалось загрузить только определенное ядро ​​второй установки через пункт меню в моем основном grub (добавленном с помощью настройщика grub), используя следующую последовательность загрузки:

recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd2,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt3 --hint-efi=hd2,gpt3 --hint-baremetal=ahci2,gpt3  f54aac74-c88d-4963-a23f-84d5b27c2829
else
  search --no-floppy --fs-uuid --set=root f54aac74-c88d-4963-a23f-84d5b27c2829
fi
linux   /vmlinuz-5.8.0-33-generic root=/dev/mapper/vgubuntu-root ro  
initrd  /initrd.img-5.8.0-33-generic

Конечно, это не удастся, как только будет установлено ядро ​​второй установки. обновляется, поскольку указывает на конкретное ядро. Итак, я хочу загрузить личинку второй установки из первой. Чтобы проиллюстрировать ситуацию, я создал следующее изображение: desired grub setup

Я попробовал два варианта (последовательности загрузки):

chainloader (hd3,gpt3)/grub/x86_64-efi/core.efi

дает:

error: invalid signature

и (на основе https://www.linuxquestions.org/questions/linux-software-2/grub2-chainloader-833236 / )

search --fs-uuid --set f54aac74-c88d-4963-a23f-84d5b27c2829
multiboot /grub/x86_64-efi/core.img

дает:

error: file '/grub/x86_64-efi/core.img' not found

Таким образом, оба не работают. Итак, мой вопрос: как мне создать запись grub для загрузки другого экземпляра grub?

Обновление: Я попробовал решение от @ TSJNachos117 вот так: Я переключился с grub-customizer на непосредственное редактирование следующих файлов: /etc/grub.d/40_custom_proxy указывал на /etc/grub.d/proxifiedScripts/custom Я добавил следующий пункт меню:

menuentry 'The Other Ubuntu' {
    insmod chain
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt3 --hint-efi=hd2,gpt3 --hint-baremetal=ahci2,gpt3  f54aac74-c88d-4963-a23f-84d5b27c2829
    else
      search --no-floppy --fs-uuid --set=root f54aac74-c88d-4963-a23f-84d5b27c2829
    fi
    #set root=(hd2,3)
    configfile /boot/grub/grub.cfg
} 

При выборе этого пункта меню мой экран становится черным примерно на 10 секунд, прежде чем снова отобразить то же меню grub. Есть подсказки, что случилось?

Здесь вывод lsblk -o имя, тип, uuid :

NAME                      TYPE  UUID
loop0                     loop  
loop1                     loop  
loop2                     loop  
loop3                     loop  
loop4                     loop  
loop5                     loop  
loop6                     loop  
loop7                     loop  
loop8                     loop  
loop9                     loop  
loop10                    loop  
sda                       disk  
└─sda1                    part  d8c4609f-a602-44e8-b8e5-d88b3ab664c2
  └─additional_disk_crypt crypt d07398f4-5f04-41bc-a31a-e44c112e3ae3
sdb                       disk  
├─sdb1                    part  
├─sdb2                    part  DA91-B238
├─sdb3                    part  9e57c5ea-219b-4b3a-8759-b98eb7d34c93
└─sdb4                    part  8f45cd57-43c9-413f-b3c5-88f4f943554a
  └─sda4_crypt            crypt Qb93l3-3kQ4-cL0y-beud-DjZ0-RXef-MosuKX
    ├─vgubuntu-root       lvm   a206ae07-c959-434b-a8a4-4fd46afc2d77
    └─vgubuntu-swap_1     lvm   d7f15c2d-1f6b-4bd6-9536-426ec27a620e
sdc                       disk  
├─sdc1                    part  
├─sdc2                    part  0C57-CD8C
├─sdc3                    part  f54aac74-c88d-4963-a23f-84d5b27c2829
└─sdc4                    part  86119b44-5b4a-4034-a761-52303f26b743
sdd                       disk  
├─sdd1                    part  E0DC5287DC5257BC
├─sdd2                    part  AA1A58321A57FA31
└─sdd3                    part  50B8C8FEB8C8E396
sr0                       rom
2
задан 1 January 2021 в 15:02

1 ответ

Пользователь Emmanual Rosa на unix.stackexchange.com имеет симпатичный хороший ответ:

    menuentry 'The Other Ubuntu' {
       insmod chain
       set root=(hd0,3)
       configfile /boot/grub/grub.cfg
    }

В приведенном выше примере я сделал так, чтобы опция, отображаемая во время загрузки, читалась как Другая Ubuntu. Не стесняйтесь изменить это на то, что вы хотите сказать, изменив первую строку после части «menuentry» перед символом «{».

Я считаю, что должен упомянуть, что эта конфигурация иногда может быть немного привередливой, поскольку GRUB не всегда видит мои устройства хранения в одном и том же порядке. В один прекрасный день рассматриваемый раздел может быть расположен на «hd0», в следующий раз это может быть «hd1», «hd2» и т. д. Как правило, номер раздела тот же, просто изменился «номер hd». Однако, если вы обнаружите, что добавляете, перемещаете или удаляете разделы, номер вашего раздела также может измениться. По этим причинам лучше использовать UUID. Код для этого немного сложнее, но вы найдете пример ниже.Для простоты предположим, что раздел с экземпляром GRUB, который скоро будет загружен по цепочке, имеет UUID 12345-abcdefg:

    menuentry 'The Other Ubuntu' {
       insmod chain
       if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  12345-abcdefg
           else
              search --no-floppy --fs-uuid --set=root 12345-abcdefg
       fi
       configfile /boot/grub/grub.cfg
    }

Поскольку Ubuntu автоматически перестраивает конфигурацию GRUB каждый раз, когда ядро ​​устанавливается или ядра регулярно), лучше не менять файл /boot/grub/grub.cfg вручную. Вместо этого добавьте код в конец /etc/grub/40_custom и запустите sudo update-grub.

Я могу лично поручиться за это решение, так как я фактически использовал его, чтобы добавить GRUB установки Arch в GRUB Ubuntu. Поскольку нет простого способа (насколько мне известно) передать параметр ядра RESUME= в Arch (для перехода в спящий режим) без чрезмерного усложнения файла Ubuntu grub.cfg, просто поместив его в GRUB Arch (который не меняется, как Ubuntu делает), и взлом GRUB Arch в меню GRUB Ubuntu просто упростил мне задачу.

PS: я понимаю, что OP знает UUID своего второго экземпляра GRUB, но если кто-то наткнется на этот ответ, не знает UUID раздела, содержащего их другой grub, lsblk команда может быть полезной. Что-то вроде lsblk -o name,size,label,type,uuid должно позволить вам выяснить, какой раздел какой (особенно если указанные разделы помечены), и скопировать/вставить оттуда UUID.

1
ответ дан 30 December 2020 в 02:16

Другие вопросы по тегам:

Похожие вопросы: