LINUX.ORG.RU

Кто знает хорошо grub? Вопрос по маленькой статейке из Хабра.

 


1

2

Есть статья: Запуск Linux с виртуального диска vmdk на реальном железе и VirtualBox

https://habr.com/ru/articles/547512/

Почему там нужно создавать диск из двух частей? Ну, то есть, зачем там еще впереди кусок из 1 Мегабайта?

Статью я проверил – на Kubuntu 24 Desktop она сработала, а вот на других дистрах не работает, а мне надо другие.

И мне не понятен вопрос про такую конфигурацию диска.

Перемещено hobbit из general

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

Это я в 1999 или 2000 году в ДР, зонтик и футболку подарили. Раньше на ЛОРе просили ставить фото, а не аватарку, хотя многие на это правило забивали. А у меня что было под рукой после проверки сканера, то и поставил. Фото, понятно, с плёночного фотика.

mky ★★★★★
()
Ответ на: комментарий от truebin

Для понимая, схема расположения секторов и файлов приблизительно следующая.
В случае загрузки с обычного MBR-раздела (как, например, в статье на виртуальной машине)

  1. первый сектор, 512 байт (называется MBR)
    1. команда JMP to bootloader
    2. смещение и размер единственного раздела
  2. ещё 2047 секторов
    1. код bootloader
    2. параметры загрузки ядра, в том числе, на каком разделе и в каком файле искать ядро
  3. ещё ? секторов - раздел, на котором хранится корневая файловая система и ядро

В случае USB-диска с NTFS разделом, видимо, что-то такое:

  1. первый сектор, 512 байт
    1. команда JMP to bootloader
    2. смещения и размеры разделов на флешке
  2. ещё ? секторов
    1. код bootloader, способный читать NTFS
    2. параметры загрузки ядра, в том числе, на каком разделе и в каком файле искать ядро
  3. ещё ? секторов - первый раздел на флешке
    1. служебные секторы NTFS
      1. ventoy\ventoy_grub.cfg - файл с параметрами загрузки ядра
      2. файл с образом /mydisks/test1-flat.vmdk
PeleWin
()
Ответ на: комментарий от PeleWin

В что-то странное пишете:

ещё 2047 секторов
код bootloader
параметры загрузки ядра, в том числе, на каком разделе и в каком файле искать ядро

Если загрузчик типа lilo, то он не знает про файлы, там в ″код bootloader″ или даже в первый сектор, 512 байт, записывается номер (LBA) сектора, в котором лежат номера секторов с ядром и initramfs и остальная часть загрузчика. То есть при установке определяются номера (адреса) секторов, занятые файлом с ядром и пр. и записываются в файл, а номер сектора с этим файлом записывается в код загрузчика. И после установки загрузчика файлы с ядром нельзя двигать на уровне секторов.

У таких загрузчиков нету «в каком файле искать ядро», они не работают на уровне ФС, при установке загрузчика (обработке конфига) имена файлов превращаются в набор номеров секторов.

А загрузчики типа grub понимают ФС, понимают, что там есть файлы. В случае современного grub (он же grub2), в эти условные 2047 секторов ложится core.img, в который входят драйвера разделов диска, файловых систем и типа «адрес» каталога grub, в котором лежит grub.cfg и другие модули (драйверы) grub. И grub читает этот файл именно как файл, разбирая структуру ФС. В grub.cfg прописаны параметры загрузки ядра и пр., а не в неразмеченой области диска. А адрес может быть типа (0,gpt3)/grub — третий gpt-раздел текущего диска или (mduuid/12345...73b)/boot/grub — каталог на mdraid с uuid 12345...73b.

core.img лежит в /boot/grub/i386-pc/ и его можно поизучать без дампа неразмеченой области. Где-то был скрипт, разбирающий этот файл, в том числе, ЕМНИП, вытаскивающий этот «адрес» каталога grub. Просто так этот в случае i386-pc этот файл грепать смысла нет, он по умолчанию сжатый.

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

Да? Понял, учту, спасибо.
Но в случае с u-boot моя схема должна быть правильной (я больше всего с u-boot в последнее время разбирался). Тут, конечно, в статье никакого u-boot нет, а я просто обобщил 1 случай :)
Эх, ещё и в схеме с USB напутал, а исправить или удалить пост уже не могу почему-то.

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

Ну, исходно, в PC-DOS (MS-DOS), в MBR был загрузчик, определяющий активный раздел, и делающий JMP на первый сектор этого активного раздела. Никакого использования неразмеченой области, между MBR и первым разделом было не положено, и её и не использовали. Это позже появились хаки, где там сидит загрузчик/защитник диска.

А что касается grub, то, то что я написал, почти всегда правда. Но может быть сложнее. В этот core.img, который в случае MBR лежит в неразмеченой области, может быть внедрён так называемый, early config. И memdisk ещё можно засунуть в core.img. И сложить в образ memdisk файл с конфигом grub. Прописать в early config, что брать конфигурацию с memdisk и тогда получится, что конфиг груба, с параметрами ядра и именем файла с ядром, лежит в неразмеченой области.

Но, это ручная работа, команда grub-install так не сделает. Это нужно сначала создать tar-архив == memdisk. Потом командой grub-mkimage создать core.img, указав все нужные модули. Потом установить grub и этот core.img командой grub-bios-setup. Про эти команды вобще мало кто знает. :)

По удалению/редактированию поста. Были ограничения по звёздам/скору, по времени с момента написания, и нельзя, если на пост ответили.

mky ★★★★★
()