Помимо tmpfs
и ramfs
, еще одним вариантом является блочное устройство /dev/ram0
. В последних версиях Ubuntu это устройство не существует по умолчанию, но его можно создать с помощью modprobe brd
.
Этот подход более предсказуем, поскольку он создает реальную ext4
файловую систему и никогда не превышает указанный вами предел. Но для настройки требуется больше действий, а оперативная память используется менее эффективно.
Чтобы создать и инициализировать RAM-диск объемом 4 ГБ:
mkdir /ramdisk
modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk
Параметр rd_nr
указывает, сколько RAM-дисков создавать (по умолчанию, он создает 16, т.е. /dev/ram0
-/dev/ram15
). Параметр rd_size
имеет размер в килобайтах . Синтаксис $((... ))
позволяет выполнять арифметические действия в оболочке.
Чтобы освободить RAM-диск, размонтируйте его и удалите brd
модуль ядра:
umount /ramdisk
modprobe -r brd
ramfs
Кроме того, вы можете создать блочное устройство внутриramfs
:
mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage
truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk
Команда truncate
создает пустой файл заданного размера таким образом, что он инициализируется (, т.е. потребляет память )по запросу -.
Чтобы освободить RAM-диск, размонтируйте его и удалите образ диска:
umount /ramdisk
rm /ramdisk-storage/ramdisk.img
tmpfs
иramfs
Хотя tmpfs
и ramfs
более эффективны, чем использование блочного устройства, ниже приведены некоторые их недостатки.
tmpfs
может переключиться на диск. Это более эффективно, но иногда вам может понадобиться чистый RAM-диск :
.
ramfs
легко настроить, освобождает место после удаления файлов,и использует оперативную память более эффективно (система не буферизует файлы, поскольку знает, что они находятся в оперативной памяти ). Но у него есть свои минусы и сюрпризы:
Утилита df
не сообщает об использовании пространства:
root@cello-linux:~# df -h /ramdisk
Filesystem Size Used Avail Use% Mounted on
ramfs 0 0 0 - /ramdisk
Параметр ограничения размера отсутствует. Если вы поместите слишком много на виртуальный диск, ваша система зависнет.
Разреженные файлы могут стать неразреженными, когда вы меньше всего этого ожидаете. Этим утром я скопировал образ ВМ (150G, но 49G используется на диске )в ramfs
(. У меня 128G ОЗУ ). Это сработало. Но когда я скопировал из в ramfs
в место назначения, моя система перестала отвечать. Утилита cp
, по-видимому, заполнила пробелы в чтении , но не в записи.
И tmpfs
, и ramfs
могут вести себя иначе, чем реальная файловая система ext4
. Этого можно избежать, создав блочное устройство в ОЗУ и инициализировав его с помощью ext4
.
Для более глубокого сравнения -:https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt