Tmpfs linux что это
Файловая система в оперативной памяти — как пользоваться tmpfs
Файловая система tmpfs может найти повседневное применение в вашей деятельности, поскольку она невероятно быстрая и может помочь снизить нагрузку на ваше постоянное хранилище (особенно актуально тем, у кого Linux установлен на флешку или карту памяти).
tmpfs — это виртуальная файловая система, располагающаяся в оперативной памяти.
Средство tmpfs позволяет создавать файловые системы, содержимое которых находится в виртуальной памяти. Поскольку файлы в таких файловых системах обычно находятся в ОЗУ, доступ к файлам осуществляется очень быстро.
Файловая система создаётся автоматически при монтировании файловой системы с типом tmpfs с помощью следующей команды:
Файловая система tmpfs имеет следующие свойства:
Если файловая система tmpfs размонтирована, её содержимое теряется (удаляется).
Вы можете скопировать в tmpfs файлы для максимально быстрого доступа. Это могут быть файлы баз данных или веб-сервера.
Ещё одна цель использования — снизить износ постоянного хранилища. Это не особенно актуально для жёсткого диска или твердотельного диска — современные модели при любом типе домашнего использования переживут нас. Но это может быть актуально, если система установлена на карту памяти. Вы можете разместить в оперативную память приложение, которое постоянно использует хранилище (часто обращается к файлам или непрерывно сохраняет файлы), тем самым ускорится работа этого приложения, а также всей системы за счёт снижения нагрузки на карту памяти.
Ещё одна возможная причина использование — незаметность, при работе в tmpfs всё будет происходить в оперативной памяти, а на постоянных хранилищах не останется никаких следов.
Рассмотрим пример копирования файлов — насколько быстрее это будет происходить в tmpfs по сравнению с дисками.
Создадим точку монтирования:
Создадим виртуальную файловую систему размером 20 Гигабайт в оперативной памяти:
Скопируем туда файл размером в несколько Гигабайт:
Проверим, сколько времени понадобится для создания копии этого файла в оперативной памяти:
Понадобилось совсем немного времени — примерно полторы секунды.
А теперь сделаем копию этого же файла на жёстком диске:
Понадобилось 14 секунд — в 10 раз больше времени.
Итак, используя tmpfs можно добиться максимальной скорости доступа к файлам.
Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
Статьи по настройке и администрированию Windows/Linux систем
Настройка и использование ramfs и tmpfs
Решил написать маленькую статью о ramfs и tmpfs. Если у вас есть сервера с нормальным количеством RAM и нужно увеличить скорость чтения и записи динамичного контента (в моем случае – это кэширование видео чанков и вообще кэш), это именно то, что вам надо.
Настройка и тест ramfs
Файловая система ramfs использует столько оперативной памяти, сколько позволит система. Если вся оперативка закончилась, а файлы продолжают литься – системе придет конец. Даже если будет указан максимальный размер при монтировании – никаких уведомлений вы не получите если этот лимит будет превышен, память просто будет таять.
Приступаем к практике. Для начала создадим папку и смонтируем ramfs раздел.
Чтобы проверить, где у нас смонтировано ramfs разделы нужно использовать команду mount, так как df ничего не покажет.
Теперь протестируем скорость записи и чтения. У меня есть файлы по 200М каждый и 489М RAM. Т.е. если скопируем один файл в папку /mnt/ramfs-folder – он попадёт в RAM, а именно в страничный кэш(используется при операциях чтения).
Как видим, теперь 200М попали в RAM, теперь можно сравнить скорость чтения и записи файлов с диска и с ramfs.
Ну и на последок проверим что будет, если в ramfs папку залить файлов больше чем доступно RAM.
Как видно, закончилась память и теперь системе поможет только reboot. Чтобы таких ситуаций не возникло, нужно настроить мониторинг размера ramfs.
Настройка и тест tmpfs
Данная файловая система имеет заранее установленный фиксированный размер и она может размещаться в RAM и swap памяти. Если вся оперативка закончилась, а файлы продолжают литься – будет использоваться swap и уже после того, как swap закончиться системе придет конец. При монтировании нужно указывать желаемый размер файловой системы и если указанный лимит будет привешен – система выдаст соответствующее сообщение.
Приступаем к практике. Для начала создадим папку и смонтируем tmpfs раздел размером 600М.
В данном случае df покажет смонтированную tmpfs файловую систему.
Напомню, что у нас есть файлы по 200М каждый, 489М RAM и 509М swap. Т.е. если скопируем файл в папку /mnt/tmpfs-folder – он попадёт в RAM, а если RAM будет забит, но лимит не превышен – мы попадем в swap. Проверяем.
Как видим, когда закончилось зарезервированное место в tmpfs мы получили «No space left on device» сообщение. Когда закончился RAM, мы попали в swap.
Теперь протестируем скорость записи и чтения.
Ну и на последок проверим что будет, если в tmpfs папку залить файлов больше чем доступно RAM и swap вместе взятых – картина та же, сначала закончиться RAM, потом swap, потом нужен будет reboot. По этому нужно мониторить и tmpfs и swap или ставить размер tmpfs меньшим чем размер RAM-a.
Заключение
Обе файловые системы ramfs и tmpfs являются энергозависимыми(volatile). Иными словами, если в системе произойдет сбой, она будет перезагружена или будет выключена по какой-либо причине, данные, хранящиеся в любой из этих файловых систем будут уничтожены. По этому, не советую здесь хранить важных данных.
В нашей системе видостриминга используется ramfs для кэширования VOD контента размер которого контролируется мониторинг системой.
Tmpfs linux что это
Linux отлично управляется с оперативной памятью — если посмотреть в диспетчере задач, можно увидеть, что почти вся оперативка занята под файловый кэш. Но нет предела совершенству — свободную оперативную память можно взять под свой контроль, значительно ускорив работу системы и отдельных программ.
Tmpfs: используйте RAM как обычный каталог.
В Windows есть утилиты, которые создают диски в оперативке — так называемые Ramdisk’и. В Linux никаких утилит для этого не требуется, эта функциональность — часть ядра, и называется она tmpfs.
Посмотрим, используется ли tmpfs в Linux Mint:
Как видно по первой строке, Udev держит файлы устройств именно в tmpfs. Также туда монтируются каталоги со служебными файлами. Такую же картину вы увидите практически во всех дистрибутивах. Вот, например, Arch Linux:
Здесь в tmpfs примонтирован ещё и каталог /tmp, в котором лежат временные файлы, кэши, и т. д. Вырисовывается смысл использования tmpfs — файлы, для которых нужна максимальная скорость доступа, и которые можно безболезненно потерять при отключении питания. Ведь оперативная память в тысячи раз быстрее самых быстрых SSD, но теряет содержимое при отключении.
Использовать tmpfs для своих целей не легко, а очень легко. Выбираете удобный путь в файловой системе и прописываете его в /etc/fstab (перед этим не забудьте создать соответствующий каталог):
В первом столбце должно быть указано устройство, в нашем случае это tmpfs. Второй столбец — каталог монтирования. В третьем обозначается тип ФС, у нас это снова tmpfs. Опция nodev отключает создание устройств в монтируемом каталоге, а nosuid запрещает повышение прав — всё это в целях безопасности. Если оттуда не планируется запускать программы, можно добавить ещё noexec. Наконец, опция size задаёт максимальный размер каталога tmpfs. Без этой опции он равен половине оперативной памяти.
После перезагрузки созданный «раздел» tmpfs отображается прямо на рабочем столе:
Для чего можно его использовать? Вариантов много:
Zram: tmpfs + прозрачное сжатие.
С ростом мощности процессоров в чью-то голову неизбежно пришла мысль: а что если взять tmpfs и примотать к ней скотчем сжатие на лету? Так появилась технология compcache, которая эволюционировала в Zram.
Суть её проста: в оперативке создаётся полноценное блочное устройство с обычной файловой системой, но все данные перед записью на него автоматически сжимаются. Обычно используется алгоритм lz4, потому что он очень и очень быстрый, и при этом сжимает неплохо.
В Ubuntu и производных дистрибутивах нужно установить пакет zram-config:
Перезагружаемся и видим, что утилита создала два накопителя Zram, а на них — разделы подкачки:
Что это даёт? Обратите внимание, что приоритет Zram-свопа выше приоритета обычного свопа. Это значит, что при исчерпании памяти будет сначала наполняться Zram. А так как оперативная память в тысячи раз быстрее HDD или SSD, то даже при активном свопинге система не будет адски тормозить!
При этом в Zram-устройство размером в 1 Гб может уместиться около 3 Гб данных, благодаря сжатию lz4. Так что, используя Zram, вы фактически увеличиваете размер оперативной памяти. Пример: у вас есть 4 Гб оперативки, половину из них вы отдаёте под Zram-своп. Благодаря сжатию, из 2 Гб Zram вы получаете около 6 Гб фактического места. И эти 6 Гб, хоть и являются свопом, но работают со скоростью оперативной памяти!
Алгоритм сжатия lz4 мало нагружает процессор — частоты в 1 ГГц уже достаточно, чтобы не ощущать затрат на сжатие. Поэтому Zram с большим эффектом используется в смартфонах: там часто стоят мощные процессоры, но не хватает оперативки. Впрочем, Zram актуален и на десктопах — мало кому нравятся рывки в работе ОС при исчерпании оперативной памяти.
Файловая система Linux полностью на tmpfs — скорость без компромиссов
Предыстория
Так сложилось, что уже пять лет мой раздел ntfs с операционной системой Windows располагается на рамдиске. Решено это не аппаратным, а чисто программным способом, доступным на любом ПК с достаточным количеством оперативной памяти: рамдиск создается средствами загрузчика grub4dos, а Windows распознаёт его при помощи драйвера firadisk.
Однако до недавнего времени мне не был известен способ, как реализовать подобное для Linux. Нет, безусловно, существует огромное количество линуксовых LiveCD, загружающихся в память при помощи опций ядра toram, copy2ram и т. д., однако это не совсем то. Во-первых, это сжатые файловые системы, обычно squashfs, поэтому любое чтение с них сопровождается накладными расходами на распаковку, что вредит производительности. Во-вторых, это достаточно сложная каскадная система монтирования (так как squashfs — рид-онли система, а для функционирования ОС нужна запись), а мне хотелось по возможности простого способа, которым можно «вот так взять и превратить» любой установленный на жесткий диск Linux в загружаемый целиком в RAM.
Но поскольку установка Debian не является предметом этой статьи, подробно ее описывать не буду.
Такой выбор в общем продиктован тем, что оперативной памяти никогда не бывает много и держать в ней что-то огромное вроде KDE не предполагалось. После установки необходимых для работы программ на жестком диске оказалось занято полтора гигабайта. Установка производилась в один раздел, без раздела swap. Оперативной памяти на компьютере установлено 16 гигабайт.
Собственно, способ
3. В файле /etc/fstab закомментируем строку, описывающую монтирование корневого раздела / и вставим такую строку:
none / tmpfs defaults 0 0
5. В итоге у нас получился линукс, состоящий всего из трех файлов:
кернела, initrd-ram.img и ram.tar.gz. Местонахождение ram.tar.gz указываем в параметре root= ядра в меню загрузчика grub:
title Linux in RAM
kernel /vmlinuz root=/dev/sdb1
initrd /initrd-ram.img
Это вся инструкция. Необходимые комментарии:
— checkfs закомментируем потому, что нет такого fsck для проверки tmpfs, не написали его;
— busybox tar используем для создания архива вместо простого tar из-за того, что в initrd нет простого tar, распаковывать наш архив будет именно busybox, и существует такой баг, что не сможет распаковать;
— звездочка в командной строке не страшна, так как в корне, обычно, нет скрытых файлов и папок, а в директориях они архивируются.
— /mnt/first — это примонтированный раздел с испытуемой ОС, а /mnt/work/ — это раздел для помещения архива.
Как это работает?
Мы изготовили специальный initrd, который при загрузке создает корневую файловую систему типа tmpfs (в этом вся соль, так как располагается она в оперативной памяти), затем смотрит на указанный в опции root= раздел, берет там файл архива, имя которого захардкожено (ram.tar.gz), и распаковывает из него все дерево ФС на эту tmpfs.
Так ФС оказывается в памяти.
Причем tmpfs обладает выгодными отличиями от рамдисков (в том числе от используемого мной для Windows) — она не блочное устройство, а файловая система, она занимает места в памяти ровно столько, сколько занимают файлы, и динамически увеличиватся, если что-то устанавливать, записывать новые файлы, и уменьшается, если деинсталлировать софт, удалять файлы. Остальная память доступна для работы ОС, программ. А еще Linux понимает, что это УЖЕ память и ее не надо кэшировать. Замечательная вещь!
Преимущества
Да, конечно, кэширование в современных ОС частично решает проблему низкой производительности дисковых устройств, но все равно необходимо время для первого прочтения файла с диска, а также он может быть выгружен из кэша в любое время и тогда понадобится время для его повторного чтения. Размещение же всей ОС в памяти является бескомпромиссным решением, гарантирующим максимально возможную скорость чтения и записи ее файлов. Простейший тест с помощью dd демонстрирует 3 гигабайта в секунду на последовательное чтение и 2 гигабайта в секунду на последовательную запись:
dd if=/dev/zero of=/test bs=1M count=500
524288000 bytes (524 MB) copied, 0.268589 s, 2.0 GB/s
dd if=/test of=/dev/null bs=1M count=500
524288000 bytes (524 MB) copied, 0.167294 s, 3.1 GB/s
Это примерно в 30 раз быстрее, чем HDD, и в 8 раз быстрее, чем SSD.
Продвинутый тест с помощью fio демонстрирует iops 349059 при случайном чтении и complete latency 0.29 микросекунд (латентность на два-три (десятичных) ПОРЯДКА меньше, чем у SSD):
В работе
Вывод команды free в типовой рабочей ситуации:
total used free shared buffers cached
Mem: 16469572 3236968 13232604 2075372 65552 2687436
Сразу после загрузки используется около 2 гигабайт памяти, из которых 1.5 занимает файловая система. При наличии 16 гигабайт ОЗУ имеется большой простор для установки даже больших приложений, как LibreOffice или Blender. Размер файла ram.tar.gz примерно полгига, что позволяет хранить его, кернел и initrd на любой небольшой флешке или на CD. Жесткого диска может вообще не быть. Такая система неубиваема. Но главное — это, конечно, скорость работы.
В заключении тридцатисекундный скринкаст о фактической скорости запуска приложений в такой системе. Нет, это не открытие приложений из трея, это запуск программ с носителя, которым в данном случае является tmpfs:
🐧 Как смонтировать временный раздел в оперативной памяти Linux
Что такое TMPFS?
Как следует из названия, tmpfs – это temporary filesystem (временная файловая система), которая создается в памяти или разделах подкачки.
В системах Linux и Unix некоторые каталоги, такие как «/tmp» и «/var/run», монтируются в этой файловой системе.
Все, что сохранено в этих папках, будет автоматически очищено после перезагрузки.
Мы также можем использовать файловую систему tmpfs для программ или задач, требующих большого количества операций чтения / записи для повышения производительности.
Подключаем временный раздел в оперативной памяти на Linux
Чтобы смонтировать временный раздел в памяти в Linux, просто выполните следующую команду от имени пользователя root или sudo:
Приведенная выше команда создаст временный раздел размером 100 МБ в tmpfs и смонтирует его в каталоге / mnt.
Вы можете проверить, смонтирован ли этот временный раздел, с помощью команды «mount»:
Пример вывода с моего сервера CentOS 8:
Как видите он смонтирован.
Давайте рассмотрим каталоги в /mnt с помощью команды «df»:
Как видите, размер временного раздела составляет 100M.
Теперь вы можете использовать этот раздел для любых целей.
Сохраните в нем некоторые файлы и / или каталоги и перезагрузите систему, чтобы убедиться, что они все еще доступны.
После перезагрузки системы раздел с его содержимым исчезнет!