Насколько я знаю, initrd
действует как блочное устройство, поэтому требуется драйвер файловой системы (например, ext2
). Ядро должно иметь как минимум один встроенный модуль для обнаружения файловой системы initrd
. В этой статье Представляя initramfs, новую модель для начальных RAM-дисков, написано, что:
Но ramdisks фактически тратит еще больше памяти из-за кэширования. Linux - это предназначен для кэширования всех файлов и записей в каталогах, считанных или написанных для блокировки устройств, поэтому Linux копирует данные в и из ramdisk в "кэш страниц" (для данных файла) и "кэш-дентин" (для записи в каталоге). Недостатком ramdisk, претендующим на роль блочное устройство обрабатывается как блочное устройство.
Что page cache
и dentry cache
? В этом параграфе означает, что данные были дублированы, потому что ramdisk
рассматривается как блок-устройство, поэтому все данные кэшируются?
В режиме контрастности ramfs
:
Несколько лет назад у Линуса Торвальдса была отличная идея: что, если кеш Linux может быть смонтирован как файловая система? Просто храните файлы в кеше и никогда не избавляйтесь от них, пока они не будут удалены или система не перезагрузится? Линус написал крошечную обертку вокруг кеша под названием "ramfs", а другой разработчики ядра создали улучшенную версию под названием "tmpfs" (которая могут записывать данные для замены пространства и ограничивать размер данного монтирования так что он заполняется, прежде чем потреблять всю доступную память). Initramfs является экземпляром tmpfs.
Эти файловые системы на основе ram автоматически растут или сжимаются, чтобы соответствовать размер данных, которые они содержат. Добавление файлов в ramfs (или расширение существующие файлы) автоматически выделяет больше памяти и удаляет или усекающиеся файлы освобождают эту память. Нет дублирования между блочное устройство и кеш, поскольку нет блочного устройства. Копия в кеш является единственной копией данных. Лучше всего, это не ново но новое приложение для существующего кода кэширования Linux, который означает, что он добавляет почти никакого размера, очень прост и основан на очень хорошо протестированная инфраструктура.
В сумме, ramfs
- это просто файл, открытый и загруженный в память, не так ли?
Оба initrd
и ramfs
зажимаются во время компиляции, но разница в том, что initrd
- это блок-устройство, распакованное для установки ядром при загрузке, тогда как ramfs
распаковывается через cpio в память. Я прав? Или ramfs
очень минимальная файловая система?
Наконец, до сих пор изображение initrd
все еще отображается в последнем ядре. Однако, что initrd
на самом деле ramfs
используется сегодня, и имя предназначено только для исторической цели?