Вопрос или проблема
Чтобы использовать /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
может оказаться полезной. Важно выбирать метод, исходя из ваших потребностей и характера системы.