LINUX.ORG.RU
ФорумAdmin

Создание загрузочной флешки с grub2

 , , ,


0

1

Я мало что понимаю в загрузке, помогите понять что происходит и в какую сторону смотреть.

Пытаюсь сделать мультизагрузочную флешку, но есть проблема с дистрибутивом Guix, не может найти корень, could not open /proc/stat: https://0x0.st/KJiB.jpg (на сообщение init[1]: segfault… не обращайте внимание), если указать root=/dev/ram0 то ругается на ISOFS: unable to identify CD-ROM format: https://0x0.st/KJiu.jpg

Сам архив initrd.cpio.gz выглядит следующим образом: https://0x0.st/KJiy.txt, дерево iso: https://0x0.st/KJi4.txt

Конфиг grub:

insmod efi_gop
insmod font
insmod gfxterm
insmod png
loadfont /boot/grub/fonts/unicode.pf2
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
if background_image /boot/grub/grub-16x9.png ; then
  set color_normal=light-gray/black
  set color_highlight=yellow/black
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
set imgdevpath="/dev/disk/by-uuid/C758-F995"


menuentry "guix" --class iso {
  set isofile='/images/3i37a8my5xp6iivqmprmhhcm4ci85zyj-image.iso'
  loopback loop $isofile
  linux (loop)/gnu/store/bsy9cj3h01g11s6mxy0h60ixafajwf02-linux-6.17.7/bzImage root=31393730-3031-3031-3139-343934363833 gnu.system=/gnu/store/8qy33rayljj1qhn51jscfdifbfs45k3i-system gnu.load=/gnu/store/8qy33rayljj1qhn51jscfdifbfs45k3i-system/boot findiso=$isofile img_dev=$imgdevpath img_loop=$isofile
  initrd (loop)/gnu/store/6wh8nsdqcgffpwcqdk39c3wayys001hc-raw-initrd/initrd.cpio.gz
}

menuentry "finnix" --class iso {
  set isofile='/images/finnix-251.iso'
  loopback loop $isofile
  linux (loop)/live/vmlinuz-6.16.12+deb14+1-amd64 boot=live toram=filesystem.squashfs vga=791 nomodeset findiso=$isofile img_dev=$imgdevpath img_loop=$isofile
  initrd  (loop)/live/initrd.img-6.16.12+deb14+1-amd64
}

menuentry "systemresque" --class iso {
  iso_path='/images/systemrescue-12.02-amd64.iso'
  export iso_path
  search --set=root --file $iso_path
  loopback loop $iso_path
  root=(loop)
  configfile /boot/grub/loopback.cfg
  loopback --delete loop
}

menuentry "void" --class iso {
  set isofile='/images/void-live-x86_64-20250202-base.iso'
  loopback loop $isofile
  linux (loop)/boot/vmlinuz selinux=0 root=live:CDLABEL=VOID_LIVE iso-scan/filename=$isofile init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 rd.live.ram loglevel=4 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8 nomodeset vga=0 img_dev=$imgdevpath img_loop=$isofile
  initrd (loop)/boot/initrd
}

menuentry "reboot" {
  reboot
}
menuentry "shutdown" {
  halt
}

Остальные дистрибутивы загружаются без пробем.


Ответ на: комментарий от andytux

Grub изначально придуман лицемерными дуалбутчиками. Это его основное предназначение - загружать Windows. У вас на флешке еще и Windows? Тогда вам нужен Grub. Если нет - то Grub есть сущностью излишней, а даже вредной.

anonymous
()
Ответ на: комментарий от err

А это совсем не показатель. Например, в исо-образах *бунту уже года четыре нет isolinux. Но она прекрасно грузится из исо-образа. Сама система должна разобраться, что и как у неё в исо-образе.

andytux ★★★★★
()

Ссылки на документацию:

В чём проблема с чтением официальной документации?

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

В чём проблема с чтением официальной документации?

Мултизагрузочной не получится. Команда dd займёт один образ на флешку.

Попробуй ventoy-1.0.99, если загрузится, тогда ковырять дальше.
А что если findiso=$isofile заменить на iso-scan/filename=${isofile}

iso-scan/filename=
findiso=
fromiso=
from=
bootfrom=

Некоторые образы не поддерживают ntfs, если флешка в ntfs формате

AZJIO
()
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от err

Может твой GUIX так не умеет )

Там вообще дичайший init скрипт в inird:

#!/gnu/store/bw399a1n6hv21g3d0snzmisybsa8p096-guile-static-stripped-3.0.7/bin/guile --no-auto-compile
!#
(eval-when (expand load eval) (let ((extensions (quote ())) (prepend (lambda (items lst) (let loop ((items items) (lst lst)) (if (null? items) lst (loop (cdr items) (cons (car items) (delete (car items) lst)))))))) (set! %load-path (prepend (cons "/gnu/store/2wqc68fmx85mjxqhqagblyg11w8yzkmw-module-import" (map (lambda (extension) (string-append extension "/share/guile/site/" (effective-version))) extensions)) %load-path)) (set! %load-compiled-path (prepend (cons "/gnu/store/xc0mcqr4h305k3blqa5p77a92f7pjgpp-module-import-compiled" (map (lambda (extension) (string-append extension "/lib/guile/" (effective-version) "/site-ccache")) extensions)) %load-compiled-path))))(begin (use-modules (gnu build linux-boot) (gnu system file-systems) ((guix build utils) #:hide (delete)) (guix build bournish) (srfi srfi-1) (srfi srfi-26) ((gnu build file-systems) #:select (find-partition-by-luks-uuid)) (rnrs bytevectors)) (with-output-to-port (%make-void-port "w") (lambda () (set-path-environment-variable "PATH" (quote ("bin" "sbin")) (quote ())))) (parameterize ((current-warning-port (%make-void-port "w"))) (boot-system #:mounts (map spec->file-system (quote (((uuid iso9660 #vu8(49 57 55 48 48 49 48 49 49 57 51 51 51 49 56 51)) "/" "iso9660" () #f #f #t #t preen)))) #:pre-mount (lambda () (and #t)) #:linux-modules (quote ("ahci" "usb-storage" "uas" "usbhid" "hid-generic" "hid-apple" "dm-crypt" "xts" "serpent_generic" "wp512" "nls_iso8859-1" "pata_acpi" "pata_atiixp" "isci" "virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net" "virtio_console" "virtio-rng" "isofs" "overlay")) #:linux-module-directory (quote "/gnu/store/2yjzar4fg2lrwjgq10gr19xbkkv78aws-linux-modules") #:keymap-file #f #:qemu-guest-networking? #f #:volatile-root? (quote #t) #:on-error (quote debug))))

В самом initrd init -> /gnu/store/870rglriw0x0g1x0jhwylp1xkg54x5v1-init - это ссылка на другой скрипт, выше, который подгружает части из других скриптов по такому же дичайшему алгоритму.

Вот это:

root=31393730-3031-3031-3139-333333313833

Это UUID файловой системы в ISO образе:

blkid
/dev/sr0: BLOCK_SIZE="2048" UUID="1970-01-01-19-33-31-83" LABEL="GUIX_X86_64-LINUX_1.4.0" TYPE="iso9660" PTTYPE="dos"

В общем, это делали покусанные crux или чем-то подобным.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от err

с ventoy все работает.

Я прихожу к выводу, что надо иметь несколько загрузочных флешек. Одну из них ventoy, чтобы быстро что-то загрузить. Я бы даже сказал что собственный конфиг мне нужен только если я хочу адаптировать загрузку в системного диска, так как ventoy на hdd/ssd/nvme не поставить параллельно с виндой и линуксами.

AZJIO
()
Ответ на: комментарий от kostik87

только хотел запостить этот скрипт) да, там все на scheme

Это UUID файловой системы в ISO образе:

UUID=«1970-01-01-19-33-31-83»

я пробовал добавлять в конфиг

search --fs-uuid --set=root 1970-01-01-19-33-31-83

но grub не может ее найти

Используй ventoy

похоже что да

err
() автор топика