Tmpfs — временное файловое хранилище во многих Unix-подобных ОС. Предназначена для монтирования файловой системы, но размещается в ОЗУ вместо физического диска. Подобная конструкция является подобной RAM-диску.
Семантика
Все данные в tmpfs
являются временными в том смысле, что ни одного файла не будет создано на жёстком диске. После перезагрузки все данные, содержащиеся в tmpfs
, будут утеряны.
Память, используемая для временной файловой системы, варьируется в размерах в зависимости от количества размещённых файлов в ней и может быть расширена за счёт swap. Многие Unix-подобные ОС используют tmpfs
по умолчанию для размещения /tmp
или для разделения памяти. Это можно увидеть в выводе команды df
, например:
Filesystem Size Used Avail Use% Mounted on
tmpfs 256M 688K 256M 1% /tmp
Реализации
SunOS/Solaris
SunOS 4 включала ранние разработки tmpfs
; она впервые появилась в SunOS 4.0 в конце 1987, вместе с новым ортогональным управлением адресным пространством, что позволяло разместить любой объект в памяти.[1][2]
В Solaris /tmp
размещалась в tmpfs
, что стало стандартом в Solaris 2.1, вышедшей в ноябре 1994. Вывод команды df
в Solaris показывал swap как файловую систему любого tmpfs
раздела:
# df -k
Filesystem kbytes used avail capacity Mounted on
swap 601592 0 601592 0% /tmp/test
Linux
tmpfs
стал поддерживаться Linux с версии 2.4.[3] В ней tmpfs
(также известная как shmfs
) отличается от Linux RAM-диска динамическим выделением памяти и перемещением неиспользуемых страниц в swap. RAMfs
наоборот, не использует swap (это может быть как преимуществом, так и недостатком). Вдобавок, MFS и некоторые старые версии RAMfs
, не изменяли свой размер динамически, а оставались того размера, как были примонтированы.
Использование tmpfs
, например:
mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0700 tmpfs /space
которая будет возрастать до 1 GiB с 10240 инодами в ОЗУ/swap и доступная только владельцу каталога /space
. Максимальный размер файловой системы может быть изменён «на лету», например:
mount -o remount,size=2G /space
В tmpfs
могут быть размещены любые каталоги, хранящие временные данные, удаляемые при перезагрузке системы: /var/lock
, /var/run
, /tmp
и др. Кроме того, для уменьшения количества дисковых операций (в целях максимального повышения производительности системы или экономии ресурса твердотельных накопителей) в tmpfs
иногда размещают каталоги, которые обычно хранят данные между перезагрузками, например, /var/tmp
(этот каталог нередко очищается, хотя рекомендовано этого не делать[4]) или каталоги кэширования некоторых программ (интернет-браузеров).
BSD
tmpfs
была реализована в NetBSD версии 4.0, 10 сентября 2005[5]. В FreeBSD 7.0 появилась портированная из NetBSD tmpfs
.[6] В DragonFly BSD, с версии 2.5.1, тоже имеется портированная из NetBSD реализация tmpfs
.
Microsoft Windows
В Windows имеется приблизительный аналог tmpfs
в виде «временных файлов». Файлы, созданные с атрибутом FILE_ATTRIBUTE_TEMPORARY
и флагом FILE_FLAG_DELETE_ON_CLOSE
размещаются в ОЗУ и записываются на жёсткий диск только если системе не хватает оперативной памяти. Таким образом, «временные файлы» аналогичны tmpfs
, за исключением того, что при нехватке памяти они записываются по указанному при их создании пути, а не в файл подкачки. Этот метод часто используется на серверах с TransmitFile
для подготовки контента и его буферизацией перед отправкой клиенту.
Примечания
Ссылки
|
---|
Дисковые |
|
---|
Распределённые (сетевые) | |
---|
Специальные | Псевдо- и виртуальные | |
---|
Шифрованные | |
---|
|
---|