Не много о самописном grub.cfg

У меня получилось так:
# по-умолчанию выбран пункт меню 0
set default=0

# при бездействии пользователя загрузка через 3 секунд
set timeout=3

# Установим разрешение экрана и укажем что это же разрешение нужно сохранять для ядра:
set gfxmode="1280x800"
set gfxpayload=keep

# Загрузим необходимые модули для работы видео режима, нужно для использования фоновой картинки
insmod vga
insmod vbe
insmod gfxterm
terminal_output gfxterm

# Установка шрифта с поддержкой Unicode:
font "/boot/grub2/fonts/unicode.pf2"
loadfont unicode

# Цвет пунктов меню:
set menu_color_normal=blue/black
set menu_color_highlight=yellow/blue

# Картинка для фона меню:
insmod png
background_image "/usr/share/backgrounds/pic02.png"

# пункт меню номер 0
menuentry "Arch" {
 linux /boot/vmlinuz-linux root=/dev/sda5 rw audit=0
 initrd /boot/initramfs-linux.img
}

# пункт меню номер 1
#menuentry "ArchLinux-lts" {
# linux /boot/vmlinuz-linux-lts root=/dev/sda5 rw
#initrd /boot/initramfs-linux-lts.img
#}

# пункт меню номер 2
menuentry "Windows 7" {
 set root=(hd0,1)
 chainloader (hd0,1)+1
}

все получилось,немного шустрее загружается!
Valik8
все получилось,немного шустрее загружается!
Рекомендую сделать копию grub.cfg и сохранить - если файл не защитил, то при обновлении он может переписаться ... а также не забываем, что в случае чего, всегда можно загрузиться прямо из консоли Grub.
Ошибки не исчезают с опытом - они просто умнеют
Рекомендую сделать копию grub.cfg и сохранить - если файл не защитил, то при обновлении он может переписаться … а также не забываем, что в случае чего, всегда можно загрузиться прямо из консоли Grub.
Спасибо,сохранил :)
Как грузиться с установочного образа арча нцать лет назад Natrio в вики написал. С тех пор изменилось только название ядра и образа инитрам соответственно на vmlinuz-linux и initramfs-linux.img( было vmlinuz и archiso.img). Я бы еще добавил микрокод для своего процессора, а можно и для обеих, раз уж они есть на сидюке. В результате получим:

dir=
#Файл образа с именем вида archlinux-YYYY.MM.DD-x86_64.iso должен лежать в корне раздела.
#В этом случае текст файла конфигурации можно использовать "как есть", без каких-либо правок
#Если же вы хотите использовать для образа (образов) особый каталог,
#впишите путь к нему (относительно корня раздела) в строку dir=, например
#dir=/boot/iso
arch=x86_64
insmod regexp               # для шаблонов * в именах файлов
probe -s root_uuid -u $root # получаем UUID для подстановки в img_dev=

for iso in $dir/archlinux-*-$arch.iso ; do      # ищем образ(ы) Arch по шаблону
 if [ ! -f "$iso" ] ; then continue; fi        # только если образ существует
 regexp -s build 'archlinux-(.+)-'$arch "$iso"  # получаем из имени образа дату сборки

  menuentry "Arch Linux ISO $build $arch" --source="\
loopback loop $iso
probe -s isolabel -l loop
linux (loop)/arch/boot/$arch/vmlinuz-linux archisolabel=\$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop
initrd (loop)/arch/boot/$arch/initramfs-linux.img (loop)/arch/boot/intel-ucode.img (loop)/arch/boot/amd-ucode.img"

done
Надо помнить, что строка probe -s root_udid -u $root сохраняет UUID раздела, на котором хранятся образ сидюка. Если ГРОБ и образ на разных разделах - получите фигню. Тогда можно добавить перед этой строкой root='раздел, где исо'.
PS. vasek, мне кажется, что строка linux .... в вашем посте должна выглядеть так:
grub > linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile  earlymodules=boot
img_loop=$isofile
to wau

Вообщем внук скачал новый образ и … загрузиться с него тоже не смог - как он сказал - ошибка losetup, похожая на твою - значит что то там еще изменилось.
Разбираться нет времени … попробуй старый образ, с новым нет смысла и пытаться.

EDIT 1 - был бы Natrio, он бы сразу с этим разобрался ...

EDIT 2 - вообщем как всегда - молодое поколение думает не ... о том ... в руках мобила и правит конфиг ... конечно же описался - все работает.
Проверил лично, изменил везде archlinux-2020.08.01-x86_64.iso на archlinux-2020.12.01-x86_64.iso и archiso.img на initramfs-linux.img

А внук утверждает, что он списал у меня ... точно, мой косяк, когда описывал загрузку из консоли grub на предыдещей странице, то вместо
earlymodules=loop написал earlymodules=boot ... так что будте внимательнее.
Ошибки не исчезают с опытом - они просто умнеют
wau, попробуйте
# пункт меню номер 4
menuentry "ArchLinux ISO" {
isofile=/boot/arch.iso
root='hd0,msdos3'
loopback loop $isofile
probe -s root_uuid -u $root
root='loop'
 linux /arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=loop
 initrd /arch/boot/x86_64/initramfs-linux.img /arch/boot/intel-ucode.img /arch/boot/amd-ucode.img
}
wau
прописал я ему, ненасытному, img_loop=archlinux-2020.12.01-x86_64.iso. Толку ноль
Естественно. Прописать вы должны полный путь iso образа. В вашем случае img_loop=/boot/arch.iso
anode
мне кажется, что строка linux …. в вашем посте должна выглядеть так:

grub > linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=boot

img_loop=$isofile
С целью уменьшения писанины конечно же лучше указывать img_loop=$isofile, который я сам же и определил в начале .... верно подметил.
Конфиг постоянно правится, раньше образы лежали прямо в корне, потом создал для них директорию, а вот упростить запись просмотрел, точнее исправил, но не везде. Работает и работает, а потому и не смотришь как под микроскопом ... а вот если бы не заработало, то проверял бы каждую букву ...
Спасибо, что подметил - нужно будет потом подкоректировать в топике ... но на свежую голову
Ошибки не исчезают с опытом - они просто умнеют
vasek, я немного о другом. Параметр img_loop - єто полный путь iso файла на устройстве $img_dev. Пруф Т.е. если они у вас были в корне диска, то все-таки правильно было бы писать не archlinu...iso, a /archlinux...iso. Именно по этому wau и страдает.
PS. Более того, допустим sda1 монтируется как /boot, а sda2 как /home/anode к корневому диску sda3. Есть два образа арча: один /boot/iso/arch.iso, второй /home/anode/iso/arch.iso. img_dev для них будет различным, но img_loop=/iso/arch.iso одинаков.
vs220
у вас исошка на бтрфс разделе? В ядре исошки может не быть его модуля, надо проверить
Есть там модуль, значит просто в конфиге ошиблись

может так понятней будет:

смотрим на каком диске исошка
например на /dev/sda3 в папке /iso исошка archlinux-2020.12.01-x86_64.iso
смотрим uuid диска

lsblk -f |grep sda3
sda3 btrfs ae819a79-f3de-4fbc-b39e-34e71b504d0c 11,1G 6% /run/media/oleg/ae819a79-f3de-4fbc-b39e-34e71b504d0c

find /run/media/oleg/ae819a79-f3de-4fbc-b39e-34e71b504d0c |grep archlinux
/run/media/oleg/ae819a79-f3de-4fbc-b39e-34e71b504d0c/iso/archlinux-2020.12.01-x86_64.iso

uuid → ae819a79-f3de-4fbc-b39e-34e71b504d0c
файловая система → btrfs
путь до исошки на диске → /iso/archlinux-2020.12.01-x86_64.iso

Смотрим пути до ядра и инита на исошке смонтировав ее ( в примере смонтировано в /run/media/oleg/ARCH_202012)
/run/media/oleg/ARCH_202012/arch/boot/x86_64/vmlinuz-linux
/run/media/oleg/ARCH_202012/arch/boot/x86_64/initramfs-linux.img

фрагмент конфига груба тогда

##
## Загрузка /iso/archlinux-2020.12.01-x86_64.iso
menuentry "archlinux-2020.12.01-x86_64.iso" {
insmod search_fs_uuid ##модуль для поиска по uuid
insmod btrfs ##модуль для файловой раздела на котором archlinux-2020.12.01-x86_64.iso
UUID=ae819a79-f3de-4fbc-b39e-34e71b504d0c ## задаем переменную UUID,  uuid раздела на котором archlinux-2020.12.01-x86_64.iso
search --fs-uuid $UUID --set root ##задаем раздел с указанным выше uuid как рабочий
set isofile='/iso/archlinux-2020.12.01-x86_64.iso' ## указываем путь на разделе к archlinux-2020.12.01-x86_64.iso
loopback loop $isofile  ##монтирование исошки
probe -s isolabel -l loop ##прочитать метку ФС образа
##загрузка ядра на исошке , /arch/boot/x86_64/vmlinuz-linux путь до ядра на исошке
linux (loop)/arch/boot/x86_64/vmlinuz-linux archisolabel=\$isolabel img_dev=/dev/disk/by-uuid/$UUID img_loop=$isofile earlymodules=loop
##загрузка инита, /arch/boot/x86_64/initramfs-linux.img путь до инита на исошке
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
##
##
anode
Параметр img_loop - єто полный путь iso файла на устройстве $img_dev
Полностью с тобой согласен - img_loop=/путь/образ (то есть путь от корня устройства) ... и чтобы не было ошибок лучше один раз прописать/указать этот путь в переменной, которую потом и использовать.
У меня конфиг правленный/переправленный и куча закоментированных строк - вообщем с твоей подачи сегодня с утра, на свежую голову, все подправил, удалил не нужное и в итоге загрузка с образов сейчас записана так
Старый образ (пока не выкинул)
# пункт меню номер 2
menuentry "archlinux-2020.08.01-x86_64.iso" {
 set isofile=/ISO/archlinux-2020.08.01-x86_64.iso
 loopback loop (hd0,3)$isofile
 probe -s root_uuid -u $root
 linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=loop
 initrd (loop)/arch/boot/x86_64/archiso.img
 boot
}
Новый образ
# пункт меню номер 3
menuentry "archlinux-2020.12.01-x86_64.iso" {
 set isofile=/ISO/archlinux-2020.12.01-x86_64.iso
 loopback loop (hd0,3)$isofile
 probe -s root_uuid -u $root
 linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=loop
 initrd (loop)/arch/boot/x86_64/initramfs-linux.img
 boot
}
и сейчас, если изменится расположение образа, то нужно изменить только в одном месте - set isofile=/путь/образ

PS 1 - в части пути к образу (использования $isofile) сдедал редактирование и в других постах
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.