systemd: отключить бесполезные tmpfs

473
syam

Контекст: встроенная система, только для чтения MMC с tmpfsналожением. Все записывается в ОЗУ и исчезает при перезагрузке.

systemdнастаивает на создании многочисленных tmpfsмонтирований (по крайней мере, /run /run/lock /run/shmи /tmpот всей моей головы, возможно, других), которые абсолютно бесполезны, так как вся файловая система только для чтения уже перекрыта tmpfs.

Проблема: это довольно ограниченная встроенная система, и каждый байт оперативной памяти считается. Я хотел бы избежать накладных расходов на управление несколькими tmpfsобъектами в разных местах и ​​просто поместить все в основной tmpfsоверлей.

К сожалению, до сих пор мне удалось только отключить /tmp( systemctl mask systemd-tmpfiles*), но это ничего не делает для /runиерархии.

Есть идеи, где скрыты эти настройки?

1
Если считать каждый байт оперативной памяти, не будет ли замена всего `systemd` меньшим init первым? Вы бы высвободили несколько мегабайт по сравнению с монтированием tmpfs стоимостью несколько кБ. grawity 5 лет назад 2
Вы, очевидно, правы, и это запланировано. К сожалению, есть разветвления (в основном, hotplug), с которыми у меня пока нет времени. Это придется подождать, а пока я пытаюсь обойтись ... syam 5 лет назад 0

1 ответ на вопрос

2
grawity

С верхней части моей головы:

Необходимые:

/sys/fs/cgroup не может быть отключено, так как стандартная функциональность systemd основана на cgroups.

/devне может и не должна быть отключена, поскольку это не обычный tmpfs - это devtmpfs, где ядро ​​автоматически создает узлы для устройств с горячим подключением. (Это работает даже без Udev.)

Сложно:

/runне может быть отключен; вы можете исправить это из таблицы в systemd src/core/mount-setup.c, но делайте это только в том случае, если местоположение все еще обеспечивает те же свойства, подобные tmpfs.

/run/shmтакже не может быть отключен, потому что это требуется glibc для реализации разделяемой памяти POSIX. Опять же, вы можете исправить это src/core/mount-setup.c, пока местоположение остается на tmpfs. Имейте в виду, что этот путь - это специальный патч для дистрибутива - традиционно эта файловая система будет иметь место /dev/shm.

Необязательный:

/dev/mqueue, /dev/hugepagesмонтируются в соответствии с их .mountфайловыми единицами, которые могут быть удалены.

/run/lockна самом деле не является tmpfs по умолчанию. Если вы видите что-то смонтированное в этом месте, это должно быть пользовательское дополнение вашего дистрибутива, и, скорее всего, его можно отключить, удалив run-lock.mountустройство.

/tmpне является обязательным и устанавливается в соответствии с tmp.mountединицей. Вы можете удалить этот файл модуля.


Я был бы очень удивлен, если бы монтирование tmpfs стоило больше, чем страница памяти.

Thank you, that's what I feared : some of it is hardcoded. That "we know better than you" attitude from the systemd team is tiring me. Well I'm not recompiling systemd just for this, so I'll just get rid of it all as you suggested when I have some time to do it. syam 5 лет назад 0

Похожие вопросы