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

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

>  с какой целью в любом загрузчике ядро грузится с параметрами initrd и root. 

  

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

Вот загрузка initrd и решает такие проблемы. Сначала грузится некий "детектор оборудования", который проверяет, что натыкано в тачку и грузит соответствующие дрова. А уже потом делает change root и начинает исполнять настоящие стартовые скрипты. 

<https://wiki.gentoo.org/wiki/Initramfs/Guide/ru> 

 Честно говоря, я не понял, зачем вообще надо делать так сложно. Ибо монтировать initrd - ничуть не проще, чем монтировать дисковую корневую систему, ведь в любом случае надо монтировать. А ещё неясно, зачем так скрипт - и соответственно, его интерпретатор.  

Команду "монтировать корневой раздел только для чтения" - можно выдать из загрузчика, он же передаст все параметры, т.е. выполнит работу, которую обычно делает программа mount.  

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

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