tmpfs (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
tmpfs
. Дата последней синхронизации: 6 мая 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
tmpfs
- это временная файловая система, которая находится в памяти и/или вашем разделе(ах) подкачки, в зависимости от того, насколько вы её заполнили. Монтирование каталогов как TMPFS - это эффективный способ ускорения доступа к своим файлам. Также это полезно, если вам нужно, чтобы содержимое каталогов автоматически удалялось при перезагрузке.
Совет
Можно создавать временные файлы в каталогах tmpfs при загрузке системы с помощью
systemd-tmpfiles
.
Использование
Некоторые каталоги, где обычно используется
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, поскольку они не потребляют память до тех пор, пока она действительно не понадобится.
По умолчанию раздел 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 (Русский)#Настройка
.
Важно
Изменение этого поведения может привести к проблемам безопасности! Отключите это, только если вы знаете что делаете.
Смотрите также
Linux kernel documentation