Капаю в сторону понимая работы initrd в Linux.
прочитал: http://www.opennet.me/base/sys/initrd_intro.txt.html
и еще кучу документации, но везде в основном говориться что из себя представляет и как собрать initrd образ, но вот мне не понятно для чего он нужен вообще?
Ведь если GRUB способен понять файловую систему /boot где лежит и initrd и само ядро vmlinuz, почему нельзя вкомпилить прямо в основное ядро все драйверы для того же LVM, специфичных SCSI адаптеров и т.д... разве так нельзя?не пинайте пожалуйста, а помогите разобрать :(
>все драйверы для того же LVM, специфичных SCSI адаптеров и т.д...
>разве так нельзя?Можно, почему ж нельзя? Ты будешь для этого пересобирать ядро? А для каждой из имеющихся у тебя машин? А каждый раз "потом" - для каждой новой машины? Успехов. Дистрибуторы "для себя эту проблему решили": ядро со всеми драйверами в модулях и пересборка только initrd... Или типа того.
>Можно, почему ж нельзя? Ты будешь для этого пересобирать ядро? А для
>каждой из имеющихся у тебя машин? А каждый раз "потом" -
>для каждой новой машины? Успехов. Дистрибуторы "для себя эту проблему решили":
>ядро со всеми драйверами в модулях и пересборка только initrd...
>Или типа того.Эээээ, а что - пересобрать на 100 машинах initrd образ это гораздо легче чем пересобрать ядро? по моему одинаково по трудозатратам, единственное что ядро будет дольше собираться, а обходить, грубо говоря, всё равно придется все машины...
про дистрибуторов - вот например берем RHEL, из коробки нету поддержки reiserfs, как мне его включить в initrd не пересобирая всё ядро полностью?
В наше время ядро ради добавления оборудования пересобирают очень редко. Для поддержки оборудования есть модули, но на стадии загрузки может не оказаться поддержки того, на чем расположен / или /boot, а как следствие нет доступа к модулям. Эта и ряд других проблем решается через initrd.
P.S. Если вы пока не столкнулись с ситуацией когда что-то нужно, то не стоит заявлять что это не нужно всем.
>В наше время ядро ради добавления оборудования пересобирают очень редко. Для поддержки
>оборудования есть модули, но на стадии загрузки может не оказаться поддержки
>того, на чем расположен / или /boot, а как следствие нет
>доступа к модулям. Эта и ряд других проблем решается через initrd.
>
>P.S. Если вы пока не столкнулись с ситуацией когда что-то нужно, то
>не стоит заявлять что это не нужно всем.Во-первых, где вы видете что я заявлял что это никому не нужно? я наоборот понимаю что нужно и хочу понять зачем именно?
вот ваш пример не особо понятен мне в плане - если не доступен /boot то как будет доступен расположенный на нем initrd??? или вы и initrd.img располагаете на другом (отличном от /boot ) разделе? но какой в этом сакраментальный смысл если на этом самом доступном разделе и можно положить vmlinuz???
Разберем простую загрузку с винта. У вас есть ядро, большинство оборудования поддерживается модулями, в самом ядре только самое необходимое. Все замечательно пока вы ставите на обычные ide диски. Но в какой-то момент вы наталкиваетесь на машину, где загрузка будет идти с raid/sata/scsi, то есть с чего-то что не поддерживается самим ядром. При этом загрузчик без проблем получит доступ к этому оборудованию за счет BIOS, а вот ядро BIOS уже не использует. Загрузчик считывает с диска vmlinuz и initrd и передает им управление. Обратите внимание что initrd считывается загрузчиком, не ядром. В результате ядро получает доступ к мини /, на котором есть нужные модули, а заодно некоторые скрипты+утилиты. Все это в конечном итоге обеспечивает доступ к настоящему /, который и монтируется впоследствии.
Если хочется более экзотического варианта, то посмотрите как устроена загрузка по сети с монтированием / по nfs или с разбивка + форматирование + заливание образа на винчестер.
>[оверквотинг удален]
>чего-то что не поддерживается самим ядром. При этом загрузчик без проблем
>получит доступ к этому оборудованию за счет BIOS, а вот ядро
>BIOS уже не использует. Загрузчик считывает с диска vmlinuz и initrd
>и передает им управление. Обратите внимание что initrd считывается загрузчиком, не
>ядром. В результате ядро получает доступ к мини /, на котором
>есть нужные модули, а заодно некоторые скрипты+утилиты. Все это в конечном
>итоге обеспечивает доступ к настоящему /, который и монтируется впоследствии.
>Если хочется более экзотического варианта, то посмотрите как устроена загрузка по сети
>с монтированием / по nfs или с разбивка + форматирование +
>заливание образа на винчестер.простите великодушно за назойливость :)
но вот в вашем примере - почему нельзя просто перекомпилировать ядро для поддержки эти raid/sata/scsi и когда grub передаст ему управление и оно уже имея поддержку этого оборудования продолжит загрузку? в чем минусы такого подхода кроме как перекомпиляции ядра??
Можно, но зачем? Гвозди, знаете, тоже можно забивать микроскопом, но почему-то этого не делают. Кроме того, повторю еще раз, initrd это не только набор модулей, но еще скриптов+утилит. Можете сколько угодно перекомпилировать ядро, но без initrd нормальную загрузку по сети вы не сделаете.
>>Можно, почему ж нельзя?(1)
>>машины? Успехов.(2)
>Эээээ, а что - пересобрать на 100 машинах initrd образ это гораздо легче чем пересобрать ядро?
Да. Именно это, в общем-то, и было сказано.
> по моему одинаково по трудозатратам, единственное что
(1)+(2)+флаг+барабан. Никто _не_заставляет_, да - можно, рекомендую даже: пособирайте, может пройдёт, а может нам неразумным расскажете про Великий Путь Просветления...
>ядро будет дольше собираться, а обходить, грубо говоря, всё равно придется
>все машины...Чем пересборка ядра Вам поможет в решении "проблемы" хождения по машинам?
>про дистрибуторов - вот например берем RHEL, из коробки нету поддержки reiserfs,
>как мне его включить в initrd не пересобирая всё ядро полностью?(1)+(2)+флаг+барабан.
Вопросы?
>[оверквотинг удален]
>>все машины...
>
>Чем пересборка ядра Вам поможет в решении "проблемы" хождения по машинам?
>
>>про дистрибуторов - вот например берем RHEL, из коробки нету поддержки reiserfs,
>>как мне его включить в initrd не пересобирая всё ядро полностью?
>
>(1)+(2)+флаг+барабан.
>
>Вопросы?пляя, вот из-за таких вот ответов люди и отворачиваются от linux подобных ОС. Вместо того чтобы объяснить или посоветовать что-то конкретное прочитать - давайте лучше и проще обосрём человека с ног до головы. Товарищ Митрофанов, если вам нечего сказать - лучше не поливайте тут помоями своего умишки, а просто промолчите, сойдете за умного. Не устраивайте здесь ЛОР.
>>Вопросы?
>
>пляя, вот из-за таких вот ответов люди и отворачиваются от linux подобных
>ОС. Вместо того чтобы объяснить или посоветовать что-то конкретное прочитать -
>давайте лучше и проще обосрём человека с ног до головы.Если это был _вопрос_, отвечаю. Таки да, у меня есть, что сказать -- тем, кто умеет спрашивать и слушать-читать ответ, очень желательно наличие само ирониии, самооценки хотя бы. На ЛОРе скучно и тупо, спасибо, лучше /вы/ к нам. Про обсирание/помои -- свежий воздух, витамины, самомнение вазелином смазывайте, если продолжится -- проконсультируйтесь с доктором (на ЛОРе, я слышал, это в ассортименте).
>Товарищ Митрофанов, если вам нечего сказать - лучше не поливайте тут помоями
>своего умишки, а просто промолчите, сойдете за умного.ЛОРовский логпед тебе "товарищ"! :-P
> Не устраивайте здесь ЛОР.
ЗЫЖ yes, ihbt
Добвалю что initrd это не только набор модулей ядра, но и набор скриптов+утилит. И возможности применения ограничиваются вашей фантазией.
Ещё раз, терпите. :)
>и еще кучу документации, но везде в основном говориться что из себя
>представляет и как собрать initrd образ, но вот мне не понятно
>для чего он нужен вообще?initrd - простейшая файловая система, которая может быть загружена в память начальным загрузчиком вместе с ядром ещё _до_ запуска самого ядра, и драйверов железа и монтирования "реальных" файловых систем.
Вот _для_чего_ -- уже масса вариантов: - дистрибутивное ядро, где всё железо модулями, - уже писал; - сетевая загрузка; - некоторые делают всю систему внутри initrd (=в памяти, без hdd), вроде бы... google.ru применение initrd