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 ★★★★★
()
Ответ на: комментарий от invokercd

VBR ? Не, не слышал ?
Скажи, только честно, каким загрузчиком ты пользовался до того как узнал про syslinux ?

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

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

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