LINUX.ORG.RU

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

 


1

2

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

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

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

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

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

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

Чтобы там была таблица разделов. На любом дистрибутиве сработает, ничего Kubuntu 24 Desktop-специфичного в этой статье нет.

Но в целом это всё очень странно и заниматься таким без большой нужды я бы не советовал. Если цель - запускать линукс с флешки, можно в VirtualBox попробовать прокинуть саму флешку.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 2)

если загрузчик не влезает в 446 байт, отведенных под код загрузчика в MBR (а современные загрузчики давно не влезают :) ), то используется хак : в 446 байт вписывают код, который грузит в память загрузчик, расположенный между первым сектором и началом разделов. обычно под это дело оставляют пару мегабайт (минимум 32кб) пустого места при разметке диска.
https://ru.wikipedia.org/wiki/GNU_GRUB#Особенности_загрузки смотри картинку с boot.img и core.img

почему сборка из двух частей - желание автора. можно было и одним образом обойтись.
тут задумка как мне кажестя в разделении загрузочного «пустого» места и образа с файловой системой.

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

Чтобы там была таблица разделов

MBR таблица разделов. Если установщик создаст ещё и GPT-разметку, то grub в этот мегабайт не встанет, будет требовать Bios boot раздел в GPT:

Installing for i386-pc platform.
grub2-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub2-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub2-install: error: will not proceed with blocklists.

ничего Kubuntu 24 Desktop-специфичного

Вроде, во всех бубунтах, в инсталяторе устанавливают grub с опцией force или ещё какой. И он через blocklist грузит core.img.

mky ★★★★★
()

Разве тут вопрос в конфигурации диска? Тут весь финт в:

linux /boot/vmlinuz root=/dev/disk/by-label/${d_label} loop=${imgfile} rw nosplash
То есть настоящий root получается на loop-устройстве. Это означает что в ядре должна быть поддержка loop и ntfs (раз у вас исходно под виндой). Не важно, вкомпилено или модуль сложен на initramfs, но, не все дистрибутивы линукса такие. ПЛЮС, ЕМНИП, и скрипт в initramfs должен отрабатывать ″loop=...″.

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

Ну тут смысл, устанавливать в виртуалке, а потом эту машину перегрузить и загрузить с образа виртуалки, но не копируя образ на флешку. Не знаю, зачем это нужно, но такой тренд на разные извращения.

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

Но в целом это всё очень странно и заниматься таким без большой нужды я бы не советовал.

+100500.

Автор на хабре пишет:

Возникла необходимость обеспечить работу Linux как на виртуальной машине (VirtualBox), так и на реальном железе.

Для чего ему потребовалось делать это именно из одного образа вместо того, чтобы накатить одну систему в 2 места, осталось нераскрытым.

У меня, конечно, две гипотезы: либо человек место на диске экономит, либо тестирует какой-то свой проект как на виртуалке, так и на реальном железе в одинаковой программной среде. Во втором случае ему надо рассказать про системы контроля версий и rsync, в первом беднягу можно только пожалеть: сами линуксы (не путать с запускаемым под ними софтом) на железе моложе 15 лет занимают не так много места, чтобы это было критически заметно. Хотя, конечно, свободного места много не бывает – но потраченного на работоспособность зоопарка времени мне было бы жальче, чем этого самого места.

Хотя следующая фраза многое объясняет:

Все что далее, сделано из Windows.

P.S. Мне определённо нужен отдых. Увидел на хабре заголовок «Что за Epyc такие?», сам удивился, полез читать и только увидев иллюстрацию к статье, понял, что это не Ерус, а Epyc (кто понял прикол, тот молодец).

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

Цель запускать на реальном ПК систему с виртуального диска. Ну, почему же странно? По-моему, это может быть удобно и интересно.

Я допустим хотел Генту на виртуалке ковырять. А потом грузить свой реальный ПК Гентой с флешки.

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

С учётом того, что истинные ценители Генты как раз затачивают её под максимально эффективную работу на конкретном железе (а оно с виртуалки и с хоста будет выглядеть по-разному), убедительность именно этого примера под большим вопросом.

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

А если я знаю железо своего ПК? И, допустим, в конфигурации ядра включу только драйверы для своего ПК.

Кароч, мне просто захотелось вот так взять, и загрузить Линукс с виртуального диска в свой реальный ПК. Я ж не линуксоид, просто интересно.

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

Gentoo handbook на этот счёт пишет:

Что такое загрузочный раздел BIOS?
Загрузочный раздел BIOS необходим, только если вы комбинируете разметку дисков GPT с загрузчиком GRUB2 в режиме загрузки BIOS/Legacy. Он не требуется при загрузке в режиме EFI/UEFI, и также не требуется при использовании дисков MBR. Это очень маленький (от 1 до 2 МБ) раздел, в который загрузчики типа GRUB2 могут разместить дополнительные данные, которые не помещаются в выделенное хранилище.
What is the BIOS boot partition?
A BIOS boot partition is a very small (1 to 2 MB) partition in which boot loaders like GRUB2 can put additional data that doesn't fit in the allocated storage. It only needed when a disk is formatted with a GPT disklabel, but the system's firmware will be booting via GRUB2 in legacy BIOS/MBR DOS boot mode. It is not required when booting in EFI/UEFI mode, and also not required when using a MBR/Legacy DOS disklabel.
grem ★★★★★
()
Ответ на: комментарий от grem

Спасибо. Блин, хз. Я хоть и читаю всю эту информацию. И Генту устанавливал, Хэндбук читал.

Но хочется прям увидеть код Биоса, код MBR (хотя и видел).

Ну и grub-install можно же сделать на сам диск /dev/sda, а можно на раздел /dev/sda1 А какая разница будет?

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

В общем, у меня устойчивое чувство, что много чего я не понимаю. Вот пример из статьи для Debian12 у меня не сработал. А почему? Вроде все делал так, как для Kubuntu 24, но потом мой реальный ПК не загрузился с виртуального диска, на котором была установлена Debian12.

Но, как тут писали, может в Дебиане этого нет изначально:

"linux /boot/vmlinuz root=/dev/disk/by-label/${d_label} loop=${imgfile} rw nosplash

То есть настоящий root получается на loop-устройстве. Это означает что в ядре должна быть поддержка loop и ntfs (раз у вас исходно под виндой)."

truebin
() автор топика
Последнее исправление: truebin (всего исправлений: 2)

Чтобы отбросить первый мегабайт при создании loop-девайса.
Потому что автор этой статьи не осилил GRUB - там в loopback можно указывать смещение, не извращаясь с двумя файлами.
Не читай всяую ересь на хабре.

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

А какая разница будет?

Ну, в первом случае, скорее всего grub просто установится, а во втрором будет ругаться, что файловая система не поддерживает встраивание, нужны blocklists, тогда ещё добавляют опцию --force и там как повезёт. И тогда нужно будет флаг active для /dev/sda1 и в MBR загрузчик, который загружает загрузчик из первого сектора активного раздела. У вас ведь есть виртуалка, пробуйте...

прям увидеть код Биоса, код MBR

Чего? В MBR, кроме таблицы разделов, которая данные, а не код, может лежать любой загрузчик. Беретё исходики grub, lilo, syslinux и т.д. и изучаете до посинения. А BIOS — ну дизассемблируйте и уковыряетесь разбираться, что там что делает.

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

Автор на хабре пишет:

Возникла необходимость обеспечить работу Linux как на виртуальной машине (VirtualBox), так и на реальном железе.

Для чего ему потребовалось делать это именно из одного образа вместо того, чтобы накатить одну систему в 2 места, осталось нераскрытым.

Затем, что сначала формируется рабочий образ на виртуалке, а затем он запускается в прод на реальном железе. Подсказка для тех, кто совсем туп - более чем на одном экземпляре железа. И потом обновляется по мере необходимости весь образ. Именно так выглядит «обновление ПО» за пределами лоровских локалхостов.

Задача-то в целом совершенно нормальная.

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

Спасибо. Да фантазия по применению безгранична, по-моему. Плюс вот я сейчас застопорился, что у меня не грузится Debian12 таким образом. Вот, читаю тут ответы. Про grub гуглю.

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

В чём это нормальная задача — делать чтобы корень был в /dev/loop, а файл под этим /dev/loop лежит на ntfs?

более чем на одном экземпляре железа

Да вы гений, вы ещё этот образ будете без копирования шарить на несколько серверов?

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

ИМХО, вам нужно читать про то как распаковать initramfs (тот файл, который в конфиге груба указывается дерективой initrd). Тогда сможете поизучать содержащиеся там файлы/скрипты. Скорее всего, просто ″grep loop″ по всем файлам от ubuntu покажет что-то содержательное. А в Debian12, наверно, подобного кода не найдётся.

А grub, который у вас стартует с флешке, он же один, для разных дистрибутивов. Меню же он вам рисует? Ещё поди и ядро запускает...

Вобще, наверное, можно создать виртуалку с виндой (NTFS), установить туда этот ventoy grub и копируя туда test1-flat.vmdk проверять на ней, будет ли загрузка линукса, чтобы не заниматься постоянным ребутом физической системы.

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

Ну, не знаю. :) Мне просто хотелось так Генту грузить. И любые дистры. Я хочу иметь такую возможность, мне кажется, это будет удобно лично для меня.

Главное разобраться. А потом – можно использовать или нет. Например, можете погуглить, из чего произошла современная криптография: из казалось бы бесполезных экспериментов в математике.

Да и насколько мне известно: нас окружает множество вещей, но не всегда мы знаем, как и где их можно применить.

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

Для чего ему потребовалось делать это именно из одного образа вместо того, чтобы накатить одну систему в 2 места, осталось нераскрытым.

Может такая самосборная альтернатива tails? Или целевая железка со спецефической внутрянкой\перефирией и он что-то пишет\накатыает под неё? Не знаю, сама возможность интересная, на мой взгляд.

понял, что это не Ерус, а Epyc

ЕРУЗ 😁

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

«чтобы не заниматься постоянным ребутом физической системы»

Я на виртуалке и проверяю. Не перезагружаю систему. Беру флешку с Ventoy, подключаю ее к машине VMware (У меня Винда на Десктопе), и загружаю машину с флешки.

Вот по инструкции автора с Хабра, где надо создать диск из 2-х частей, Кубунта загрузилась.

Потом я установил Кубунту на диск из одной части – и не работает. И вот тут писали про смещение на loop-устройстве.

В общем, мне надо понять процесс, как идет загрузка.

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

Да и насколько мне известно: нас окружает множество вещей, но не всегда мы знаем, как и где их можно применить.

В таком случае, стоит прислушаться к мнению более опытных товарищей, а именно: никогда не запускай «Линукс» внутри виртуальной машины! Так поступают только «окошечные» админы и прочие недоучки. Мастера «Линукса» всегда работают с аппаратурой напрямую.

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

Ну, разбирайтесь. Может напишете развёрнутую статью. Мне эта статья с хабра не понравилась по двум причинам:

Я ставил только эти дистрибутивы, начиная с версий 18.04 до последней (еще не вышедшей) 21.04, все остальное не проверял.

То есть, автор, похоже, не разобрался как это у него работает и какие требования к дистрибутиву, чтобы работало.

И излагает путано, вот эти названия: test1.vmdk, test1-flat.vmdk, test1-boot.vmdk, а потом ещё раз и вылазит test.vmdk.

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

Ну, если вы пилите свой initramfs и вам нужно отлаживать его скрипты, то геморно без виртуалки. Хотя, конечно, мастера пишут код с первого раза и без ошибок, но недоучкам то тоже хочется кодить...

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

Не понял вас. Некрасиво, что ли, запускать Линукс на виртуалке?

А облачный линуксовый сервер на Амазоне, например – это норм или нет?

Вообще, я думаю, есть задача (идея) – и ее можно или нельзя реализовать. И вот у меня есть желание реализовать эту фичу. Если у вас нет вариантов, чем подсказать – это другое дело.

А какая-то там кошерность – не мое. Я не линуксоид, разрешаю себе косячить.

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

Че-то мне кажется, что параметры ядра тут не при чем. Я пробовал 2 варианта установки Кубунты 24:

  1. По инструкции – «двойной» диск vmdk (как пишет автор) – работает
  2. И на один монолитный vmdk – не работает.

Какие-то настройки с грубом, я так думаю.

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

По этой статье с хабра у меня далеко не сразу получилось загрузиться с флешки.

Ну, кароч, я попробовал несколько раз с Убунтой (не сработало) – на месяц отложил. Потом вчера решил прям Кубунту установить, о которой пишет автор. И, о чудо, – заработало. :) Ну интересно же.

Статья мне тоже не понравилась особо, но она рабочая и короткая. И она вполне неплохая хотя бы тем, что автор не обещал золотых гор. А скромно, насколько всё понял и реализовал, изложил.

И вот теперь бы понять, как не делать дополнительный диск 1 Мб, и как грузить любые дистры.

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

Тут не смотрел? В частности п. 2:

After install and boot into the linux distro. Run vtoyboot script to make some process to support Ventoy boot.
vtoyboot is a project developed with Ventoy and released separately. Download its package from here:
https://github.com/ventoy/vtoyboot/releases

Put the downloaded package into the linux distro, decompress it and run vtoyboot.sh as root sudo sh vtoyboot.sh
Note that vtoyboot will be updated to support more Linux distros and fix bugs, so please use the latest release. 

У самого лежит в закладках на эту тему, но пока некогда и особо не на чем всё это ковырять, поэтому посмотрю со стороны)

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

Ну, если вы пилите свой initramfs и вам нужно отлаживать его скрипты, то геморно без виртуалки.

Для себя никакой пользы «Инитрамэфэса» я не вижу. Если нужно подгрузить второй драйвер после загрузки первого драйвера, то я загружаю первый драйвер внутри ядра, а второй драйвер - модулем. Таким образом, последовательность загрузки драйверов достигается без использования «Инитрамэфэса».

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

А вы раскройте, что для вас значит:

а затем он запускается в прод на реальном железе.

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

Я процитировал

И начали спорить с процитированым.

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

Да, разве, загрузка модулей это задача? Собрать RAID1, проверить корень, чтобы не загружать fsck с непровереной корневой ФС.

И посмотреть, что будет, если raid в degraded или какие ip-адреса назначится на сетевые интерфейсы в initramfs в отсутствие dhcp-сервера, отправятся ли логи fsck на сервер. Вот это всё без виртуалки отлаживать долго.

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

Ну, там в конце статьи написано:

Но, к сожалению, у меня эти манипуляции привели к тому, что загрузка работает либо на реальном железе, либо в VirtualBox. И там и там с одним образом не получается.

Вроде, как раз про эту ссылку речь идёт.

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

Читал про диагонали, пропустил)

Вентоевцы пишут что этот скрипт в активной разработке, может с 2021го года что-то да поправили, в любом случае считаю изучить оф. документацию одного из используемых инструментов будет не вредным. :)

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

Они бы ещё расписали, как у них это работать должно. То, что они в расширяемые системы сборки initramfs (dracut, initramfstool, mkinitcpio), добавляют свои скрипты, поняно. Но они зачем-то тащут три модуля ядра: dm_patch_32.ko, dm_patch_ibt_64.ko, dm_patch_64.ko. Которые непонятно зачем нужны, и из-за которых, вроде как, всё ломается, при смене версии ядра.

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

Я процитировал

И начали спорить с процитированым.

Да. И? В этом был смысл моего поста - привести реальный пример использования сценария, который до моего поста был выставлен как «нереальный» и «надуманный».

а затем он запускается в прод на реальном железе.

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

А по-моему не выглядит. Если по вашему выглядит, то в какой запятой?

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

До вашего поста был выставлен нереальным сценарий, описаный в статье. А именно, запуск линукс на реальном железе, но с корневой ФС в образе от виртуалки. Не с копией содержимого *.vmdk файла на реальный SSD или куда там, а именно корневая ФС через /dev/loop в файл *.vmdk, который лежит на NTFS.

Было утверждение, что реально, это:

накатить одну систему в 2 места.

То есть, установить в виртуалку и скопировать её образ на реальное железо. Так как вы начали утверждать, что описаный в статье сценарий реальный, получается, вы за то, чтобы всё «из одного образа», а не из копии образа.

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

Вчера посидел еще. В общем, надумал такое.

Автор статьи на Хабре https://habr.com/ru/articles/547512/ делает диск VMDK из двух частей.

Маленькая часть 1М - в нее, как я понял, записывается первая часть (низкоуровневая) загрузчика grub (и наверное сама таблица mbr всего диска – тоже на этой маленькой части). А вторая часть диска - получается без этой низкоуровневой части.

И когда мы хотим загрузить машину в виртуальной среде VMWare – то диск VMDK «берется» с двумя этими частями.

А когда хотим грузить реальное железо через Ventoy – берется только вторая большая часть диска VMDK, на которой вся система (в том числе, и файлы grub). И на этой большой части диска нет (как я понял) низкоуровневого кода grub. Поэтому, наверное, Ventoy и может грузить такой «образ», на котором нет записи grub.

Мне интересно именно с диском VMDK поэкспериментировать. Будет еще время – буду пробовать.

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

котором нет записи grub

Да тут без разницы, grub, MBR или просто мусор в том первом мегабайте. Для загрузки через Ventoy, точнее через loopback-устройство, нужен файл-образ, в котором ФС начинается с самого начала.

И, если вы таким образом хотите грузить gentoo, то туда вместо genkernel нужно ставить dracut, к нему можно будет прилепить скрипты, реализующие загрузку через /dev/loop0. Ну, и в приницепе, если писать свой скрипт, то, наверное, можно будет добавить туда поддержку разделов (MBR) на loopback...

mky ★★★★★
()