Система Initramfs Linux только для чтения

У меня есть встроенная плата, на которой я использую Linux. Linux загружается через uboot. Полный образ Linux собирается как Initramfs. Когда система загружается, я обнаруживаю, что корневая ФС доступна для чтения и записи. Насколько я понимаю, Initramfs по умолчанию должен быть доступен только для чтения. Верно?

Я также пытался изменить параметр загрузки в uboot, чтобы он был только для чтения, но это не дало никакого эффекта. Интересно, что сделать, чтобы Initramfs только для чтения по умолчанию?


person silentnights    schedule 10.05.2017    source источник
comment
Я думаю, что изменения, сделанные в Initramfs, не сохраняются после перезагрузки. поэтому он в конечном итоге только для чтения   -  person vkumar    schedule 10.05.2017
comment
Да, я знаю. Но я бы все равно хотел, чтобы rootfs читались только в Ram. Таким образом, никто не зависит от того, что в какой-то момент он будет доступен для записи, и не задается вопросом, почему его изменения не работают впоследствии. ! Поэтому я бы хотел, чтобы он был ro, если я явно не перемонтирую его в rw.   -  person silentnights    schedule 10.05.2017
comment
Вы пробовали опцию root в uboot, вы можете использовать опцию root=/dev/ram ro.   -  person vkumar    schedule 10.05.2017
comment
Да. Вот почему это сводит меня с ума. Я даже могу увидеть вышеуказанные параметры при проверке переменных среды uboot после загрузки Linux, но все же. !   -  person silentnights    schedule 10.05.2017


Ответы (1)


Полный образ Linux собирается как Initramfs.

Это плохо сформулированное, если не неточное описание.
initramfs использует архивный файл cpio, который не является файлом образа.
Архивный файл cpio можно связать с образом ядра Linux.

«Образ» initramfs всегда представляет собой файл архива cpio, а не образ файловой системы.


Насколько я понимаю, Initramfs по умолчанию должен быть доступен только для чтения. Верно?

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

Предложение использовать параметр командной строки ядра, такой как root=/dev/ram ro, указывает на путаницу между (устаревшим) ramdisk и ramfs.
См. ядро ​​Linux Документация/файловые системы/ramfs-rootfs-initramfs.txt


Интересно, что сделать, чтобы Initramfs только для чтения по умолчанию?

Вы можете перемонтировать его так, чтобы он был доступен только для чтения.
См. http://lkml.iu.edu/hypermail/linux/kernel/0908.1/01693.html
и
https://serverfault.com/questions/463828/linux-initramfs-толькодлячтения

person sawdust    schedule 11.05.2017
comment
Initramfs вообще монтируется? AFAIU использует непосредственно разархивированные данные. - person 0andriy; 11.05.2017
comment
@0andriy -- Конечно, оно не смонтировано как блочное устройство (просто потому, что это не так), но если оно вообще не смонтировано, то почему перемонтирование initramfs работает (что было подтверждено работать в lkml постом выше)? - person sawdust; 12.05.2017
comment
Итак, что там происходит: 1) ядро ​​настраивает rootfs в соответствии с параметром rootfstype= (выше /dev/ram rw на самом деле является избыточным для initramfs и должно быть просто rootfstype=ramfs); это создаст необходимые обратные вызовы для VFS, включая ->mount(); 2) архив распаковывается и копируется в любую корневую ФС. - person 0andriy; 12.05.2017
comment
Большое спасибо опилкам за понятные пояснения. Я читал ramfs-rootfs-initramfs.txt раньше, но все еще был в замешательстве. Я установил FS только для чтения в inittab. - person silentnights; 13.05.2017