A deep dive into Debian 13 /tmp: What's new, and what to do if you don't like it
Debian 13 «Trixie» переносит /tmp
из диска в оперативную память (tmpfs).
Плюсы: быстрый доступ, автоматическая очистка при перезагрузке.
Минусы: теперь «забытые» файлы жрут ОЗУ; по умолчанию tmpfs ограничен 50 % RAM.
Как изменить лимит
sudo systemctl edit tmp.mount
Раскомментируйте блок [Mount]
и поменяйте size=50%
на нужное значение, например size=2G
или size=75%
. Сохраните, затем:
sudo systemctl daemon-reload
sudo systemctl restart tmp.mount
Как полностью отключить tmpfs-вариант
sudo systemctl mask tmp.mount
sudo reboot
После перезагрузки /tmp
снова будет обычной директорией на диске.
Коротко
- Нужна скорость и не жалко памяти — оставьте tmpfs.
- Работаете с большими временными файлами — увеличьте лимит или отключите tmpfs.
Комментарии (98)
- Debian переносит /tmp в tmpfs (ОЗУ), что вызывает споры: кто-то ждёт прироста скорости, кто-то боится нехватки RAM и OOM-killer.
- Критики указывают: tmpfs-файлы при нехватке памяти уйдут в swap, и чтение с диска станет медленнее, чем если бы файл сразу лежал на диске.
- На серверах swap часто отключён из-за ECC и предсказуемости, поэтому tmpfs в /tmp воспринимается как риск.
- Решение «просто используйте /var/tmp» звучит часто, но авто-очистка /tmp и /var/tmp (30 дней) может неожиданно удалить нужные данные.
- На low-end и SD-картах (Raspberry Pi) tmpfs экономит циклы записи и может быть полезен, если выключен swap.
- Отключить tmpfs для /tmp можно командой
systemctl mask tmp.mount
, что рекомендуют многие админы.
In-Memory Filesystems in Rust
Разрабатывая CLI-утилиту, я хотел избежать тормозов при тестах из-за fstat
, как это было в Bundler. Решил попробовать in-memory FS, как в Go-библиотеке Afero.
В Rust аналогов нет: спросишь — получишь лекцию «в Rust это не нужно». Нашёл два кандидата:
- vfs — поддерживает swap-бэкендов, но без симлинков и прав, а главное — нельзя создавать исполняемые файлы.
- rsfs — старый, почти заброшенный; требует параметризовать весь код типом
rsfs::FS
, превращая сигнатуры в кашу.
Провёл бенчмарк: vfs
, rsfs
, ramdisk и обычный SSD — всё показывает ~45 мс. Современные SSD + кеш ОС настолько быстры, что экономия на syscalls незаметна.
Вывод: тестируй прямо на файловой системе — проще и не медленнее.
Комментарии (45)
- Позикс-семантика сложна, поэтому самописная in-memory реализация почти всегда хуже по качеству, чем готовые tmpfs/ramfs.
- Для быстрых тестов достаточно /tmp (часто tmpfs) или /dev/shm — это дёшево и использует проверенный ядром код.
- SSD и кэши ОС настолько быстры, что даже обычное файловое I/O редко становится узким местом; CPU и syscalls чаще ограничивают.
- Несколько участников пожелали стандартным traits для файловой системы, как в Go (fs.FS, afero), но признают, что в std Rust это уже трудно.
- Основная цель обсуждаемого vfs-крейта — встраивать файлы в бинарь, а не мокать диск; об этом автор плохо сообщил в README.