tmpfs - это файловая система, которая хранит данные в оперативной памяти. Проще говоря, вы монтируете каталог как обычную файловую систему, но файлы физически лежат не на диске, а в RAM. При необходимости часть данных может быть вытеснена в swap, если он включен.
▪️ Посмотреть текущие tmpfs:
df -h -t tmpfs
/run
/dev/shm
/tmp
Главный плюс tmpfs - скорость. Операции чтения и записи обычно быстрее, чем на диске, особенно если это много мелких временных файлов.
▪️ Где tmpfs полезен:
• временные файлы приложения;
• build-кэши;
• сокеты и runtime-файлы;
• промежуточные данные, которые не нужны после перезагрузки;
• тестовые стенды;
• ускорение операций с большим количеством мелких файлов.
Например, можно смонтировать отдельный каталог:
mkdir -p /mnt/ramtmp
mount -t tmpfs -o size=2G tmpfs /mnt/ramtmp
Теперь
/mnt/ramtmp будет tmpfs с лимитом 2 ГБ.Для постоянного подключения через
/etc/fstab:
tmpfs /mnt/ramtmp tmpfs defaults,size=2G,noatime 0 0
▪️ tmpfs легко становится источником проблем.
Первая проблема - данные исчезают после перезагрузки. Если приложение случайно пишет туда то, что должно храниться постоянно, после ребута будет сюрприз.
Вторая проблема - расход RAM. Если задать слишком большой tmpfs или не ограничить его размер, временные файлы могут начать конкурировать с приложениями за память. Проверить использование:
df -h /mnt/ramtmp
И отдельно смотреть память:
free -h
Третья проблема - OOM. Если приложение активно пишет во временный каталог на tmpfs, можно неожиданно упереться в память.
Особенно на серверах с тяжелыми сервисами, контейнерами или сборками.
Четвертая проблема - swap. Если swap включен, tmpfs не всегда означает "только RAM". Под давлением памяти часть страниц может уехать в swap, и внезапно "быстрый tmpfs" станет не таким быстрым.
▪️ Где лучше быть осторожным:
•
/tmp на серверах с непредсказуемыми задачами;• директории аплоадов;
• временные файлы баз данных;
• CI/CD-сборки без лимитов;
• контейнеры с активной записью;
• любые каталоги, где размер данных заранее неизвестен.
Для systemd-сервисов можно использовать временные каталоги аккуратнее:
[Service]
PrivateTmp=true
Это даст сервису отдельный
/tmp и /var/tmp, чтобы он не мешал другим процессам. А если нужен runtime-каталог:
[Service]
RuntimeDirectory=myapp
Тогда systemd создаст каталог в
/run, который обычно тоже находится на tmpfs.#linux #tmpfs
🧑💻 NetworkAdmin