LINUX.ORG.RU
ФорумAdmin

Куда пишется syslinux?

 , , , ,


0

2

Не могу найти вменяемую инфу по расположению загрузчика непосредственно на разделе, а именно куда он должен писаться (кроме начала раздела).

В моей ситуации он пишется в mbr + в самое начало раздела (с 1048577 байт) + размазывается еще частями вплоть до 131DF (1252848 байт).

Есть какая-то схема или это рандомно выбирается в зависимости от наличия данных на разделе?

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

dada ★★★★★ ()

В MBR есть специальный раздел для загрузочного кода. После POST запускается этот код, а потом jmp хоть к черту на кличики.

Deleted ()

Что значит

(кроме начала раздела)

?
В начале раздела вполне достаточно места чтобы разместить драйвер файловой системы, а остальное --- дело техники.
Он читает что написано в конфиге и уже подгружает ядро или какие-нибудь .c32 модули. Что тут может быть непонятного ?

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

достаточно места

Что тут может быть непонятного ?

Вот это и не понятно, достаточно сколько?, где конкретные данные? По сути дела на любом разделе есть файлы (данные) которые сами по себе занимают место, следовательно размер который выделяется для загрузчика должен быть лимитирован.

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

Прав то ты прав. Я столкнулся с таким приколом когда переносил данные с одного винта на другой. В общем даже если пользуешь GPT + классический вариант загрузки то приколы то случаются как показала практика...

DALDON ★★★★★ ()

Вот здесь с точностью до байта расписано что где лежит в ROM/RAM.

Для Ъ, Volume Boot Record грузит ldlinux.sys, который уже грузит драйвер ФС, читает syslinux.cfg и т.д. Расположение файла /boot/syslinux/ldlinux.sys не должно менятся в ФС (ставится атрибут immutable).

mtk ()

В дополнение к уже указанной ссылке по структуре секторов немного более общими словами: https://wiki.archlinux.org/index.php/Syslinux#Syslinux_boot_process

В отношении «Есть какая-то схема или это рандомно выбирается», основной код загрузчика находится в обычных файлах, они пишутся на диск как обычные файлы, штатными системными вызовами, через драйвер ядра данной файловой системы. Поэтому в каких секторах будет лежать ldlinux.sys и ldlinux.c32 определяет драйвер ФС — зависит от наличия данных на разделе.

Инсталлятор загрузчика запрашивает у ядра адреса секторов файла ldlinux.sys. Адрес первого сектора заносится в боот-сектор, остальные адреса, по идее, должны сохрянятся в этом первом секторе ldlinux.sys.

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

они пишутся на диск как обычные файлы

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

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

В смысле «свободный блок»? Я как-то этого в коде 6-ой версии syslinux не увидел, но может просмотрел или в 6-ой версии поменяли.

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

Насколько я понял, sectmap просто создаёт список секторов, на которых находится файл, ей всё равно, как файл расположен. Я не полностью разобрался с sectmap_fie() (через FIEMAP), но sectmap_fib() (через FIBMAP) проще некуда. Там просто по номерам блоков в файловой системе определяются номера секторов и заносятся в блок памяти, выделенный через calloc в main(). А потом уже правится содержимое файла ldlinux.sys, с записью напрямую в эти сектора.

Но в каких блоках (секторах) будет лежать файл и как он будет фрагментирован, определяет только драйвер ядра. Или я не так понял код?

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

Формулирую, на разделе 1 (размером 850 MiB) записано 800 MiB данных. На него устанавливается загрузчик (пусть будет syslinux), куда именно из свободных 50 MiB он будет установлен, и сколько места он займет (гиг, 8 байт, etc...)? И чем регламентируется размер занимаемого пространства, какие есть ограничения?

Есть же какие-то лимиты, или разумные пределы.

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

Спасибо. Но, ведь этих файлов «не видно» (кроме ldlinux.sys), хотя они находятся уже на разделе....

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

Ты просто удалял inode с индекса фс, физически файл остается на диске. Адрес ldlinux сохранен в VBR, поэтому ничего не поломалось.

mtk ()

Если раздел ext2 то «extlinux --install --device=/dev/sda1 /boot»
Раздел станет загрузочным. В /boot появится ldlinux.sys, при загрузке будет читаться конфиг /boot/syslinux/syslinux.cfg

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

Не слышал, оттуда и тема возникла, заинтересовался. Узнал про syslinux то я давно, но не вникал. А юзаю grub (честное слово).

invokercd ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.