Tmpfs
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
для подготовки контента и его буферизацией перед отправкой клиенту.
Примечания
[править | править код]- ↑ Peter Snyder. tmpfs: A Virtual Memory File System (PDF). Дата обращения: 2 июля 2010. Архивировано 1 мая 2012 года.
- ↑ Hal L. Stern. SunOS 4.1 Performance Tuning (GZipped PostScript). Дата обращения: 2 июля 2010. Архивировано 1 мая 2012 года.
- ↑ Daniel Robbins. Advanced filesystem implementor's guide (1 сентября 2001). Дата обращения: 2 июля 2010. Архивировано 1 мая 2012 года. Статья, описывающая реализации в Linux
- ↑ Filesystem Hierarchy Standard . Дата обращения: 10 ноября 2012. Архивировано 3 января 2013 года.
- ↑ Julio M. Merino Vidal. NetBSD-SoC: Efficient memory file-system (24 февраля 2006). Дата обращения: 2 июля 2010. Архивировано 1 мая 2012 года.
- ↑ Derek Morr. FreeBSD tmpfs manpage (2 декабря 2008). Дата обращения: 2 июля 2010. Архивировано 1 мая 2012 года.
Ссылки
[править | править код]- Documentation/filesystems/tmpfs.txt (недоступная ссылка) (англ.)
- tmpfs(7FS)|man pages section 7: Device and Network Interfaces (англ.)
- mount_tmpfs(8)|mount_tmpfs(8) — NetBSD Manual Pages (англ.)
- Using tmpfs for /tmp, /var/{log, run, lock…} (англ.)