tmpfs ( сокращение от Temporary File S ystem ) — это парадигма временного хранения файлов , реализованная во многих Unix-подобных операционных системах. Она должна выглядеть как смонтированная файловая система , но данные хранятся в энергозависимой памяти, а не на постоянном устройстве хранения.
Идея tmpfs по своей концепции похожа на RAM disk , поскольку оба предоставляют файловую систему, хранящуюся в энергозависимой памяти; однако реализации различаются. В то время как tmpfs реализован на логическом уровне файловой системы , RAM disk реализован на физическом уровне файловой системы. Другими словами, RAM disk — это виртуальное блочное устройство с обычной файловой системой, работающей поверх него, в то время как tmpfs — это виртуальная файловая система без какого-либо базового блочного устройства.
Все, что хранится в tmpfs, является временным в том смысле, что никакие файлы не будут напрямую созданы на энергонезависимом хранилище, таком как жесткий диск (хотя пространство подкачки используется в качестве резервного хранилища в соответствии с политикой замены страниц операционной системы). При перезагрузке все, что находится в tmpfs, будет потеряно.
Память, используемая tmpfs, увеличивается и уменьшается в зависимости от содержащихся в ней файлов.
Многие дистрибутивы Unix включают и используют tmpfs по умолчанию для ветви /tmp файловой системы или для общей памяти . Это можно наблюдать с помощью df , как в этом примере:
Файловая система Размер Использовано Доступно Использовано% Смонтировано наtmpfs 256M 688K 256M 1% /tmp
В некоторых дистрибутивах Linux (например, Debian ) tmpfs по умолчанию не смонтирована в /tmp ; в этом случае файлы в /tmp будут храниться в той же файловой системе, что и / .
Почти во всех дистрибутивах Linux tmpfs монтируется в /run/ или /var/run/ для хранения временных файлов времени выполнения, таких как файлы PID и сокеты домена Unix .
Существует несколько независимых вариантов концепции tmpfs. Один из самых ранних был разработан Sun Microsystems для SunOS, а другие операционные системы, такие как BSD и Linux, предоставили свои собственные.
SunOS 4 включает в себя, скорее всего, самую раннюю реализацию tmpfs; она впервые появилась в SunOS 4.0 в конце 1987 года вместе с новым ортогональным управлением адресным пространством, которое позволяло отображать любой объект в памяти. [1] [2]
Каталог Solaris /tmp был создан как файловая система tmpfs по умолчанию, начиная с версии Solaris 2.1, [3] выпущенной в декабре 1992 года. [4] Вывод команды Solaris покажет swap в качестве фонового хранилища для любого тома tmpfs:df
# дф -к Файловая система кбайт используется доступная емкость Смонтировано на своп 601592 0 601592 0% /tmp/test
tmpfs поддерживается ядром Linux , начиная с версии 2.4 (4 января 2001 г.). [5] Linux tmpfs (ранее известная как shm fs ) [6] основана на коде ramfs, используемом во время загрузки, и также использует кэш страниц , но в отличие от ramfs она поддерживает выгрузку редко используемых страниц в пространство подкачки, а также ограничения на размер файловой системы и inode для предотвращения ситуаций нехватки памяти (по умолчанию половина физической оперативной памяти и половина количества страниц оперативной памяти соответственно). [7]
В 4.2BSD была представлена MFS [8] — файловая система на основе памяти, реализованная путем применения существующей файловой системы диска FFS к области виртуальной памяти.
tmpfs, файловая система памяти, реализованная с использованием обычных структур данных в памяти для повышения производительности MFS, была включена в официальное исходное дерево NetBSD 10 сентября 2005 года; [9] она доступна в версии 4.0 и более поздних.
FreeBSD перенесла реализацию NetBSD, и теперь она доступна в версиях 7.0 и более поздних. [10]
DragonFly BSD также портировала реализацию NetBSD, которая доступна в версиях 2.5.1 и более поздних.
OpenBSD также перенесла реализацию tmpfs из NetBSD, изначально начатую Педро Мартеллетто и улучшенную многими другими. Она была включена в сборках от 17 декабря 2013 года. [11] Первый выпуск OpenBSD с включенным tmpfs был 5.5. [12] OpenBSD 6.0 отключил tmpfs из-за отсутствия поддержки.
В Microsoft Windows создание файлов с использованием флага FILE_ATTRIBUTE_TEMPORARY заставит файловые системы избегать записи данных обратно в энергонезависимое хранилище, если доступно достаточно кэш-памяти. [13]
Из-за более высоких скоростей ОЗУ по сравнению с дисковым хранилищем tmpfs позволяет кэшу работать намного быстрее при хранении в нем, что приводит к более эффективной системе в целом, хотя операционные системы с кэшем страниц получат меньше преимуществ, поскольку недавно использованные страницы файлов останутся в памяти, если свободной памяти достаточно. Поскольку ОЗУ очищается при перезагрузке, tmpfs предотвращает перегрузку системы, не требуя от пользователя ручного удаления временных файлов. Кроме того, хранение файлов в ОЗУ предотвращает слишком быстрое заполнение дисков и продлевает срок службы твердотельных накопителей за счет сокращения количества операций записи.
В системах без пространства подкачки или там, где пространство подкачки заканчивается, tmpfs может потреблять большие объемы памяти.
Если файлы кэша хранятся в tmpfs, программы будут терять свои кэшированные данные при перезагрузках.