Почему бы нам не включить драйверы файловой системы в ядро, а не использовать Initrd / Initramfs

Ядро Linux содержит очень минимальный код, необходимый для загрузки на большинстве устройств, но я не понимаю, имеет ли Initrd / Initramfs.
Насколько я понял, задача Initrd / Initramfs заключается в временном предоставлении драйверов файловой системы для фактической загрузки корневой файловой системы.
Если это так, то почему бы нам просто не добавить необходимые драйверы файловой системы в самое ядро.
Мы должны в конечном итоге загружать как ядро, так и Initrd / Initramfs, поэтому почему бы не интегрировать оба в один файл изображения, поскольку оба они занимают одинаковый объем памяти.

*******Обновить******

1. Что на самом деле представляет собой ядро ​​linux? Это просто изображение vmlinuz (приблизительно 5-6 МБ) или коллекция загружаемых модулей, изображение vmlinuz, файл initrd и другие компоненты.
2. Почему размер образа ядра vmlinuz (приблизительно 5-6 МБ) меньше размера файла initrd (около 18 МБ). Ядро содержит код для многих других вещей по сравнению с initrd, который содержит только код для монтирования файловой системы.

Я новичок в этом, так любезно объясните. Спасибо.

2 Solutions collect form web for “Почему бы нам не включить драйверы файловой системы в ядро, а не использовать Initrd / Initramfs”

Во-первых, это не только драйверы файловой системы. Это также драйверы для любого устройства хранения, на котором установлена ​​файловая система. И, возможно, больше, если вы используете LVM, шифрование и т. Д.

Независимо от того, безусловно, можно построить их в ядре. Я знаю, что slackware по крайней мере имеет выбор ядра с именем «огромный», который делает именно это и не требует initramf для обычного ПК.

Недостатком является то, что такое ядро ​​должно включать в себя все, что может понадобиться: всякая возможная файловая система, которая может использоваться как root, драйверы устройств для любой файловой системы и т. Д. Таким образом, вы получаете раздутое ядро, которое содержит много неиспользуемого кода и памяти отходов.

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

Ответ на изменения:

  1. Вероятно, это зависит от того, кого вы спросите и в каком контексте. Для меня это все, что работает в пространстве ядра, так что включает в себя все драйверы. У разработчика ядра может быть другое представление со многими другими именами для разных частей.

  2. Фактически, подавляющее большинство кода ядра являются загружаемыми модулями и драйверами. Некоторые из них довольно большие. В моей системе только btrfs составляет 500 кБ. NFS почти такой же большой. ext4 – 300 кБ. Существует огромное количество поддерживаемых устройств хранения данных, и вам может понадобиться любой из них для получения вашей корневой файловой системы. Просто просмотрите /lib/modules/*/kernel/drivers/ в Linux-системе, и вы увидите.

Это немного проблема с курицей и яйцом … Вы можете (и, как правило, должны) позволить многим вашим драйверам быть модулями, поддерживать ядро ​​и экономить память (до тех пор, пока вам не понадобится модуль). Однако вам нужны некоторые драйверы, встроенные в ваше ядро ​​- в частности, для любого устройства, загружаемого с вашего устройства (например, CD-ROM, HDD, …), используемой файловой системы (например, iso9660, ext4, …) и любых дополнительные драйверы, необходимые для поддержки этого (например, поддержка USB, поддержка SCSI, …). Если вы этого не сделаете , ваше ядро ​​не сможет получить доступ к среде и файловой системе, где находятся модули для дополнительных драйверов, и, следовательно, не может загрузить их в ядро.

Если вы создадите собственное ядро ​​для своей собственной системы – где вы заранее знаете, какое оборудование (тип HDD, тип DVD-привода и т. Д.) У вас есть – это не проблема. Вам просто нужны драйверы для того, что вы на самом деле получили или думаете, что вам может понадобиться. И вам нужно только включить в ядро ​​драйверы, необходимые во время загрузки.

Однако, если вы создаете установочный диск для дистрибутива, вы должны включить драйверы для всех возможных пользователей оборудования, которые, вероятно, будут сталкиваться! Включение их всех в ядро, сделало бы ядро ​​безнадежно раздутым, и на низкосортных системах потребуется слишком много ОЗУ. Создание всех модулей драйверов не будет работать, потому что для их загрузки могут понадобиться модули. Решение является initrd !

initrd – это образ RAM-диска, который загружается в память при запуске. Все драйверы, которые, вероятно, понадобятся, относятся к этому как к модулю. Пока в ядро ​​включены драйверы для чтения DVD, чтения файловой системы на DVD и чтения RAM-диска; он сможет получить доступ и загрузить по требованию драйвер-модули из initrd. Это решает проблему для тех, кто делает дистрибутивы, чтобы сделать ядро ​​как маленьким, так и включать драйверы для каждого оборудования, на котором он может работать.

Большинство пользователей, вероятно, продолжают использовать initrd-boot после того, как они установили Linux на свои жесткие диски … Это не так уж и сложно, поскольку они могут создавать настраиваемое ядро ​​- возможно, с дополнительными модулями ядра – настроенными для оборудования, которое они действительно получили. Двухэтапный процесс первой загрузки initrd занимает немного времени во время загрузки.

  • Сколько контроля над конкретными файловыми системами над кешем inode VFS и кешем буфера?
  • База данных Kernel IPsec SA: FIFO вместо LIFO
  • / boot symlinks не соответствуют текущей версии ядра
  • Некоторые основные вопросы о безопасности ядра Linux
  • Linux Mint 18.1 имеет только 4 ГБ оперативной памяти, но 8 ГБ распознаются
  • кеширование маршрутизации в последних ядрах Linux
  • Как создать базовый встроенный linux на маршрутизаторе Qualcomm?
  • Как X11 взаимодействует с ядром / выполняет вход в систему
  • Как предотвратить атаки BADUSB в debian 9?
  • Будет ли kdbus заменять D-Bus?
  • Почему Linux на архитектуре sparc64 использует 32-разрядные указатели в пользовательском пространстве и 64-битные указатели в пространстве ядра?
  • Linux и Unix - лучшая ОС в мире.