Создаём RAMdisk на Ubuntu 18.04
Создаем папку для рамдиска (точку монтирования):
ВНИМАНИЕ: Здесь: size=2G это значит, что рамдиск будет иметь размер 2 Гб. Для создание рамдиска размером 256Мб следует вписать:
size=256M
После чего проверяем правильность создания рамдиска командой:
И видим следующий результат:
Теперь вы можете использовать рамдиск как вы используете обычные разделы жесткого диска. Вы даже можете редактировать любые файлы прямо из РАМДИСКА.
Чтобы отключить виртуальный диск (РАМДИСК), выполните следующую команду (все ваши файлы на этом разделе будут моментально удалены):
Подключение RAM-диска на UBUNTU 18.04 автоматически, при загрузке системы
Вы можете использовать файл /etc/fstab для автоматического монтирования виртуального диска при загрузке системы.
Во-первых, сделайте резервную копию файла /etc/fstab. Можно с помощью следующей команды:
Резервная опия файла /etc/fstab сохранится в /etc/fstab.backup. Теперь если что-то случится в процессе, вы сможете просто восстановить файл /etc/fstab.
Открываем файл /etc/fstab:
После чего в конце файла добавляем следующую строчку:
После чего перезагружаем сервер командой:
После загрузки системы РАМдиск должен быть автоматически смонтирован (нужно проверить):
Сохранение данных RAM-диска:
Далее я покажу, как сохранить данные рамдиска на десткий диск при завершении работы системы и загрузить данные с жесткого диска в RAM-диск при загрузке системы.
Для этого создадим каталог, где диск будет смонтирован и где резервные копии данных будут сохраняться должны иметь одинаковый набор прав доступа к файлам.
Сначала создайте каталог, где данных RAM-диска будет сохранен при выключении системы с помощью следующей команды:
Теперь создайте файл системной службы с помощью следующей команды:
Файловая система 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.
Теперь вы можете использовать этот раздел для любых целей.
Сохраните в нем некоторые файлы и / или каталоги и перезагрузите систему, чтобы убедиться, что они все еще доступны.
После перезагрузки системы раздел с его содержимым исчезнет!
Создание оперативного диска в Linux
У меня есть машина с 62 ГБ ОЗУ и транк, который составляет всего 7 ГБ, поэтому я решил создать RAM-диск и скомпилировать его. Я не эксперт по Linux. Я нашел в интернете инструкции по созданию RAM-диска:
но я изменил 8192 на 16777216 в попытке выделить 16 ГБ оперативной памяти.
Я получил следующую ошибку:
В этот момент меня напугали и отпустили.
Это проблема? Могу ли я преодолеть этот /dev размер?
Проблема заключается в том, что максимальный размер виртуального диска, в частности размер памяти, к которому можно получить доступ через драйвер виртуального диска, настраивается во время компиляции, может быть перезаписан во время загрузки, но остается фиксированным после загрузки ядра в память. Значение по умолчанию, вероятно, измеряется в мегабайтах. Если я правильно помню, память для RAM-диска зарезервирована прямо при загрузке драйвера, все RAM-диски имеют одинаковый размер, и по умолчанию существует около 16 RAM-дисков. Так что даже вы не хотите размер виртуального диска 16G 
Чтобы создать большой RAM-диск после загрузки, без каких-либо проблем с параметрами ядра, это похоже на работу. Используйте tmpfs, создайте файл, смонтируйте его через цикл и смонтируйте его через файловую систему:
Этот подход более предсказуем, поскольку он создает настоящую ext4 файловую систему и никогда не превышает заданный вами предел. Но это требует больше шагов для настройки и использует ОЗУ менее эффективно.
Использование модуля ядра brd (/ dev / ram0)
Чтобы создать и инициализировать 4 ГБ ОЗУ:
Чтобы освободить RAM-диск, размонтируйте его и удалите brd модуль ядра:
Создание блочного устройства внутри ramfs
Кроме того, вы можете создать блочное устройство внутри ramfs :
Команда truncate создает пустой файл заданного размера, так что он инициализируется (то есть потребляет память) по требованию.
Чтобы освободить RAM-диск, размонтируйте его и удалите образ диска:
Сравнение с tmpfs и ramfs
Хотя tmpfs и ramfs более эффективны, чем использование блочных устройств, ниже приведены некоторые их недостатки.
tmpfs может поменяться на диск. Это более эффективно, но могут быть случаи, когда вам нужен чистый RAM-диск:
ramfs прост в настройке, освобождает пространство после удаления файлов и более эффективно использует оперативную память (система не буферизует файлы, потому что она знает, что они находятся в оперативной памяти). Но у него есть свои недостатки и сюрпризы:
df Утилита не сообщает использование пространства:
Параметр ограничения размера отсутствует. Если вы добавите слишком много в виртуальный диск, ваша система будет зависать.
И то, tmpfs и другое ramfs может вести себя иначе, чем настоящая ext4 файловая система. Создание блочного устройства в ОЗУ и его инициализация ext4 позволяют избежать этого.
Вы можете смонтировать ramfs файловую систему, скопировать в нее свой проект и работать оттуда. Это гарантирует, что ваши входные файлы загружены в ОЗУ, и они не будут перечитываться с гораздо более медленного диска. Однако, как вы обнаружили, это, как правило, не полезная стратегия. Вы уже получаете точно такую же выгоду.
Вы уже можете доверять, что ваши входные файлы кэшируются в ОЗУ, при первом чтении. Ваши выходные файлы также кэшируются, так что вы не ждете, пока они будут записаны на диск.
Не существует искусственного ограничения на объем кеширования, продолжительность его кеширования и т. Д. Кэши начинают сбрасываться только после заполнения ОЗУ. Какой кеш удаляется первым, выбирают ужасно разработанные алгоритмы. Первое приближение, мы описываем это как Наименее недавно использованный. См. Какие алгоритмы замены страниц используются в ядре Linux для кеширования файлов ОС?
Обратите внимание, что ваш текстовый редактор будет явно fsync() сохранять файлы на диск.
TMPFS
Другие причины, почему записи могут замедляться
Как создать ramdisk в Linux или виртуальный диск в RAM
Иногда попадаются задачи, когда нужно работать с большим количеством мелких файлов или некоторое небольшое время хранить объемные данные и делать это по возможности быстро, без завязок на медленную файловую подсистему и/или диски. Многие вспомнят, что есть такой виртуальный диск, он же – RAM-дисках (ramdisk), а сделать ramdisk в *nix системах можно очень быстро и просто.
Изначально, в ядре должна быть поддержка tmpfs.
Как создать диск:
В первую очередь создаем новую точку монтирования:
и даём все права на использование.
После этого даём команду на монтирование, для примера, я создам диск на 1 Gb
где 1024M – это и есть размер RAMdisk в Мегабайтах.
Аккуратнее с размером и не размахивайтесь слишком широко: если вы попросите создать ramdisk больше, чем имеете оперативной памяти, система начнёт сгружать всё в swap-файл и дела пойдут очень медленно и грустно. Кстати, если ОЗУ в системе достаточно, swap можно и вовсе отключить, см. Как отключить SWAP
Если же вы хотите изменить размер ramdisk – это просто:
При этом содержимое RAM-диска не пропадёт, но и его размер тут же увеличится (при уменьшении также ничего не пропадёт, если только данных не больше, чем диск).
ВАЖНО.
RAM-диск это хранение в OЗУ, и это значит, что всё его содержимое после отключения питания машины будет безвозвратно потеряно. По возможности используйте резервное питание, что бы успеть сохранить важные данные.

