LINUX.ORG.RU
ФорумAdmin

Откуда система знает с чего грузиться, если нет /boot ?

 , , ,


0

1

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

На новом железе торопясь ставил ОСь, в связи с чем не совсем, но всё-таки бездумно копи/пастил с какого-то мана команды. Сейчас, наводя порядок, решил отключить ipv6 в грабе. Внёс изменения в /etc/default/grub ну и вводя команду на обновление его, табом саму команду дополняю, но после /boot ничего не дополняется. ls’ом смотрю, а там нифига нет. Открыл fstab, а результатом моего бездумного копи/паста, туда залетела команда монтирования sda1 с параметрами noauto,noatime что первым параметром говорит не монтировать автоматически. На sda1 лежат файлы ядра, инитрамфс, граб и т.п…

Вопрос - а как система грузится без всех необходимых для загрузки файлов?

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

Если у тебя EFI

Ну да! Железу лет 5, там EFI. Я читал, что рядом с EFI ставят граб для более гибкой настройки загрузки, но при установке загрузчика была команда grub-install --target=x86_64-efi --efi-directory=/boot с предварительно смонтированным /dev/sda1

Сейчас это выглядит так

lsblk 
NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda             8:0    0 447,1G  0 disk  
├─sda1          8:1    0   384M  0 part  /boot
└─sda2          8:2    0 446,8G  0 part  
  └─root      254:0    0 446,7G  0 crypt 
    └─vg-root 254:1    0 446,7G  0 lvm   /
ls -l /boot/
итого 57576
-rwxr-xr-x 1 root root   148480 фев  5 17:57 amd-uc.img
drwxr-xr-x 3 root root     4096 фев  5 20:21 EFI
drwxr-xr-x 6 root root     4096 фев  8 19:46 grub
-rwxr-xr-x 1 root root 14557704 фев  6 06:51 initramfs-6.6.74-gentoo-x86_64.img
-rwxr-xr-x 1 root root  6392222 фев  6 06:35 System.map-6.6.74-gentoo-x86_64
-rwxr-xr-x 1 root root 11989504 фев  6 06:35 vmlinuz-6.6.74-gentoo-x86_64

EFI же на /dev/sda1, то есть его всё равно необходимо смонитровать

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

Файлы из /boot читает grub, ему не важно что написано в fstab, он это делает до запуска ядра своими силами

/boot пустой во время запуска, так как не смонтирован. Ядро на /boot (/dev/sda1). Почему загрузка происходит?

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

Для загрузки используется очевидно read only режим, и никто другой раздел не читает и не пишет в тот момент. На правах предположения, доступ там упрощен и не требует «юзерской» процедуры mount, или делает mount RO и затем un-mount

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

Хорошо. Тогда имеет ли какую-то важность очерёдность разделов? Если я предположим расположу необходимые файлы для загрузки ОСи на /dev/sda50, а корень у меня будет в /dev/sda1. Произойдёт ли правильная загрузка ОСи?

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

Да, если grub установлен и сконфигурирован правильно.

Понимаешь, ядро грузится через grub, грузится в память целиком, после чего необходимость читать /dev/sda50 отпадает. Если граб ок, то и ядро ок.

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

Ещё раз: grub не использет fstab и ядерные монтирования для чтения своих конфигов. То что ты смотришь /boot из линукса это его содержимое по версии ядра. А у grub свой драйвер файловой системы который сам читает этот раздел. О том, какой именно раздел надо смотреть, у него где-то прописано в его собственных данных, не помню кто прописывает.

firkax ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

доступ там упрощен и не требует «юзерской» процедуры mount

grub при всём желании не может сделать никаких mount, это сисколл ядра, а ядро ещё не загружено.

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

Загрузчик работает до запуска операционной системе, для него корень - это efi раздел с которого ты грузишься (если ты конечно не решил сделать отдельный раздел под /boot как делает убунта - что в целом бессмысленно)

mittorn ★★★★★
()

про grub тебе уже в принципе всё написали. Он же и грузит initramfs.

Добавлю, что /etc/fstab это не более чем конфиг файл, который может обрабатываться различными сервисами/скриптами. Т.е. по ходу загрузки корневой и другие разделы могут неоднократно монтироваться и размонтироваться в зависимости от того, как у тебя настроена загрузка вообще и initramfs в частности.

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

grub знать не знает что такое точка монтирования linux /boot и сам linux он тоже не знает, но ему и не нужно, ему нужно только передать управление ядру linux, у него своя система для чтения устройств, ФС и прочего, но функционал ограничен само собой и поэтому придумали ещё всякие initramfs.

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

Так система или загрузчик?

Во-первых, не путать где работа загрузчика, а где работа системы.

Во-вторых. Если система, то начинать с параметра ядра «root=». Если загрузчик, то параметр тоже «root», но это совершенно другой параметр, не имеет никакого отношения к параметру ядра.

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

Если система, то начинать с параметра ядра «root=». Если загрузчик, то параметр тоже «root», но это совершенно другой параметр

Вот тут нифига не понял

GRUB_CMDLINE_LINUX="ipv6.disable=1 crypt_root=/dev/sda2 root=/dev/mapper/vg-root rootfstype=ext4 dolvm quiet"

Вот тут у меня параметр root что грузит, систему или загрузчик?
Я так полагаю что систему

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

О, а вот и свидетели efi-stub подтянулись. Давай, расскажи мне, как ты будешь менять параметры ядра для одной отдельной загрузки (там, проверить чего-нибудь понадобилось).

anonymous
()

В UEFI, прям в прошивке биоса, есть своя примитивная ОС, способная читать ограниченное количество файлсистем. Собственно её задача это получить список дисков, посмотреть что там на них в порядке приоритета или согласно настройкам биоса, и первое что выглядит как надо (какой-нибудь BOOTX64.EFI) прочитать в память и передать управление. Что там внутри этого EFI оно уже понятия не имеет. И скорее всего ext4 файлсистемы со всякими fstab в принципе прочитать не может, там старый добрый деревянный FAT нужен.

Этот EFI лоадер, получив управление, решает что дальше делать. Обычно ты его генерируешь когда ставишь систему. У линуха свой, у винды свой, груб как раз и есть вариант лоадера. Вот берёт этот груб читает диск дальше (вызывая отдельные функции из UEFI/биоса), находит ядро, всякие initramfs, и запускает ядро с параметрами, которые ты прописал в его конфиге когда генерил EFI.

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

neumond
()