Выносить ли /tmp в оперативную память на небольшом веб-сервере: как это включить штатно, что ограничить и когда это вредит

Вопрос из обсуждения. Минимальный веб-сервер (Apache, PHP, база данных). Стоит ли добавить в fstab строку tmpfs /tmp tmpfs defaults,noatime 0 0, и не сломает ли это обновления? Опытный участник ответил, что годами держит /tmp в памяти без проблем.

Как включить правильно. На системах с systemd есть готовый юнит:

sudo systemctl enable --now tmp.mount          # если юнит есть в /usr/share/systemd/tmp.mount, сначала cp в /etc/systemd/system/

или строка в fstab:

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

Обязательно mode=1777 (общедоступный каталог со sticky-битом) и разумный size= (по умолчанию половина памяти, что на сервере с 2 ГБ опасно). Debian 13 и новые Ubuntu переходят на /tmp в tmpfs по умолчанию, так что практика штатная.

Что это даёт. Меньше записи на диск (важно для SSD с малым ресурсом и для сетевых дисков виртуальных машин), автоматическая очистка при перезагрузке, скорость для программ, активно пишущих во временные файлы.

Что может пойти не так.

  • Программы с большими временными файлами: дампы баз через mysqldump, если приложение пишет во /tmp; распаковка архивов при обновлениях (apt использует /tmp редко, но некоторые установщики да); сборка контейнеров и пакетов; сортировка больших файлов (sort -T). Превышение size= даёт «No space left on device» при свободном диске. Лечение: size= больше, либо направить конкретную программу в другой каталог (TMPDIR=/var/tmp, у MySQL tmpdir=).
  • /var/tmp должен оставаться на диске: по соглашению он сохраняется между перезагрузками.
  • Память, занятая файлами в /tmp, недоступна приложениям; на машине с 1–2 ГБ это заметно. Мониторить df -h /tmp и free -m.
  • Файлы в /tmp исчезают при перезагрузке: то, что кто-то положил туда «на время» и забыл, пропадёт.

Проверка после включения. findmnt /tmp (тип tmpfs, размер), systemd-tmpfiles --cat-config | grep -E '^[DdQq] /tmp' (правила очистки: с tmpfs они не нужны, но не мешают), запуск типичных задач сервера (обновление, дамп, деплой) с наблюдением за df -h /tmp.

Вывод для виртуальных машин. Для сервера с 4 ГБ памяти и больше /tmp в tmpfs с size=1G разумно; для машин с 1–2 ГБ лучше оставить на диске или задать size=256M и следить за программами.

Юниты монтирования описаны в документации systemd.