У меня есть две зашифрованные установки 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
Конечно, это не удастся, как только будет установлено ядро второй установки. обновляется, поскольку указывает на конкретное ядро. Итак, я хочу загрузить личинку второй установки из первой. Чтобы проиллюстрировать ситуацию, я создал следующее изображение:
Я попробовал два варианта (последовательности загрузки):
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
Пользователь 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.