1
октября
3

TmpFS в FreeBSD



TmpFS — это быстрая и эффективная файловая система в ОЗУ, а не на ПЗУ, как прочие ФС. Предназначена для временного хранения файлов с оптимальным расходом памяти и скоростными характеристиками. Обычно используется при монтировании в каталог /tmp, в котором много постоянно меняющихся временных мелких файлов, поэтому может быть целесообразно размещать их в памяти.

TmpFS очень подобна RAM-диску, тем что данные находятся в оперативной памяти. При работе используется виртуальную память (virtual memory, VM), т.е. RAM и SWAP (при потребности подключается пространство подкачки).

Ранее я описывал как создать ФС в памяти с помощью драйвера md (Memory «disks») и хотелось бы упомянуть о нескольких отличиях MFS от TmpFS. Для MFS (Memory File System) нужно создание устройства памяти, т.е. блочного устройства, которое перед использованием нужно отформатировать для определенной файловой системы (например, UFS), которая обычно используется для применения на ПЗУ со своими опциями ориентированными на жесткие диски (например, настройки фрагментации, журналирования, дубликации и пр. операции с секторами/цилиндрами/головками). Поэтому при использовании md возникает дополнительная нагрузка на систему при работе с данными на этом блочном устройстве. TmpFS блочным устройством не является и ее можно использовать сразу после монтирования. MFS при монтировании резервирует и использует определенный объем ОЗУ, указанный при создании диска памяти (место под нее будет выделено из общего пула памяти и при необходимости может перемещаться в область подкачки), а TmpFS может динамически использовать свободную память.TmpFS наиболее быстрая и соответственно производительная из RAM-based файловых систем на текущий момент времени. TmpFS была перенесена с NetBSD в FreeBSD 7-Release и на текущий момент для FreeBSD 9.0 реализация ее в ядре рассматривается как экспериментальная возможность. Она должна использоваться на системах с не критическими задачами.

Для включения в ядро данной возможности нужно перед компиляцией добавить следующую строку:

options TMPFS

либо при загрузке системы подгрузить как модуль, дописав в /boot/loader.conf строку:

tmpfs_load="YES"

и для автоматического монтирования в нужный каталог добавить соответствующую запись в /etc/fstab, например, для объема ФС в 1G:

tmpfs           /tmp            tmpfs   rw,mode=01777,size=1073741824   0   0 

при ручном монтировании будет достаточно команды:

mount -t tmpfs -o mode=01777,size=1073741824 tmpfs /tmp 

При монтировании tmpfs доступны следующие опции:

gid — задает ID группы для корневой inode ФС (по умолчанию будет GID точки монтирования);
uid — задает ID пользователя (по умолчанию — UID точки монтирования);
mode — права доступа в числовой нотации (по умолчанию — как выставлены на точке монтирования);
inodes — максимальное кол-во нод, доступных для ФС. Если не задано, то выбирается соответствующее максимальное значение для размера, который был задан в опции size;
size — общий объем ФС в байтах. По умолчанию равняется нулю. Если 0 или значение больше чем SIZE_MAX — PAGE_SIZE, то будет использоваться доступное кол-во памяти, включая основную память и пространство подкачки (SWAP);
maxfilesize — максимальный объем файла в байтах. По умолчанию — максимально возможный.

После монтирования можно встретить в /var/log/messages сообщение:

kernel: WARNING: TMPFS is considered to be a highly experimental feature
in FreeBSD 

упоминание об экспериментальном состоянии поддержки ядром данного функционала, о чем не следует забывать при намерении использовать ее на серьезных проектах.

Понравилась статья?
Подписаться на RSS feed
3 комментария:
  1. Dmitriy 27 декабря, 2012

    Спасибо за полезную информацию!
    Просьба кое-что поправить.
    Только что делал себе на FreeBSD 9.0
    Там не проходит указание размеров tmpfs кроме как в байтах.
    Т.е., например, для 128Мб:
    # mount -t tmpfs -o mode=01777,size=134217728 tmpfs /var/cache

    /etc/fstab
    tmpfs /var/cache tmpfs rw,mode=01777,size=134217728 0 0

  2. Nemo 27 декабря, 2012

    Исправил. Спасибо за замечание!

  3. Nas_tradamus 19 декабря, 2013

    может кому пригодится:
    uid, gid при монтировании нужно указывать цифрами, иначе права на директорию будут вести себя очень непредсказуемо

Оставить комментарий