Arhn - архитектура программирования

это именно то, что делает romfs в ядре Linux?

Мне нужно создать файловую систему с настраиваемыми загружаемыми модулями с помощью romfs. Однако у меня есть несколько недоразумений (я все еще новичок в материалах ядра):

  • После прочтения romfs документа: romfs, насколько Я знаю, что romfs — это файловая система, похожая на ext2, ext3, ext4...., которая используется для создания виртуального диска инициализации, необходимого ядру во время загрузки. Однако говорят, что romfs включено в ядро ​​начиная с версии 2.1.21: домашняя страница romfs. На главной странице мы можем загрузить только утилиту genromfs, которая используется для создания файла изображения romfs. Итак, я хочу внести ясность: модуль romfs, включенный в ядро, предназначен для чтения файловой системы romfs, а genromfs используется для ее создания, не так ли (я пробовал genromfs, но хочу убедиться)?

  • initrd создается mkinitrd -allow-missing -f initrd.img kernel-version в исходном каталоге (загружаемая файловая система) и распаковывается: gzip -dc initrd.img | cpio -idv, при использовании romfs я должен создать его образ, используя mkinitrd, и распаковать его, используя: genromfs -fdv romfs.img. Это то же самое, что и initrd во время загрузки ядра? initrd предполагает сжатие, а romfs нет, это нормально?

  • Если да, то модуль romfs должен быть встроен в ядро ​​для чтения на ранней стадии загрузки ядра, верно? В моей системе у нас есть бездисковая машина, и в настоящее время initrd используется в качестве файловой системы фазы загрузки, а также в качестве конечной корневой файловой системы. Однако, поскольку romfs предназначен только для чтения, romfs запрещает пользователям возможность записи в файловую систему (поэтому мы не можем делать что-то вроде echo "something" > /tmp/something.txt)?


Ответы:


1

Для (1) да, модуль romfs — это файловая система, которая поддерживает простую файловую систему только для чтения, очень простую в реализации. Программа genroms позволяет вам создать экземпляр файловой системы romfs, который можно смонтировать и получить к нему доступ из-под ядра с загруженным модулем romfs.

Инструмент genromfs создает образ файловой системы, который можно поместить на блочное устройство или в файл уже существующей файловой системы.

Для (2) вы можете использовать файловую систему romfs в качестве начального RAM-диска, если в ядре есть встроенная поддержка доступа к файловой системе romfs. Разница проявляется во время загрузки initrd. Для стандартного образа initrd он распаковывается на виртуальный диск, который используется для инициации загрузки, с образом romfs он не распаковывается, он просто используется как есть.

Основная причина использования образа romfs в качестве файловой системы заключается в том, что его можно поместить в блок памяти, доступной только для чтения, и получить прямой доступ таким образом без необходимости использования физической памяти для расширенного образа виртуального диска.

Для (3) да, вы должны скомпилировать файловую систему в систему как встроенный компонент, а не загружаемый модуль, т. е. вы выбираете «Y» для опции rom file system в конфигурации файловой системы ядра.

Я бы не рекомендовал использовать файловую систему romfs в качестве корневой файловой системы — недостаточно атрибутов POSIX (права собственности, разрешения), чтобы позволить ей работать в качестве надлежащей файловой системы для общего повседневного использования (я не знаю для конечно; я просто нахожу использование такой файловой системы очень странным)

Initrd распаковывается в память во время выполнения, поэтому любая запись в файловую систему не сохраняется после перезагрузки системы. Если файловая система на этом расширенном виртуальном диске имеет соответствующие разрешения, то ядро ​​должно предотвратить изменения, внесенные обычными пользователями в определенное содержимое на диске. Вы не позволите пользователю входить в систему как root и полагаться на разрешения файловой системы, чтобы предотвратить изменения файлов.

Тот факт, что он доступен только для чтения и не поддается изменению, означает, что если вы хотите иметь файл /tmp, вам нужно будет создать каталог как часть вызова genromfs, а затем вам нужно будет смонтировать tmpfs в эту точку монтирования. для выполнения записи в этот каталог.

Если вы ищете способ иметь корневую файловую систему, доступную только для чтения, вам следует подумать о подключении общего ресурса только для чтения из удаленной файловой системы; таким образом, у пользователя нет реального способа внести изменения в файловую систему - все попытки записи будут отклонены сервером. При использовании такой функции, как FS-Cache/CacheFS, производительность будет достаточно хорошей.

15.05.2012
  • Спасибо за ответ. Наша система содержит бездисковые компьютеры, которые загружают ядро ​​vmlinuz и initrd через tftp. Следовательно, единственная и последняя файловая система бездисковых компьютеров — это initrd, которая используется при загрузке и после загрузки (компьютеры используются только для обработки и больше ничего). 15.05.2012
  • Мне подтвердили, что мы собираемся использовать файловую систему romfs для целей расширения. Обычно, чтобы включить поддержку нового модуля, приходится перекомпилировать ядро. Таким образом, образ romfs используется для содержания дополнительных модулей, которые мы хотим добавить в систему, и если мы хотим добавить новые модули, нам нужно только скомпилировать образ romfs, и модули управляются здесь. 15.05.2012
  • Другими словами, он будет использоваться так же, как и любой другой initrd — для добавления драйверов, поддерживающих другие типы оборудования. 15.05.2012

  • 2

    Файловая система romfs сегодня в основном вышла из употребления, так как она очень ограничена. Вы бы использовали его только в том случае, если бы у вас был большой носитель только для чтения и вы не интересовались сжатием.

    Раньше было так, что initrd представлял собой образ romfs, который монтировался из блока ОЗУ, куда загружался, и после размонтирования блок ОЗУ освобождался; он был заменен экземпляром tmpfs (файловая система на основе ОЗУ для чтения/записи), который инициализируется данными из архива формата cpio (аналогично ZIP-файлу).

    В процессе загрузки есть момент, когда ядро ​​выгружает весь код, который больше никогда не понадобится («Освобождение памяти инициализации»), это происходит непосредственно перед запуском процесса 1. При подходе romfs в этот момент initrd монтируется из образа initrd, поэтому код, необходимый для доступа к образу romfs, а также код initrd должны оставаться загруженными здесь, а это означает, что вы получите некоторый мертвый код ядра после система загружается.

    Текущий подход initrd использует тот же код виртуального диска, который также используется позже для файловой системы /tmp (если ваша система сконфигурирована таким образом), и вся инициализация этой файловой системы выполняется до момента освобождения памяти, поэтому нет мертвого кода. остается загруженным после загрузки initrd.

    Ни romfs, ни initrd формата cpio не могут быть записаны; новый путь кода сначала копирует данные в доступную для записи файловую систему, что позволяет вашим сценариям initrd записывать данные; однако это никогда не записывается обратно в образ.

    15.05.2012
  • Итак, romfs и initrd используются для загрузки модулей ядра, а затем, если в системе есть внешнее хранилище (жесткий диск), то оно будет удалено и заменено реальной файловой системой, я прав? 15.05.2012
  • initrd — это механизм загрузки блока данных вместе с ядром, в более ранних версиях этот блок данных монтировался через файловую систему romfs. В настоящее время initrd содержит архив cpio (созданный с использованием mkinitrd), который распаковывается в initramfs перед удалением initrd. 15.05.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..