Для чего в опциях загрузки Linux с initrd указывают параметр root?

Не понимаю, с какой целью в любом загрузчике ядро грузится с параметрами initrd и root. Как везде написано, initrd - виртуальная файловая система, которая загружается ядром в память и монтируется в корень на начальном этапе загрузке. Затем там исполняется скрипт, который и монтирует настоящий корневой раздел. Как я понимаю, вся информация о "настоящем" корне должна находится именно в этом скрипте, тогда с какой целью в параметраз загрузки указывается root раздел? Эта информация нужна ядру, по сути, только тогда, когда не используется initrd и монтирование корня происходит при помощи модулей.
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
с какой целью в любом загрузчике ядро грузится с параметрами initrd и root.

Попробуй-ка загрузиться на FreeBSD на нестандартном железе - вспомнишь как всех чертей зовут, потому что перед этим нужно создать конфиг ядра с описанием устройств и пересобрать ядро по этому конфигу, и пока этого не сделаешь - фиг у тебя что заработает.
Вот загрузка initrd и решает такие проблемы. Сначала грузится некий "детектор оборудования", который проверяет, что натыкано в тачку и грузит соответствующие дрова. А уже потом делает change root и начинает исполнять настоящие стартовые скрипты.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Karpion
Честно говоря, я не понял, зачем вообще надо делать так сложно. Ибо монтировать initrd - ничуть не проще, чем монтировать дисковую корневую систему, ведь в любом случае надо монтировать. А ещё неясно, зачем так скрипт - и соответственно, его интерпретатор.
Команду "монтировать корневой раздел только для чтения" - можно выдать из загрузчика, он же передаст все параметры, т.е. выполнит работу, которую обычно делает программа mount.
Держать на диске два экземпляра корневой системы (один для загрузки в RAM, второй для нормальной работы) - так себе идея.
Ответ написан
@Vitsliputsli
Можно и не использовать initrd, это вполне нормально, когда работаешь на одном и том же железе. Но, если нужно запускаться на любом железе, то придется все модули всех возможных вариантов железа с которого нужно грузиться засунуть в ядро, держать в памяти такое большое ядро нет смысла, поэтому и создан промежуточный этап при загрузке, когда все эти модули помещаются в initrd..
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы