Tmpfs
tmpfs (temporary file system, временная файловая система; ранее известна как shmfs) — это виртуальная файловая система, создаваемая для хранения файлов в динамической (непостоянной) памяти. tmpfs обычно создаётся в ОЗУ.
Предупреждение
Непостоянная память (такая как ОЗУ) не сохраняет файлы после остановки, перезагрузки или краха системы. Это очевидно из названия: tmpfs предназначается только для временных файлов. Лучшей практикой является хранение в tmpfs только восстановимых/воссоздаваемых файлов.
В Linux ramfs (random access memory file system) была заменена на tmpfs, так как старая реализация ramfs плохо справлялась в ситуациях, когда в системе кончалась оперативная память. tmpfs позволяет файловой системе динамически расширяться по мере необходимости до определённого заданного предела; после его достижения она будет использовать пространство раздела подкачки (если он есть в системе).
Есть много сценариев использования временной файловой системы в Linux, одним из них является выделение под каталог /tmp , которому не нужно физическое хранилище для постоянных данных.
Важно
При использовании systemd, каталог /tmp по умолчанию монтируется как tmpfs. См. данный раздел, чтобы отключить это поведение и монтировать его вручную через /etc/fstab .
Установка
Ядро
Необходимо включить следующие параметры ядра:
File systems ---> Pseudo filesystems ---> [*] Tmpfs virtual memory file system support (former shm fs) [ ] Optional drivers
Параметры | Описание |
---|---|
Tmpfs POSIX Access Control Lists | Включение разрешений ACL. |
Tmpfs extended attributes | Включение поддержки метаданных. |
Использование
Создайте и смонтируйте tmpfs одним приёмом:
Пользователи могут указать параметр монтирования size для ограничения максимального размера файловой системы (по умолчанию — половина доступного объёма ОЗУ). Заметьте, что tmpfs не резервирует данную память, она выделяет только необходимый объём.
systemd
При использовании systemd каталог /tmp по умолчанию монтируется как tmpfs с выделением объёма, который система считает достаточным без чрезмерного потребления ОЗУ.
Пользователи могут просматривать временные файловые системы с помощью следующей команды:
Эта команда отобразит точку монтирования /tmp (если она является файловой системой tmpfs) и её размер.
Чтобы отключить такое поведение и вернуть назад управление над каталогом с помощью /etc/fstab , необходимо выполнить следующую команду:
Эта команда не будет больше монтировать /tmp в виде tmpfs и автоматически вернётся к блочному устройству.
Теперь необходимо добавить новую строку в /etc/fstab , которая вручную создаст tmpfs для /tmp .
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
OpenRC
Пользователи OpenRC могут просто добавить точку монтирования в /etc/fstab :
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
Другие возможные каталоги
Ниже приведён список каталогов, которые можно смонтировать в виде tmpfs для получения прироста производительности. Перед тем, как вручную смонтировать их через /etc/fstab , воспользуйтесь командой findmnt для проверки того, являются ли они уже точками монтирования tmpfs.
Каталог | Назначение |
---|---|
/run | Переменные данные среды. Информация о работающей системе с момента загрузки, например, текущие пользователи и запущенные сервисы. |
Заметка
Обычно не требуется что-либо делать вручную, поскольку и OpenRC, и systemd монтируют /run в tmpfs по умолчанию. Если по какой-то причине вы делаете это вручную, не забудьте установить правильные разрешения (0755 / drwxr-xr-x)!
Заключение
В результате использования временной файловой системы для непостоянных файлов, например для каталога /tmp , система становится очень быстрой и отзывчивой при кэшировании файлов и хранении данных сеансов. Это помогает также при использовании браузера для просмотра веб-ресурсов, так как куки-файлы сохраняются в этом непостоянном пространстве, и само приложение работает быстрее; при каждой перезагрузке они удаляются из ОЗУ. Если пользователям необходимо хранить временные файлы для анализа, тогда следует избегать использование файловой системы tmpfs для /tmp и других каталогов. Все данные в tmpfs будут потеряны при перезагрузке или отключении системы.
Улучшение технологии
Некоторые производители оборудования предоставляют устройства для кэширования, которые работают медленнее ОЗУ, но быстрее SSD. Эти устройства обычно исполняются в виде PCIe-карты и имеют адаптер от PCIe к разъёму M.2, либо всё запоминающее устройство встраивается в PCIe-карту.
Если пользователям необходимо универсальное энергонезависимое решение, которое будет быстрее устройств SSD/SAS/SATA, то можно использовать эти высокоскоростные решения. Конечно, в этом случае вместо монтирования устройства tmpfs следует использовать традиционную файловую систему.
Можно также использовать технологию наподобие Intel 3Dx Optane memory cache, однако она, несмотря на более универсальный подход, чем SSD, имеет тенденцию устаревать. Тем не менее, она обеспечивает блестящую промежуточную точку, которая будет только улучшаться по мере развития технологии в будущем и при правильной настройке обеспечивает гораздо более быструю работу.
Смотрите также
- Portage TMPDIR on tmpfs — Building packages in tmpfs both speeds up emerge times and reduces HDD/SSD wear.
- Zram — a Linux kernel feature and userspace tools for creating compressible RAM-based block devices.
tmpfs
tmpfs is a temporary filesystem that resides in memory and/or swap partition(s). Mounting directories as tmpfs can be an effective way of speeding up accesses to their files, or to ensure that their contents are automatically cleared upon reboot.
Usage
Some directories where tmpfs(5) is commonly used are /tmp, /var/lock and /var/run. Do not use it on /var/tmp, because that directory is meant for temporary files that are preserved across reboots.
Arch uses a tmpfs /run directory, with /var/run and /var/lock simply existing as symlinks for compatibility. It is also used for /tmp by the default systemd setup and does not require an entry in fstab unless a specific configuration is needed.
glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for POSIX shared memory. Mounting tmpfs at /dev/shm is handled automatically by systemd and manual configuration in fstab is not necessary.
Generally, tasks and programs that run frequent read/write operations can benefit from using a tmpfs directory. Some applications can even receive a substantial gain by offloading some (or all) of their data onto the shared memory. For example, relocating the Firefox profile into RAM shows a significant improvement in performance.
Examples
Note: The actual memory/swap consumption depends on how much is used, as tmpfs partitions do not consume any memory until it is actually needed.
By default, a tmpfs partition has its maximum size set to half of the available RAM, however it is possible to overrule this value. To explicitly set a maximum size, in this example to override the default /tmp mount, use the size mount option:
tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0
To specify a more secure mounting, specify the following mount option:
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=user,gid=group,mode=1700 0 0
See the tmpfs(5) man page and Security#File systems for more information.
Reboot for the changes to take effect. Note that although it may be tempting to simply run mount -a to make the changes effective immediately, this will make any files currently residing in these directories inaccessible (this is especially problematic for running programs with lockfiles, for example). However, if all of them are empty, it should be safe to run mount -a instead of rebooting (or mount them individually).
After applying changes, verify that they took effect by looking at /proc/mounts and using findmnt :
TARGET SOURCE FSTYPE OPTIONS /tmp tmpfs tmpfs rw,nosuid,nodev,relatime
The tmpfs can also be temporarily resized without the need to reboot, for example when a large compile job needs to run soon. In this case, run:
# mount -o remount,size=4G /tmp
Disable automatic mount
Under systemd, /tmp is automatically mounted as a tmpfs, if it is not already a dedicated mountpoint (either tmpfs or on-disk) in /etc/fstab . To disable the automatic mount, mask the tmp.mount systemd unit.
Files will no longer be stored in a tmpfs, but on the block device instead. The /tmp contents will now be preserved between reboots, which might not be the desired behavior. To regain the previous behavior and clean the /tmp directory automatically when restarting, consider using tmpfiles.d(5) :
# see tmpfiles.d(5) # always enable /tmp directory cleaning D! /tmp 1777 root root 0 # remove files in /var/tmp older than 10 days 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
Troubleshooting
Opening symlinks in tmpfs as root fails
Considering /tmp is using tmpfs, change the current directory to /tmp , then create a file and create a symlink to that file in the same /tmp directory. Permission denied errors are to be expected when attempting to read the symlink due to /tmp having the sticky bit set.
This behavior can be controlled via /proc/sys/fs/protected_symlinks or simply via sysctl: sysctl -w fs.protected_symlinks=0 . See Sysctl#Configuration to make this permanent.