ramdisk - это энергозависимое пространство для хранения данных, определенное в памяти RAM. Использование этой функции повышает производительность обработки файлов в десять раз по сравнению с лучшими жесткими дисками SSD. Внедрение ramdisk очень выгодно для пользователей, чьи задачи требуют значительных аппаратных ресурсов. Кроме того, эта реализация может быть полезна медиаредакторам и геймерам.
Диск ramdisk - это нестабильное пространство, вся информация, хранящаяся на нем, будет потеряна при выключении или перезагрузке устройства.
В Linux ramdisk можно создать с помощью команды mount и файловых систем tmpfs и ramfs. В этом руководстве показано, как создать ramdisk в Linux, используя обе эти системы.
Tmpfs и Ramfs
Tmpfs: Tmpfs - это временная файловая система, хранящаяся в памяти RAM (и/или памяти подкачки). Указав эту файловую систему в аргументе -t команды mount, вы можете выделить ограниченные ресурсы памяти для временной файловой системы. В результате приложения, хранящиеся в этой файловой системе, будут работать в несколько раз быстрее, чем на обычных устройствах хранения данных, включая устройства cssd.
Ramfs: Ramfs похожа на Tmpfs, но пользователь не может обеспечить лимит, а выделенный ресурс растет динамически. Если пользователь не контролирует потребление ramfs, ramfs будет продолжать использовать всю память до зависания или краха системы.
Tmpfs против Ramfs: Нет заметной разницы между производительностью tmpfs и его предшественника ramfs. Причиной замены ramfs на tmpfs является риск неограниченного потребления оперативной памяти ramfs, что может привести к краху системы.
Еще одним преимуществом tmpfs перед ramfs является возможность использования пространства подкачки, в то время как ramfs ограничена аппаратной памятью.
Как создать Ramdisk в Linux с помощью Tmpfs
Во-первых, давайте посмотрим, сколько свободной памяти мы можем использовать перед созданием точки монтирования tmpfs. Чтобы проверить доступную память ram и swap, вы можете использовать команду free. Чтобы вывести результаты в гигабайтах, можно добавить аргумент --giga, как показано в примере ниже:
1 | free --giga |
Как видно из приведенного выше результата, у меня есть три физических гигабайта и один на пространстве подкачки.
Теперь создайте точку монтирования в каталоге /mnt с помощью команды mkdir, как показано в примере ниже. Выбор имени точки монтирования произволен. Если вы собираетесь использовать ramdisk для определенного приложения, вы можете назвать точку монтирования в честь него. В приведенном ниже примере я назвал ее /mnt/tmp:
1 | sudo mkdir /mnt/tmp |
Теперь вы можете создать ramdisk с помощью команды mount. В следующем примере показано, как создать ramdisk с помощью tmpfs на 2GB Ram/Swap, в точке монтирования /mnt/tmp.
Аргумент -t (тип) позволяет указать файловую систему (в данном случае tmpfs). Аргумент -o (options) используется для определения места для ramdisk.
1 | sudo mount -t tmpfs -o size=2g tmpfs /mnt/tmp |
HDD против Tmpfs
Я скопировал образ CentOS из домашнего каталога пользователя, используя команду time для отображения времени, можно увидеть, что процесс копирования занял 0:10.721с
1 | time cp CentOS-7-x86_64-Minimal-2009.iso CentOS-7-x86_64-Minimal-2009.iso-copy |
На следующем снимке экрана видно, что копирование того же образа Ubuntu iso на диск ramdisk заняло 0:0.899с:
1 | time cp CentOS-7-x86_64-Minimal-2009.iso /mnt/tmp/ |
Как видите, разница титаническая, и ramdisk очень выгоден для задач с большим объемом записи файлов.
Чтобы удалить ramdisk, просто отмонтируйте его, выполнив следующую команду и заменив tmp на точку монтирования:
1 | sudo umount /mnt/tmp |
Создание диска Ramdisk в Linux с помощью Ramfs
Процедура создания диска ramdisk с помощью ramfs такая же, как и в случае с tmpfs. Следующая команда создаст динамический ramdisk в точке монтирования /mnt/tmp.
1 | sudo mount -t ramfs -o size=4 ramfs /mnt/tmp |
Tmpfs против Ramfs
Теперь давайте протестируем производительность ramfs в сравнении с tmpfs, и посмотрим, что произойдет, когда каждый тип ramdisk достигнет заданного предела.
В первом примере я создам ramdisk размером 2 ГБ с помощью tmpfs и попытаюсь скопировать на него iso большего размера:
1 2 | sudo mount -t tmpfs -o size=2g tmpfs /mnt/tmp time cp CentOS-7-x86_64-DVD-2009.iso /mnt/tmp |
Как вы можете видеть, cp выдал ошибку, потому что места на диске ramdisk недостаточно для образа iso. Я выделил только 2 ГБ для ramdisk.
Теперь посмотрим, что произойдет, если я проделаю ту же процедуру, используя ramdisk:
1 2 | sudo mount -t ramfs -o size=2g ramfs /mnt/tmp time sudo cp CentOS-7-x86_64-DVD-2009.iso /mnt/tmp |
Как вы можете видеть, ramfs продолжает записывать в /mnt/tmp, несмотря на то, что я установил ограничение в 2 ГБ. Это недостаток ramfs, так как он может повесить систему, потребляя всю ее RAM память. Напротив, tmpfs ограничена объемом памяти, который мы определяем.
В выводе также видно, что задача копирования была выполнена за 0:9.624 с, что почти соответствует производительности tmpfs в тесте против SSD.
Заключение
Создание ramdisk - это одноминутный процесс с существенными преимуществами для любого пользователя, которому нужно обрабатывать большие файлы. Скорость чтения и записи экспоненциально возрастает по сравнению с лучшими жесткими дисками на рынке. С ramdisk можно запускать портативное программное обеспечение, хотя изменения не будут постоянными.
Использование ramfs может быть рискованным, если в системе закончатся ресурсы.