ramdisk
просто ссылается на образ диска в оперативной памяти. Он реализован с использованием драйвера VFS ramfs
в ядре. Содержимое ramdisk будет уничтожено при следующей перезагрузке или силовом цикле.
Подробные сведения о initrd
и initramfs
далее.
В простых терминах, как initrd
и initramfs
относится к ранней стадии root filesystem
(пользовательское пространство ака rootfs
), который позволит вам работать очень минимальную файловую систему в памяти.
Документация, содержащаяся в Documentation/filesystems/ramfs-rootfs-initramfs.txt
, является частью дерева исходных текстов ядра Linux, которое также даст вам подробное описание того, что это такое.
Что такое initrd
?
Одним из распространенных случаев, когда необходима такая файловая система на ранней стадии, является загрузка модулей драйверов для контроллеров жестких дисков. Если драйверы присутствовали на жестком диске, это становится проблемой курица и яйцо. Наличие этих драйверов как часть этих ранних ступеней rootfs помогает ядру загружать драйверы для любых обнаруженных контроллеров жесткого диска, прежде чем он сможет смонтировать настоящую корневую файловую систему с жесткого диска. Другим решением этой проблемы было бы, чтобы все модули драйвера были встроены в ядро, но вы собираетесь увеличить размер двоичного кода ядра таким образом. Такой вид файловой системы обычно называют initrd
. Он реализуется с использованием либо ramfs
, либо tmpfs
. Он эмулируется с использованием блочного устройства loopback.
Загрузочный загрузчик загружает изображение ядра в адрес памяти, изображение initrd в другой адрес памяти и сообщает ядру, где найти initrd, передает аргументы загрузки ядру и передает управление ядру, чтобы он продолжить процесс загрузки.
Так как же он отличается от initramfs
?
initramfs
- еще более ранняя файловая система этапа по сравнению с initrd
, которая встроена в ядро (конечно, управляется конфигурацией ядра).
Насколько я знаю, оба initrd
и initramfs
управляются этой конфигурацией одного ядра, но это могло быть изменено в последних ядрах.
config BLK_DEV_INITRD
Я не углубляясь в том, как строить свои собственные initramfs, но я могу сказать вам, что это просто использует формат cpio
для хранения файлов и может быть настроено с помощью usr/Kconfig
при построении ядра. Даже если вы не укажете свое собственное изображение initramfs, но включили поддержку initramfs, ядро автоматически вставляет очень простой файл initramfs
, содержащий /dev/console
, /root
и некоторые другие файлы/каталоги.
Кроме того, существует новая файловая система tmpfs
, которая обычно используется для реализации файловых систем в памяти. Фактически более новые ядра реализуют initrd
, используя tmpfs
вместо ramfs
.
UPDATE:
Просто случилось наткнуться на a similar question
This также может быть полезным
Ну, я знаю общую идею позади этих начальных дисков RAM и зачем они нужны. Подводя итог, необходимо загрузить модули. Теперь это единственная причина? Также использует ли ядро вспомогательные скрипты пользователя (из этой временной файловой системы) для загрузки модулей? Как управление передается из этой временной файловой системы в мою фактическую файловую систему? После всего изображения самой файловой системы (или может быть) просто обычный cpio-архив немного похудел. Думаю, в нем нет никакого интеллекта. Поэтому этот интеллект должен быть выгружен в ядро, я полагаю. Не могли бы вы уточнить? – HighOnMeat
* «ramdisk ... реализован с использованием ramfs» * - Это неверно и противоречит самой документации Linux, о которой вы упоминаете. На протяжении всего вашего сообщения вы неправильно присваиваете ramdisk (или rd) рампами. – sawdust