12
мая
2

MFS, создание диска в памяти (RAM-диска)



Для реализации данной возможности в FreeBSD нужно чтобы драйвер виртуального диска md (device md # Memory «disks») был вкомпилен в ядро либо подгружен как модуль с помощью kldload geom_md. MFS (Memory File System, файловая система в оперативной памяти) — это частный случай использования драйвера md, как создание swap-а в файле. MFS позволяет монтировать директорию в оперативную память и работать с файлами там, как в обычной файловой системе, но при этом будет наблюдаться значительный прирост в скорости. Данную возможность полезно использовать при работе с большим колличеством часто обновляемых мелких файлов, к примеру, директория для временных файлов разнообразных демонов или скриптов.

Можно добавить запись об этом в /etc/fstab для создания при старте системы диска в памяти (также указав выделяемый размер оперативной памяти в разумных пределах, чтобы не получить в итоге нехватки ядерной памяти и паники ОС). Данные в этой директории, конечно же, после перезагрузки будут потеряны, поэтому это обязательно следует учесть, например, при пересборке мира через make данные в директории после перезагрузки системы будут утеряны и обновление не будет осуществлено.
Следует понимать также, что в BSD-системах работа с памятью происходит по другому, чем в Linux: используемые данные помещаются в память, перемещая неиспользуемые страницы памяти в раздел подкачки, чтобы увеличить объём доступной физической памяти для активного использования. Вся память, которая явно не выделялась, используется ядром FreeBSD для дискового кэша, поэтому можно наблюдать маленькие значения в поле «Free» диагностической утилитой top и это нормально (лишь бы они были не очень маленькие). Linux же перемещает страницы памяти в раздел подкачки только в крайнем случае.
Для создания устройства памяти используется утилита mdconfig, которая предназначена для конфигурирования и включения дисков памяти.

В «man mdconfig» описано какие типы доступны для создания через опцию -t:

malloc — используется через управление ядром (подробнее в «man 9 malloc») и к тому же пишут что это очень легко может привести к панике ядра;
vnode — для создания диска памяти в файле;
swap — через буффер памяти, т. е. то, что нам нужно (к тому же и упоминается, что этот способ предпочтительней, чем malloc). Хранится именно в области подкачки данные не будут, а будет использоваться общая доступная память для размещения страниц (если данные не используются, то перемещаются в swap-раздел).

Для создания диска в памяти размером 10 мегабайт необходимо выполнить (название будет отображено в выводе):

mdconfig -a -t swap -s 10m
md0 

Удаление (очистка) устройства md0 с системы после его отмонтирования (устройство не должно использоваться, иначе отключить его не получится):

mdconfig -d -u 0 

Для проверки можно выполнить:

mdconfig -lv 

Далее для монтирования в какую-либо директорию нужно отформатировать полученное устройство (к примеру, md0) и проверить доступность через вывод команды mount:

newfs /dev/md0
/dev/md0: 10.0MB (20480 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 2.52MB, 161 blks, 384 inodes.
super-block backups (for fsck -b #) at:
160, 5312, 10464, 15616
mount -o async,noatime,nosuid /dev/md0 /var/spool/tmp && mount |grep md
/dev/md0 on /var/spool/tmp (ufs, asynchronous, local, noatime, nosuid) 

Для создания RAM-диска и сразу же его монтирования удобно использовать утилиту mdmfs или mount_mfs. Эти утилиты в своей работе используют mdconfig, newfs, mount, т. е. являются некой оболочкой для данных команд. По умолнчанию mdmfs создает swap-based диск памяти (можно и указать swap в файле vnode-backed MD_VNODE, как и MD_MALLOC) и монтируюет с включенной технологией soft-updates в указанную директорию.

Пример использования mdmfs:

mdmfs -o async,noatime,nosuid -s 1024m md /var/spool/daemon 

-o — можно указать обычные опции монтирования файловой системы;
-s — размер создаваемого диска памяти, в данном случае 1024 мегабайт.

mount | grep md
/dev/md0 on /var/spool/daemon (ufs, local, noatime, nosuid, soft-updates)
mdconfig -lv
md0     swap       1024M 

На man-странице справочного руководства можно найти дополнительные опции, к примеру:
-S можно указать, чтобы не использовалась soft-updates на файловой системе;
-F file используется, когда создается диск памяти в файле.

В /etc/fstab для создания при загрузке ОС можно прописать, к примеру, следующее:

md /var/spool/daemon mfs rw,async,noatime,nosuid,-s1024m 2 0 
Понравилась статья?
Подписаться на RSS feed
2 комментария:
  1. ttys 27 марта, 2012

    у меня вроде без newfs /dev/md0 работает

    grep md /etc/fstab
    md0 /tmp mfs rw,-s512m 2 0

  2. Nemo 28 марта, 2012

    Данной записью в /etc/fstab создается на 512M и монтируется swap-backed файловая система в /tmp, что соответствует запуску команды
    mdmfs -s 512m -o rw /tmp
    а утилита mdmfs для работы с md-дисками использует mdconfig, для получения файловой системы UFS на нем — newfs и для монтирования — mount.

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