Май 28 2010

Tmpfs

Published by

tmpfs — это как следует из названия — временная файловая система, которая находится в виртуальной памяти ( т.е подвержена споппингу)

tmpfs — похожа на ramdisk, но в отличии от него не требует создания файловой системы ( ext2/3 reiserfs и т.д.) не является блочным устройсвом и её размер изменяется динамически (максимальный размер можно ограничить)

т.к. эта файловая система находится в виртуальной памяти, она имеет намного бОльшую скорость чтения-записи,но пригодна только для хранения временных данных.

для того чтобы воспользоваться этой фс, в ядре должна быть включена её поддержка

File systems —>Pseudo filesystems —>Virtual memory file system support (former shm fs)

проверить включена ли эта опция можно так

zgrep CONFIG_TMPFS /proc/config.gz
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y

или

grep CONFIG_TMPFS /usr/src/linux-$(uname -r)/.config

при использовании tmpfs для временных файлов мы получим не только бОльшую скорость чтения-записи, но и, естественно, их удаление при перезагрузках

чтобы использовать tmpfs надо изменить /etc/fstab примерно так

tmpfs                  /tmp          tmpfs     defaults,nodev,nosuid,mode=1777  0      0
tmpfs                  /var/lock     tmpfs     defaults,nodev,nosuid,noexec,mode=1777,size=10m    0      0
tmpfs                  /var/run      tmpfs     defaults,nodev,nosuid,noexec,mode=0755,size=10m    0      0

в gentoo и других source based дистрибутивах имеет смысл смонтировать в tmpfs директорию в которой происходит сборка программ — сборка будет происходить немного быстрее, и уменьшит износ диска (особенно критично для SSD ) и фрагментацию фс

для gentoo это /var/tmp/portage

shm            /var/tmp/portage    tmpfs        size=1013M     0 0

size=1013M — задаёт максимальный размер в мегабайтах

Gentoo

в генту можно воспользоваться скриптом, который перед сборкой смонтирует в tmpfs директорию где происходит сборка

MEMSIZE= задаёт размер tmpfs.

#!/bin/bash
MEMSIZE=1700M
mounted=false
. /etc/init.d/functions.sh
mounttmpfs() {
mount -t tmpfs tmpfs -o size=$MEMSIZE /var/tmp/portage
mounted="true"
}
compile() {
einfo "emerging ${*}"
emerge ${*}
}
unmount() {
ebegin "unmounting tmpfs"
umount -f /var/tmp/portage
eend $?
}
ebegin "Mounting $MEMSIZE of memory to /var/tmp/portage"
if [ -z "$(mount | grep /var/tmp/portage)" ]
then
mounttmpfs
else
eerror "tmpfs already mounted!"
exit 0
fi
eend $?
compile ${*}
if [ -n "$mounted" ]
then
unmount
fi

называем этот скрипт например einstall и сделав его исполняемым  

chmod +x einstall

копируем в /usr/bin

теперь при сборке можно пользоваться им вместо emerge — это ускорит процесс сборки и после установки у нас не останется мусора.

14 responses so far

14 Responses to “Tmpfs”

  1. unikumon 05 Сен 2010 at 01:28

    А почему
    shm /tmp tmpfs defaults 0 0
    а не
    tmpfs /tmp tmpfs defaults 0 0
    ?
    /любопытство :)

  2. megabakson 05 Сен 2010 at 02:17

    glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
    POSIX shared memory (shm_open, shm_unlink).
    можно и так и эдак

  3. burzumkoon 06 Сен 2010 at 21:30
    % equery f nginx | grep -i tmp
    /var/tmp
    /var/tmp/nginx
    /var/tmp/nginx/client
    /var/tmp/nginx/client/.keep_www-servers_nginx-0
    /var/tmp/nginx/fastcgi
    /var/tmp/nginx/fastcgi/.keep_www-servers_nginx-0
    /var/tmp/nginx/proxy
    /var/tmp/nginx/proxy/.keep_www-servers_nginx-0
    /var/tmp/nginx/scgi
    /var/tmp/nginx/scgi/.keep_www-servers_nginx-0
    /var/tmp/nginx/uwsgi
    /var/tmp/nginx/uwsgi/.keep_www-servers_nginx-0

    такие дела -_-

  4. unikumon 09 Сен 2010 at 22:08

    Do NOT use it on /var/tmp, because that folder is meant for temporary files that are preserved between reboots.
    ПРУФ — http://wiki.archlinux.org/index.php/Fstab#tmpfs

  5. unikumon 02 Май 2011 at 16:50

    Using tmpfs for /var/{log,lock,…}

  6. SergMarkovon 06 Июн 2011 at 07:36

    mkdir /home/user/.ramdisk
    Переносим все что хотим запихнуть в tmpfs
    mkdir /home/user/.ramdisk-archive
    Копируем все из /home/user/.ramdisk
    fstab
    tmpfs /home/user/.ramdisk tmpfs size=512m 0 0
    /etc/rc.local
    rsync -a /home/user/.ramdisk-archive/ /home/user/.ramdisk
    /etc/rc.local_shutdown
    rsync -a /home/user/.ramdisk/ /home/user/.ramdisk-archive
    Все прекрасно восстанавливается, если на ребут не жать :-)

  7. SergMarkovon 06 Июн 2011 at 07:39

    А ну да, естественно симлинки делаем из /home/user/.ramdisk в оригинальное расположение

  8. warteraumon 23 Окт 2011 at 18:55

    краем глаза услышал о возможности размещения кэша браузера в памяти. Допустимо ли использование такой строки в fstab:
    tmpfs /opt/opera-cache tmpfs size=300m 0 0

  9. megabakson 23 Окт 2011 at 19:57

    так у оперы кэш же в хомяке лежит…
    ну и если не делать обёртку, которая при запуске монтирует и копирует с винта в оперативу,а при завершении синкает из оперативы на диск…
    получится одноразовый кэш — на один запуск

  10. warteraumon 23 Окт 2011 at 20:29

    >получится одноразовый кэш – на один запуск
    у меня и так кэш при выходе очищается. Вот и решил попробовать.

    >так у оперы кэш же в хомяке лежит…
    перенесу его в настройках в указанную в fstab директорию

    Интересует не сделал ли каких ошибок: может какие опции добавить, исходя из специфичности использования; допустимо ли размещения в /opt?

  11. megabakson 24 Окт 2011 at 00:08

    не хорошо в системную диру писать простым пользователям
    почему бы просто не смонтировать туда диру из хомяка?
    опции…должно хватить

  12. warteraumon 25 Окт 2011 at 21:34

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

  13. unikumon 05 Апр 2012 at 10:31
    export XDG_CACHE_HOME=/dev/shm/username/.cache
    if [ ! -f $XDG_CACHE_HOME ];
    then
        mkdir -p -m 0700 $XDG_CACHE_HOME
    fi
  14. [...] от 1 до 10 и начинает сборку пакета kdelibs. Самое главное — сборка должна происходить в памяти. Вот сам [...]

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress