Почему корневая файловая система загружается в виртуальный диск? - PullRequest
4 голосов
/ 16 ноября 2010

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

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

Ответы [ 2 ]

8 голосов
/ 16 ноября 2010

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

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

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

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

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

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

5 голосов
/ 16 ноября 2010

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

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

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

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

Вам не строго требуется для загрузки initramfs - если ваш образ ядра содержит все драйверы, необходимые для доступа к rootfs, и вам не нужны никакие специальные настройки или пользовательский ввод (например, 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 и т. Д.) .

...