tmpfs (Русский)
tmpfs - это временная файловая система, которая находится в памяти и/или вашем разделе(ах) подкачки, в зависимости от того, насколько вы её заполнили. Монтирование каталогов как TMPFS - это эффективный способ ускорения доступа к своим файлам. Также это полезно, если вам нужно, чтобы содержимое каталогов автоматически удалялось при перезагрузке.
Использование
Некоторые каталоги, где обычно используется tmpfs(5): /tmp, /var/lock и /var/run. Не используйте его на /var/tmp, так как этот каталог предназначен для временных файлов, которые сохраняются после перезагрузки.
Arch использует tmpfs в каталоге /run
, с симлинками для совместимости /var/run
и /var/lock
. Он также используется для /tmp
в настройках по умолчанию systemd и не требует записи в fstab, если не требуется конкрентная настройка.
glibc 2.2 и выше ожидает что /dev/shm
будет смонтирован tmpfs для
POSIX разделяемой памяти. Монтирование /dev/shm
в tmpfs выполняется автоматически systemd, поэтому ручная настройка в fstab больше не требуется.
Как правило, задачи и программы, которые выполняют частые операции чтения/записи, могут выиграть от использования каталога tmpfs. Некоторые приложения могут даже получить существенную выгоду при переносе некоторых (или всех) их данных на общую память. Например, перемещение профиля Firefox в оперативную память показывает значительное улучшение производительности.
Примеры
По умолчанию раздел tmpfs имеет максимальный размер в половину от всей оперативной памяти, но это можно настроить.
Чтобы точно установить максимальный размер, в данном примере, чтобы переопределить значение по умолчанию для монтирования /tmp
, используем опцию монтирования size
:
/etc/fstab
tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0
Пример с опциями монтирования для большей безопасности:
/etc/fstab
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=пользователь,gid=группа,mode=1700 0 0
Смотрите tmpfs(5) и Безопасность#Файловые системы для более подробной информации.
Перезагрузитесь, для того чтобы изменения вступили в силу. Обратите внимание, что может быть заманчивым, выполнить mount -a
, чтобы сделанные изменения вступили в силу немедленно, это сделает недоступными какие-либо файлы, которые в настоящее время находятся в этих каталогах (например, особенно проблематично для запуска программ с файлами блокировки). Тем не менее, если все они пусты, она должна быть безопасной для запуска mount -a
, вместо перезагрузки (или смонтируйте их в индивидуальном порядке).
После применения изменений, вы можете убедиться в том, что они вступили в силу, посмотрев в /proc/mounts
и используя findmnt
:
$ findmnt /tmp
TARGET SOURCE FSTYPE OPTIONS /tmp tmpfs tmpfs rw,nosuid,nodev,relatime
TMPFS также может быть временно изменен, без необходимости в перезагрузке, например, когда в ближайшее время необходимо выполнить большую работу компиляции. В этом случае вы можете запустить:
# mount -o remount,size=4G /tmp
Отключить автоматическое монтирование
systemd автоматически монтирует /tmp
как tmpfs, даже если нет записи в /etc/fstab
.
Для отключения автоматического монтирования замаскируйте юнит tmp.mount
.
После этого файлы в /tmp
станут храниться не в памяти, а на блочном устройстве.
Содержимое /tmp
теперь будет сохраняться между перезагрузками, что может быть нежелательно.
Чтобы вернуть прежнее поведение и очищать каталог /tmp
автоматически при перезагрузке, можно использовать tmpfiles.d(5):
/etc/tmpfiles.d/tmp.conf
# смотрите tmpfiles.d(5) # очистка каталога /tmp всегда включена D! /tmp 1777 root root 0 # удалить файлы в каталоге /var/tmp старше 10 дней D /var/tmp 1777 root root 10d # namespace mountpoints (PrivateTmp=yes) are excluded from removal x /tmp/systemd-private-* x /var/tmp/systemd-private-* X /tmp/systemd-private-*/tmp X /var/tmp/systemd-private-*/tmp
Решение проблем
Не получается открытие символьных ссылок в tmpfs от root
Предполагая, что /tmp
использует tmpfs, измените текущий каталог на /tmp
, а затем создайте файл и создайте символическую ссылку на этот файл в том же каталоге /tmp
. При попытке прочитать файл по символической ссылке иногда может возникать ошибка «Отказано в доступе». Это ожидаемое поведение, так как /tmp
имеет установленный sticky bit.
Поведение можно настроить через /proc/sys/fs/protected_symlinks
или просто с помощью sysctl: sysctl -w fs.protected_symlinks=0
. Чтобы сделать изменение постоянным, смотрите sysctl (Русский)#Настройка.