tmpfs (Русский) - ArchWiki

Jump to content
From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи 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,noatime /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

Category:

- File systems (Русский)