В чем разница между initrd и initramfs?

Насколько я знаю, initrdдействует как блочное устройство, поэтому требуется драйвер файловой системы (такой как ext2). Ядро должно иметь хотя бы один встроенный модуль для определения файловой системы initrd.В этой статье Представляем новую модель начальных RAM-дисков initramfs, написано, что:

Но на самом деле RAM-диски тратят еще больше памяти из-за кэширования. Линукс это предназначен для кэширования всех файлов и записей каталогов, прочитанных или записанных блокировать устройства, поэтому Linux копирует данные с виртуального диска в «кэш страницы» (для файловых данных) и «кэш dentry» (для записи справочника). Недостатком виртуального диска, притворяющегося блочное устройство, если оно обрабатывается как блочное устройство.

Что такое кэш страници кэш dentry? В абзаце означает ли это, что данные были дублированы, потому что ramdiskрассматривается как блочное устройство, поэтому все данные кэшируются?

Напротив, ramfs:

Несколько лет назад Линусу Торвальдсу пришла в голову отличная идея: что, если кэш Linux может быть смонтирован как файловая система? Просто держите файлы в кеше и никогда не избавляться от них, пока они не будут удалены или система не перезагрузится? Линус написал крошечную оболочку вокруг кеша под названием «ramfs» и другие разработчики ядра создали улучшенную версию под названием «tmpfs» (которая может записывать данные в пространство подкачки и ограничивать размер данного монтирования точку, чтобы он заполнялся до того, как занял всю доступную память). Initramfs является экземпляром tmpfs.

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

В общем, ramfs— это просто файл, открытый и загруженный в память, не так ли?

И initrd, и ramfsархивируются во время компиляции, но разница в том, что initrd— это блочное устройство, распаковываемое для монтирования ядром при загрузке. , а ramfsраспаковывается через cpio в память. Я прав? Или ramfsочень минимальная файловая система?

Наконец, по сей день образ initrdпо-прежнему присутствует в последнем ядре. Однако является ли это initrdтем же ramfs, которое используется сегодня, а название используется только для исторических целей?

56
задан Amumu 15 May 2012 в 14:38
поделиться