Вопрос или проблема
Я создал загрузочный USB-накопитель с Linux Mint 22 и Arch Linux 12-01-2024 на двух отдельных разделах и пытаюсь использовать GRUB 2 для загрузки с этого загрузочного USB-накопителя. У меня определены следующие разделы, и образы прошиты на sdb2 (mint) и sdb3 (arch):
sdb1 – EFI раздел (1 ГБ)
sdb2 – Раздел Linux Mint ext4 (15 ГБ)
sdb3 – Раздел Arch Linux ext4/ (15 ГБ)
Я знаю, что не могу указать имена устройств (sdb1, sdb2, sdb3) в файле grub.cfg, потому что они меняются после перезагрузки, а UUID не меняются. Я пытаюсь указать сам UUID в файле grub.cfg, но у меня не получается. Я могу заставить все пункты меню работать, и я могу загрузить Linux Mint в живую среду без проблем, но когда я пытаюсь выбрать любой из пунктов Arch Linux, я получаю ошибку от GRUB, сообщающую “файл отсутствует, сначала нужно загрузить ядро”. Я знаю, что GRUB ищет ядро Arch в разделе GPT2 в директории casper, где находится ядро Linux Mint, но не знаю, как указать GRUB, где найти ядро Arch, которое находится в разделе GPT3 в директории arch.
Я пытаюсь сделать “двойную загрузку” USB без использования Ventoy, потому что знаю, что это возможно с GRUB, и помните, что поскольку это загрузочный USB-накопитель, “sudo install-grub” и “sudo update-grub” ничего не делают для файла grub.cfg, и нет файла fstab для редактирования.
Вот список моего текущего grub.cfg, который находится на EFI-разделе USB, я закомментировал UUID, указывающие на разделы, которые мне нужно загрузить, просто для справки, пока не знаю, куда в конфигурационном файле их разместить:
loadfont unicode
set color_normal=white/black
set color_highlight=black/light-gray
insmod play
play 960 440 1 0 4 440 1 0 4 440 1
# https://www.supergrubdisk.org/wiki/Loopback.cfg"
# Поиск ISO-образа
search --no-floppy --set=archiso_img_dev --file "${iso_path}"
probe --set archiso_img_dev_uuid --fs-uuid "${archiso_img_dev}"
# Получить читаемый человеком идентификатор платформы
if [ "${grub_platform}" == 'efi' ]; then
archiso_platform='UEFI'
if [ "${grub_cpu}" == 'x86_64' ]; then
archiso_platform="x64 ${archiso_platform}"
elif [ "${grub_cpu}" == 'i386' ]; then
archiso_platform="IA32 ${archiso_platform}"
else
archiso_platform="${grub_cpu} ${archiso_platform}"
fi
elif [ "${grub_platform}" == 'pc' ]; then
archiso_platform='BIOS'
else
archiso_platform="${grub_cpu} ${grub_platform}"
fi
#menuentries
menuentry "Запуск Linux Mint 22 Cinnamon 64-bit" --class linuxmint {
set gfxpayload=keep
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
menuentry "Запуск Linux Mint 22 Cinnamon 64-bit (совместимый режим)" {
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} noapic noacpi nosplash irqpoll nomodeset --
initrd /casper/initrd.lz
}
menuentry "OEM установка Linux Mint (для производителей)" {
set gfxpayload=keep
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz oem-config/enable=true only-ubiquity boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
menuentry "Установочный носитель Arch Linux (x86_64, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
set gfxpayload=keep
#GRUB_DEVICE_UUID=e7151878-33fd-4d21-a0f2-c3cba821620d
linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}"
initrd /arch/boot/x86_64/initramfs-linux.img
}
menuentry "Установочный носитель Arch Linux с экранным диктоном Speakup (x86_64, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
set gfxpayload=keep
#GRUB_DEVICE_UUID=e7151878-33fd-4d21-a0f2-c3cba821620d
linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" accessibility=on
initrd /arch/boot/x86_64/initramfs-linux.img
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Загрузка с следующего устройства' {
exit 1
}
menuentry 'Настройки прошивки UEFI' {
fwsetup
}
menuentry 'Тест памяти' {
linux /boot/memtest.efi
}
menuentry 'Выключение системы' --class shutdown --class poweroff {
echo 'Система выключается...'
halt
}
menuentry 'Перезагрузка системы' --class reboot --class restart {
echo 'Система перезагружается...'
reboot
}
fi
loadfont unicode
set color_normal=white/black
set color_highlight=black/light-gray
insmod play
play 960 440 1 0 4 440 1 0 4 440 1
# https://www.supergrubdisk.org/wiki/Loopback.cfg"
# Поиск ISO-образа
search --no-floppy --set=archiso_img_dev --file "${iso_path}"
probe --set archiso_img_dev_uuid --fs-uuid "${archiso_img_dev}"
# Получить читаемый человеком идентификатор платформы
if [ "${grub_platform}" == 'efi' ]; then
archiso_platform='UEFI'
if [ "${grub_cpu}" == 'x86_64' ]; then
archiso_platform="x64 ${archiso_platform}"
elif [ "${grub_cpu}" == 'i386' ]; then
archiso_platform="IA32 ${archiso_platform}"
else
archiso_platform="${grub_cpu} ${archiso_platform}"
fi
elif [ "${grub_platform}" == 'pc' ]; then
archiso_platform='BIOS'
else
archiso_platform="${grub_cpu} ${grub_platform}"
fi
#menuentries
menuentry "Запуск Linux Mint 22 Cinnamon 64-bit" --class linuxmint {
set gfxpayload=keep
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
menuentry "Запуск Linux Mint 22 Cinnamon 64-bit (совместимый режим)" {
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} noapic noacpi nosplash irqpoll nomodeset --
initrd /casper/initrd.lz
}
menuentry "OEM установка Linux Mint (для производителей)" {
set gfxpayload=keep
#GRUB_DEVICE_UUID=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
linux /casper/vmlinuz oem-config/enable=true only-ubiquity boot=casper username=mint hostname=mint iso-scan/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
menuentry "Установочный носитель Arch Linux (x86_64, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
set gfxpayload=keep
#GRUB_DEVICE_UUID=e7151878-33fd-4d21-a0f2-c3cba821620d
linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}"
initrd /arch/boot/x86_64/initramfs-linux.img
}
menuentry "Установочный носитель Arch Linux с экранным диктоном Speakup (x86_64, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
set gfxpayload=keep
#GRUB_DEVICE_UUID=e7151878-33fd-4d21-a0f2-c3cba821620d
linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" accessibility=on
initrd /arch/boot/x86_64/initramfs-linux.img
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Загрузка с следующего устройства' {
exit 1
}
menuentry 'Настройки прошивки UEFI' {
fwsetup
}
menuentry 'Тест памяти' {
linux /boot/memtest.efi
}
menuentry 'Выключение системы' --class shutdown --class poweroff {
echo 'Система выключается...'
halt
}
menuentry 'Перезагрузка системы' --class reboot --class restart {
echo 'Система перезагружается...'
reboot
}
fi
Ответ или решение
Для настройки загрузчика GRUB 2 и организации двойной загрузки двух дистрибутивов Linux (Linux Mint и Arch Linux) с флешки, необходимо правильно отредактировать файл grub.cfg
. В данном ответе будет рассмотрен процесс настройки с учётом использования UUID для идентификации разделов, а также правильного указания путей к файлам кернела и initrd для Arch Linux.
Шаг 1: Получение UUID разделов
Поскольку устройство записи флешки может изменять свои имена (например, sdb1
, sdb2
, и sdb3
), лучше всего использовать UUID. Для получения UUID всех разделов можно воспользоваться командой:
blkid
Запишите UUID для sdb2
(Linux Mint) и sdb3
(Arch Linux), так как они понадобятся для настройки grub.cfg
.
Шаг 2: Редактирование grub.cfg
Общая структура файла grub.cfg
:
Обратите внимание на меню загрузки в вашем файла grub.cfg
. Вам нужно изменить или добавить секции для Arch Linux так, чтобы они указывали на корректные файлы с учетом полученного UUID.
Вот пример изменений, которые могут быть внесены:
# Установка необходимых переменных
set mint_uuid=3b5d4e95-771e-48bd-ae0d-4b61c80a8fa0
set arch_uuid=e7151878-33fd-4d21-a0f2-c3cba821620d
# Начало
loadfont unicode
set color_normal=white/black
set color_highlight=black/light-gray
# Меню загрузки
menuentry "Start Linux Mint 22 Cinnamon 64-bit" --class linuxmint {
set gfxpayload=keep
linux (hd0,gpt2)/casper/vmlinuz boot=casper username=mint hostname=mint quiet splash --
initrd (hd0,gpt2)/casper/initrd.lz
}
menuentry "Arch Linux install medium (x86_64)" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
set gfxpayload=keep
linux /arch/boot/x86_64/vmlinuz-linux img_dev=UUID=${arch_uuid} img_loop=/arch/archiso.img
initrd /arch/boot/x86_64/initramfs-linux.img
}
menuentry "Arch Linux install medium with speakup screen reader (x86_64)" --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
set gfxpayload=keep
linux /arch/boot/x86_64/vmlinuz-linux img_dev=UUID=${arch_uuid} img_loop=/arch/archiso.img accessibility=on
initrd /arch/boot/x86_64/initramfs-linux.img
}
Обращение к ядру Arch Linux
В menuentry
для Arch Linux вам нужно убедиться, что пути к файлам ядра и initramfs правильные. Убедитесь, что файлы находятся в следующих каталогах:
- Ядро:
/arch/boot/x86_64/vmlinuz-linux
- Initramfs:
/arch/boot/x86_64/initramfs-linux.img
Шаг 3: Проверка и тестирование
После внесения всех изменений, сохраните файл grub.cfg
. Затем перезагрузите компьютер и выберите свой USB-накопитель в качестве устройства загрузки. Это должно вывести меню GRUB, где вы сможете выбрать нужный дистрибутив.
Использование UUID в конфигурации GRUB обеспечивает стабильность и отсутствие ошибок при загрузке, так как устройство может изменять свои имена в зависимости от среды.
Заключение
Ручное редактирование grub.cfg
может показаться сложным, однако оно даёт вам полный контроль над процессом загрузки. При правильной настройке GRUB 2 сможет успешно загружать как Linux Mint, так и Arch Linux с одного USB-накопителя. Убедитесь в корректности всех указателей и наличии необходимых файлов в соответствующих директориях, что обеспечит успешную загрузку выбранной системы.