Tmpfs для временных файлов: типичные ошибки и защита
Tmpfs ускоряет работу с временными файлами, но не превращает память в бездонный диск: заполнение может привести к ошибкам записи и проблемам у соседних процессов. Разбираем, как выбрать размер, права и место для монтирования.

Перенос временных файлов в tmpfs может убрать дисковые операции, но ошибка в размере или точке монтирования способна остановить запись приложения и задеть другие процессы. Разбираем практику для Linux kernel 6.x: как выбрать между tmpfs и диском, не потерять данные и не упереться в нехватку памяти или inode.
Сначала выберите, что именно ускорять
Tmpfs — файловая система, содержимое которой хранится в виртуальной памяти. Это не отдельный резерв памяти и не гарантия, что данные всегда останутся в RAM: ядро может выгружать страницы tmpfs в swap. После размонтирования данные исчезают.
Смотрите на временные файлы конкретного приложения: размер, число файлов, срок жизни, необходимость пережить перезагрузку и требования к правам. Не начинайте с замены всего /tmp: там могут работать системные службы и программы, которым важны привычные права или сохранность файлов до конца операции.
Три варианта хранения
| Вариант | Что выигрываете | Чем платите | Когда подходит |
|---|---|---|---|
| Отдельный tmpfs для приложения | Избегаете обычных дисковых операций; можно ограничить размер и доступ | Занимаете память, данные пропадают при размонтировании или перезагрузке | Короткоживущие файлы с известным пределом объёма |
| Дисковая временная директория | Не отбираете RAM у рабочих процессов; проще пережить всплеск объёма | Запись зависит от скорости и свободного места на диске | Большие файлы, длительные задачи, важна предсказуемость по памяти |
| Кеш приложения | Можно управлять сроком жизни и вытеснением на уровне самой программы | Нужно настроить и наблюдать отдельный механизм; поведение зависит от приложения | Повторно используемые данные, которые не обязательно хранить как обычные файлы |
Tmpfs ограничивает не только объём временных файлов. Его цена — память, которой в этот момент могут не хватить другим процессам.
Ошибки, которые чаще всего приводят к сбою
1. Считать size зарезервированной памятью
Параметр size задаёт верхний предел размера tmpfs, а не объём RAM, который ядро немедленно отнимет у системы. Но по мере записи файлов страницы памяти используются, а при заполнении файловой системы приложение получит ошибку записи. В документации Linux kernel 6.x размер по умолчанию описан как доля физической памяти; не полагайтесь на значение по умолчанию — задайте свой предел.
Оцените реальный пик по данным приложения и оставьте запас для ОС, соседних процессов и временных всплесков. Сверяйте занятое место командой df -h; в контейнере дополнительно учитывайте лимит памяти контейнера. Сам по себе предел tmpfs не гарантирует, что приложение уложится в этот лимит.
2. Проверять только объём, забыв про inode
Тысячи мелких файлов могут исчерпать число inode раньше, чем место. Тогда запись новых файлов перестанет работать, хотя в выводе df -h ещё виден запас. Проверьте оба ресурса командами df -h /путь и df -i /путь. Если файлов много, задайте подходящее ограничение inode параметром nr_inodes и следите за его расходом.
3. Монтировать tmpfs прямо поверх занятого каталога
После монтирования содержимое каталога, которое лежало на нижележащей файловой системе, не видно до размонтирования. Оно не удаляется, но приложение может решить, что файлов нет, или начать писать в новую временную область. Создайте отдельный каталог, проверьте его владельца и права, затем подключайте к нему tmpfs. Не заменяйте системный /tmp без проверки служб и процесса запуска: ошибка может проявиться только после перезагрузки.
4. Оставлять общий каталог с неверными правами
Для общей временной директории стандартный ориентир — права 1777: пользователи могут создавать файлы, а sticky bit мешает удалять чужие файлы обычным пользователям. Для каталога одного приложения лучше выделить отдельную точку с доступом только этому сервису. Опции nosuid и nodev часто уместны; noexec включайте только после проверки: некоторым программам нужно запускать файлы из временного каталога. Это дополнительное ограничение, а не универсальная защита.
5. Хранить в tmpfs то, что должно пережить перезапуск
Tmpfs не предназначен для единственного экземпляра данных, которые нельзя потерять. После размонтирования содержимое исчезает; при перезагрузке оно не восстанавливается с диска. Для очередей, результатов длительных задач и файлов, которые нужны после рестарта, используйте постоянное хранилище. В tmpfs оставляйте только то, что приложение может безопасно создать заново.
Как подключить отдельный tmpfs и проверить результат
Пример ниже для Linux kernel 6.x и команды mount. Он создаёт отдельный каталог объёмом до 1 GiB с правами общей временной директории. Выберите свой предел: значение в примере не подходит автоматически для любого сервера.
Создайте пустую точку монтирования:
sudo install -d -m 1777 /mnt/app-tmp. Проверьте, что это именно отдельный каталог и в нём нет нужных файлов.Подключите файловую систему:
sudo mount -t tmpfs -o size=1G,mode=1777,nosuid,nodev tmpfs /mnt/app-tmp. Команда завершилась без ошибки — проверьте, что каталог доступен; затем выполните следующий шаг.Проверьте тип и предел:
findmnt /mnt/app-tmpиdf -h /mnt/app-tmp. В выводе должны быть видны tmpfs и заданный предел. Командаdf -i /mnt/app-tmpпокажет доступные inode.Проверьте запись от имени пользователя или службы, которая будет работать с каталогом:
sudo -u ИМЯ_ПОЛЬЗОВАТЕЛЯ touch /mnt/app-tmp/check. Если команда вернула ошибку, проверьте пользователя, группу и права, а не расширяйте доступ вслепую. После проверки удалите тестовый файл.После остановки приложения размонтируйте каталог командой
sudo umount /mnt/app-tmp, если он больше не нужен. Убедитесь, что приложение не держит файлы открытыми: иначе размонтирование завершится ошибкой.
Чтобы подключать файловую систему после перезагрузки, настройте её в соответствии с механизмом монтирования вашей системы. Не переносите строку конфигурации из чужого дистрибутива без проверки синтаксиса и порядка запуска служб.
Когда выбирать каждый подход
- Выбирайте tmpfs, если файлы короткоживущие, их пиковый объём известен, а потеря при перезапуске допустима. Начните с отдельного каталога, не с системного
/tmp. - Оставляйте временные файлы на диске, если их объём трудно предсказать, они могут занимать значительную долю памяти или задачу нужно продолжить после перезагрузки.
- Настраивайте кеш приложения, если данные повторно используются и нужны правила вытеснения, срок жизни или очистка по ключам. tmpfs сам не понимает, какие файлы устарели.
Проверьте поведение под нагрузкой, а не только на пустой машине. Заполните каталог тестовыми данными в безопасной среде, посмотрите расход памяти и inode и проверьте реакцию приложения на отказ записи.
Что делать дальше
Для выбранного каталога зафиксируйте владельца, права, предел размера и ожидаемый максимум файлов. В мониторинг добавьте свободное место tmpfs, доступные inode, потребление памяти и ошибки записи приложения. Если каталог доступен внутри контейнера, проверьте те же показатели с учётом его лимитов памяти. Следующий шаг — испытать переполнение на стенде и убедиться, что приложение выдаёт контролируемую ошибку, а не теряет данные или останавливает соседние задачи.
Термин. Inode — структура файловой системы с метаданными файла; у tmpfs их количество ограничено отдельно от объёма данных. Поэтому свободные гигабайты не всегда означают, что можно создать ещё один файл.
Проектная работа: От проблемы до защиты: продукт, этапы, вопросы комиссии
Спросить за 15 ₽Источники: Linux kernel documentation: tmpfs, mount(8) — Linux manual page
Частые вопросы
Tmpfs всегда хранит данные в оперативной памяти?
Можно ли сделать весь /tmp файловой системой tmpfs?
Что произойдёт, если tmpfs заполнится?
tmpfs быстрее диска в любом сценарии?
Можно ли использовать этот пример на другом ядре Linux?
Как понять, что лимит упёрся в число файлов, а не в объём?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.