tmp на tmpfs: fstab против tmp.mount с systemd

Вопрос или проблема

Чтобы использовать /tmp на tmpfs, я знаю, что могу использовать запись в /etc/fstab, но я не понимаю роли /etc/default/tmpfs, о которой иногда упоминается, и в каких случаях мне нужно его создать или изменить.

В последнее время я часто вижу предложения использовать конфигурацию systemd tmp.mount. Например, в Debian:

$ sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/
$ sudo systemctl enable tmp.mount

Какой из двух методов более подходящий для повседневного использования? В каких ситуациях один метод лучше другого? Когда мне нужно иметь дело с /etc/default/tmpfs?

На некоторых системах /tmp по умолчанию является tmpfs, и это конфигурация предоставленная API файловыми системами systemd. Системы на основе Fedora в значительной степени следуют этой модели, как и системы на основе Debian, начиная с Debian 13 и Ubuntu 24.10 (systemd 256~rc3-3). Fedora сама поставляет /usr/lib/systemd/system/tmp.mount и включает его, как и Debian; но RHEL 8 поставляет его без активации. На таких системах маскировка и размаскировка юнита является подходящим способом отключения или включения tmpfs /tmp, как задокументировано в документации API файловых систем.

Другие системы, такие как Debian 12 и более ранние не поставляют tmp.mount в удобном расположении; именно поэтому вам нужно скопировать его в /etc/systemd/system, если вы хотите его использовать. Это приводит к неприятному эффекту создания полного переопределения tmp.mount в /etc, что означает, что если пакет systemd в дальнейшем поставит другую версию tmp.mount в /lib/systemd/system, она будет проигнорирована. На таких системах я бы рекомендовал использовать /etc/fstab вместо этого.

В обеих настройках /etc/fstab по-прежнему является рекомендуемым способом настроить монтирование /tmp, например, для изменения их размера; man systemd.mount говорит

В общем, настройка точек монтирования через /etc/fstab является предпочтительным подходом для управления монтированием для человека.

и документация API файловых систем согласна.

Использование юнитов монтирования рекомендуется для инструментов, т.е. для автоматизированной конфигурации:

Для инструментов предпочтительно писать юниты монтирования, чем редактировать /etc/fstab.

(Это означает, что инструменты, которые хотят автоматически настроить монтирование, не должны пытаться редактировать /etc/fstab, что подвержено ошибкам, а вместо этого должны устанавливать юнит монтирования, что можно сделать атомарно и что также может быть переопределено системным администратором с использованием функций systemd.)

/etc/default/tmpfs используется системой sysvinit Debian, поэтому он не имеет значения в сочетании с systemd.

Я всегда отключаю /tmp, работающий как /tmpfs, потому что он отнимает ценную оперативную память, особенно на таких системах, как Raspberry Pi.
Поэтому я использую systemctl mask tmp.mount, чтобы отключить его в systemd.
Также я не хочу, чтобы /tmp очищался при каждой загрузке, и не хочу думать о хранении полутемпорарных файлов в /var/tmp.
Временное для меня означает “не критично для системы”, но это не значит “не нужно между загрузками”.
Поэтому я использую /tmp для всего с коротким временем жизни и занимаюсь его очисткой.
Так что, если вы в основном работаете как единственный пользователь на вашей системе, я рекомендую оставить /tmp на корневом разделе и вообще не отделять его.
Это также позволяет временно сохранять большие файлы в /tmp, такие как сжатые архивы, загрузки и т.д., не исчерпывая памяти и не резервируя большую часть дискового пространства только для /tmp.

Ответ или решение

Когда речь идет о том, как разместить /tmp на tmpfs, существует два основных подхода: использование файла /etc/fstab и конфигурации tmp.mount в systemd. Ниже я подробно объясню оба метода, их преимущества и недостатки, а также разберу сценарии, когда стоит использовать тот или иной подход, а также роль файла /etc/default/tmpfs.

1. Использование /etc/fstab

При использовании /etc/fstab для монтирования /tmp на tmpfs, вы можете добавить следующую строку:

tmpfs   /tmp    tmpfs   defaults,noatime,mode=1777,size=1G   0   0

Здесь вы можете настроить параметры, такие как размеры и режимы доступа. Основное преимущество использования этого метода заключается в его простоте и широком признании; это традиционный способ управления точками монтирования в UNIX-системах. Управляя /tmp через fstab, вы также можете легко изменить его настройки, если это необходимо. Даже если система будет обновлена, вы не потеряете свои настройки.

2. Использование tmp.mount с systemd

Альтернативный подход заключается в использовании конфигурации tmp.mount, предоставляемой systemd. На системах, где уже доступна конфигурация, вы можете использовать следующую команду для ее активации:

sudo systemctl enable tmp.mount

Этот метод имеет свои преимущества, такие как упрощенное управление монтированием и возможность управлять им через механизмы systemd. Тем не менее, важно отметить, что если вы копируете файл tmp.mount из /usr/share/systemd/system/ в /etc/systemd/system/, создается полная переопределенная версия, и в будущем изменения в пакете systemd могут не применяться.

Когда использовать /etc/default/tmpfs

Файл /etc/default/tmpfs больше не имеет значения при использовании systemd, так как он был предназначен для старого sysvinit. Однако для систем, которые все еще используют sysvinit, можно будет управлять параметрами tmpfs через этот файл.

Сравнение методов

Сравнивая два метода, можно выделить следующие моменты:

  • Легкость использования: Если вам достаточно простого монтирования /tmp с tmpfs, то использование /etc/fstab является более понятным и привычным решением.
  • Продвинутая настройка: Если вы хотите воспользоваться возможностями systemd для управления системными монтированиями и не против вносить изменения в систему, то systemd/tmp.mount может быть полезным.
  • Сценарии использования: В случаях, когда ваш /tmp требует специфической конфигурации (например, изменения размера), fstab будет предпочтительнее. Если же вы хотите, чтобы tmp.mount управлялось системой автоматически, то используйте конфигурацию systemd.

Когда лучше использовать mask

Если вы предпочитаете, чтобы /tmp не очищался после перезагрузки и хотите избежать использования оперативной памяти (что может быть критично на таких системах, как Raspberry Pi), вы можете использовать команду systemctl mask tmp.mount, чтобы отключить автоматическое монтирование tmpfs. Это действие предотвратит использование tmpfs для /tmp, и вы можете использовать его для временных файлов без особых ограничений.

Заключение

В большинстве случаев использование /etc/fstab предпочтительно для настройки /tmp, так как это проще и менее подвержено изменениям при обновлениях системы. Однако, если вы используете современные системы с systemd и хотите воспользоваться его возможностями, настройка через tmp.mount может оказаться полезной. Важно выбирать метод, исходя из ваших потребностей и характера системы.

Оцените материал
Добавить комментарий

Капча загружается...