tmpfs
tmpfs — тимчасове файлове сховище у багатьох Unix-подібних операційних системах. Призначена для монтування файлової системи, але розміщується в оперативній пам'яті замість фізичного диска. Подібна конструкція є RAM-диском.
Семантика
Всі дані в tmpfs є тимчасовими в тому сенсі, що жодного файлу не буде створено на твердому диску. Після перезавантаження всі дані, що містяться в 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.[4] У FreeBSD 7.0 з'явилася портована з NetBSD Tmpfs.[5] У 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). Архів оригіналу за 1 травня 2012. Процитовано 2 липня 2010.
- Hal L. Stern. SunOS 4.1 Performance Tuning (GZipped PostScript). Архів оригіналу за 1 травня 2012. Процитовано 2 липня 2010.
- Daniel Robbins (1 вересня 2001). Advanced filesystem implementor's guide. Архів оригіналу за 1 травня 2012. Процитовано 2 липня 2010. Стаття, що описує реализації в Linux
- Julio M. Merino Vidal (24 лютого 2006). NetBSD-SoC: Efficient memory file-system. Архів оригіналу за 1 травня 2012. Процитовано 2 липня 2010.
- Derek Morr (2 грудня 2008). FreeBSD tmpfs manpage. Архів оригіналу за 1 травня 2012. Процитовано 2 липня 2010.
Посилання
- Documentation/filesystems/tmpfs.txt[недоступне посилання з лютого 2019] (англ.)
- 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...} (англ.)