Для применения Linux во встраиваемых системах разумно корневую ФС сделать доступной только для чтения. При этом возможны по крайней мере 2 варианта:
В данном документе рассмотрен второй вариант.
Включаем режим дампа операций на блочных устройствах:
# echo 1 > /proc/sys/vm/block_dump
Смотрим число операций чтения и записи с root-раздела (в данном примере mmcblk0p1):
$ vmstat -p /dev/mmcblk0p1
Эту же информацию можно получить из файла /proc/diskstats
.
Мониторим (лучше в отдельном терминале) факты записи:
$ dmesg -w | grep WRITE
Основными «писателями» могут быть треды ядра kworker и jbd2. Смотреть:
Чтобы узнать файл по номеру блока: http://superuser.com/questions/490787/reverse-lookup-of-inode-file-from-offset-in-raw-device-on-linux-and-ext3-4
Ниже приведен список файлов и каталогов, которые могут быть изменены в процессе работы системы. В последнем столбце таблицы указано возможное решение для организации read-only режима для корневого раздела. Информация приведена для ArchLinux 3.10.104-9 (2017-02) (armv7l).
Системные каталоги
Объект | Тип | Описание | Решение |
/etc/adjtime | f | Корректировка RTC | symlink to /var/local/adjtime |
/var/cache | d | Кеш | ro |
/var/lib/* | d | Остальные каталоги | ro |
/var/log | d | Каталог журналов | tmpfs |
/var/ | d |
Каталог пользователя (/home)
Отключить автоматическое сохранение конфигурации.
Службы systemd используют каталог /var/lib/systemd
.
Отключить или куда-нибудь перенести файлы /var/lib/systemd/random-seed.
systemctl disable systemd-random-seed.service
Сервисы systemd могут требовать доступ на запись в /var/tmp
.
Каталог /var/tmp
предназначен для временных файлов или каталогов, которые должны сохраняться между перезагрузками системы. Следовательно, данные, хранящиеся в /var/tmp
, являются более постоянными, чем данные в /tmp
[http://rus-linux.net/MyLDP/file-sys/fhs-2.2-rus/fhs-5.15.html].
К числу таких служб относятся:
Проверить, что файл /etc/resolv.conf
представляет собой symlink на /run/systemd/resolve/resolv.conf
.
Используется службой systemd-resolved.service.
X.org создает обычно лог-файлы в каталоге /var/log/
.
Добавить опцию -logfile /tmp/Xorg.log
при старте X
в файле /etc/X11/xinit/xserverrc
.
Но это может и не работать.
Согласно предложенному решению, в файл /etc/fstab
необходимо добавить строки:
tmpfs /var/log tmpfs defaults 0 0
Для ArchLinux на Odroid-C1+:
В файле /boot/boot.ini
в строке
setenv bootargs "console=tty0 ..."
заменить root=/dev/mmcblk0p1 rootwait rw …
на root=/dev/mmcblk0p1 rootwait ro …
.