2010-11-16 6 views
4

Я изучаю процесс загрузки в Linux. Я натолкнулся на это предложение: «ОЗУ на несколько порядков выше, чем на гибком диске, поэтому операционная система работает быстро из ramdisk»Почему корневая файловая система загружается в ramdisk?

Ядро в любом случае загрузит корневую файловую систему в ОЗУ для ее выполнения. Итак, мой вопрос, зачем нам нужен ramdisk для загрузки корневой файловой системы, если ядро ​​загружает корневую файловую систему в ОЗУ?

+0

BTW, init ramdisks (как и в устройствах на основе rambl_), также известные как initrds, на самом деле не используются с современными версиями ядра. Они были заменены файловой системой на основе ram (ramfs). – thkala

ответ

8

documentation для SUSE Linux обеспечивает хорошее объяснение того, почему Linux загружается с RAMDisk:

Как только ядро ​​Linux было загрузилась и корневой файловой системы (/) навесными, программы может быть запущен, а - дополнительные модули ядра могут быть интегрированы для обеспечения дополнительных функций . Для монтирования корневого файла система, определенные условия должны быть met. Ядру нужны соответствующие драйверы для доступа к устройству , на котором расположена корневая файловая система , (особенно SCSI ). Ядро также должно содержать код, необходимый для считывания файла системы (ext2, reiserfs, romfs и т. Д.). Также возможно, что файловая система root уже зашифрована. В этот случай необходим пароль для монтирования файловой системы.

Для решения проблемы драйверов SCSI существует количество различных решений: . Ядро может содержать все вообразимые драйверы, но это может быть проблемой , потому что разные драйверы могут конфликтовать друг с другом. Кроме того, ядро ​​станет очень большим из-за этого. Другая возможность - предоставить различные ядра, каждый из которых содержит только один или несколько SCSI . Этот метод имеет проблему о том, что требуется большое количество различных ядер , проблема увеличилась с помощью сильно оптимизированных ядер (оптимизация Athlon, SMP). Идея загрузки драйвера SCSI, как модуль приводит к общей задаче решена с помощью концепции начального псевдодиска: Запуск космических программ пользователя еще до корневой файловой системы установлен.

Это предотвращает потенциальную ситуацию курица или яйцо, где корневая файловая система не может быть загружена до устройства, на котором она расположена может быть доступен, но это устройство не может получить доступ до корневой файловой системы был загружен:

Исходный электронный диск (также называемый initdisk или Initrd) решает именно проблемы, описанные выше. Ядро Linux предоставляет возможность иметь небольшую файловую систему, загруженную на RAM-диск и запускающую там программы до того, как будет установлена ​​фактическая корневая файловая система. Загрузка initrd осуществляется загрузчиком (GRUB, LILO и т. Д.). Для загрузки данных с загрузочного носителя загрузчикам требуется только BIOS. Если загрузчик может загружать ядро, он также может загрузить начальный ramdisk. Специальные драйверы не требуются.

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

5

Причина, по которой большинство загрузок Linux использует ramfs (initramfs) при загрузке, заключается в том, что ее содержимое может быть включено в файл ядра или предоставлено загрузчиком. Поэтому они доступны сразу при загрузке, без необходимости загружать их из ядра.

Это позволяет ядру запускать программы пользовательского пространства, например. настраивать устройства, загружать модули, настраивать этот отличный RAID-массив, содержащий все файловые системы, или даже запрашивать у пользователя пароль для его зашифрованной корневой файловой системы.

Когда эта конфигурация завершена, первый скрипт, который называется только exec() s/sbin/init из корневой файловой системы (теперь настроенной и доступной).

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

Вы не строго необходимость Н. initramfs для загрузки - если ваш образ ядра содержит все необходимые драйверы для доступа к корневой файловой системы, и вам не нужно никакой специальной конфигурации или пользовательского ввода (например, RAID массивы или шифрованные файловые системы) для установки он часто может напрямую запускать/sbin/init из rootfs.

Смотрите также:

http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

http://www.kernel.org/doc/Documentation/initrd.txt

Как примечание стороны, некоторые системы (аварийно-спасательных дисков, встроенных и такой) может Используйте RamFs в качестве корневой файловой системы, когда фактическая корневая файловая система в среде, которая может быть удалена или недоступна для записи (CD, Flash MTD и т. д.).

 Смежные вопросы

  • Нет связанных вопросов^_^