Software engineering
March 15

RAM-диск в Windows

В этой статье создадим виртуальный диск, который будет в 20 раз быстрее, чем физический диск. Бесплатно, без регистрации и смс.

Будем использовать Windows 11 и PowerShell. Всё то же самое можно сделать в Linux.

Дисклеймер. Автор не несёт ответственности за сохранность ваших данных и целостностью железа.

Да, это мой PC! Эту песню себе на mp3-плеер скинь. Всё будет в шоколаде парень, не горячись остынь.

Вот тест скорости диска.

Последовательная запись и чтение: 1.3 ГБ/с и 1.8 ГБ/с.

Для сравнения: вот так выглядит обычный такой SSD диск на SATA интерфейсе.

Скорость в 20 раз выше. Ого! Как так вышло?

Теория

Ответ даст Джон фон Нейман. Автор архитектуры фон Неймана, которая используется во всех наших компьютерах, смартфонах и так далее и тому подобное.

Процессор общается с оперативной памятью "напрямую", а диски наши (SSD в том числе) "общаются" по интерфейсу ввода-вывода (I/O).

Для ускорения работы, программы обычно работают именно с памятью и процессором (кодерам на Си привет).

Защита черного ящика от дурака

Вот вам аллегория. Стиральную машину нельзя открыть во время работы. Почему? По той причине, что когда-то это можно было сделать и кто-то это точно сделал. Вот стоит этот человек по щиколотку в воде и думает: "подам в суд на производителя стиральной машины". Теперь в стиральной машине есть механизм, который запирает дверцу во время работы. Называется это "защита от дурака".

Наши компьютеры сделаны для обычных пользователей, который и знать не знают этого фон Неймана и его принципы. Так же как и большинство людей не знают, что внутри стиральной машины, но есть интерфейс (кнопки управления - в случае стиральной машины), а весь механизм скрыт корпусом. Называется такой принцип взаимодействия - "черный ящик".

Временная память

Возвращаемся к оперативной памяти. Почему не использовать её?

У нашей быстрой оперативной памяти есть один очень серьезный недостаток - если отключить электрическое питание компьютера, то всё сотрется. Потому память и оперативная (читай "временная"). Тут все вопросы к физике элементарных частиц (для дотошных - конденсатор работает на ионах, а это атом).

Пользователь вообще не должен задумываться что там куда записывается - он сохранил файл и ожидает, что файл никуда не денется.

Но мы то теперь продвинутые пользователи и понимаем как что работает в компьютере, а значит можем пользоваться нашей оперативкой с умом.

RAM-диск

Итак, что мы делаем? Мы можем выделить область в оперативной памяти и сказать операционной системе, что это теперь диск. Создадим виртуальный диск, который на самом деле будет использовать оперативную память.

Практика

Используем PowerShell. Я использую Terminal из Microsoft Store. То же самое, что PowerShell.

Сначала узнаем сколько памяти у нас вообще есть. В Windows можно использовать команду:

Get-ComputerInfo | Select-Object CsTotalPhysicalMemory

Она выдаст общий объём памяти в байтах.

В моём случае 34276573184. Если вам не комфортно, то можно использовать команду, которая выдаст значение в гигабайтах.

(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb

Ответ: 32

Хорошо, что не 42 (лайк, кто заценил отсылку к "автостопом по галактике").

Теперь полезно будет знать сколько памяти свободно:

 (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1mb -as [int]

У меня: 21

ImDisk

Встроенных средств в PowerShell для создания RAM-диска нет.

Будем использовать бесплатную утилиту ImDisk. Сразу скажу, по первой ссылке в гугл, которая ведёт на sourceforge - троян.

Поэтому. На Github автора ImDisk - Олафа Лагерквиста - https://github.com/LTRData ссылка на его сайт - https://ltr-data.se/.

В раздел с софтом https://ltr-data.se/opencode.html/ качаем доступную стабильную версию

Download ImDisk install package, previous stable version 2.0.10 - 561,3 KB

Запускам установщик и теперь в системе есть imdisk.

Добавляем RAM-диск

В PowerShell я создал RAM-диск на 16Гб командой:

imdisk -a -t vm -s 16G -m X: -p "/fs:ntfs /q /y"

-a – добавить новый диск.

-t vm – создать диск в оперативной памяти.

-s 16G – размер 16 ГБ.

-m X: – назначить букву X:.

-p "/fs:ntfs /q /y" – отформатировать в NTFS.

Готово. Теперь этот диск можно использовать. Что это даёт?

  • Разархивирование больших файлов. Быстрее, чем на SSD.
  • Кэш браузера. Ускоряет работу и не нагружает диск.
  • Обработка фото/видео. Загружаешь файлы в RAM, работаешь мгновенно.
  • Компиляция кода. Например, для кэша сборки.
  • Тестирование софта. Разворачиваешь проект в RAM-диске и удаляешь без следов.

Но есть нюанс!

После перезагрузки всё пропадёт. RAM-диск = временное хранилище, поэтому если данные важны, нужно сохранять их перед выключением.

Удаялем RAM-диск

Для того чтобы удалить RAM-диск, используем команду

 imdisk -D -m X:

Апдейты

Скрипт

Написал скрипт для PowerShell

# --- Настройки RAM-диска ---
$diskSize = "16G"         # Размер диска (например, "16G", "8G", "4G")
$driveLetter = "X:"       # Буква диска
$volumeLabel = "Oblivion" # Метка тома

# Проверка прав администратора
$elevated = [System.Security.Principal.WindowsPrincipal]([System.Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $elevated.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# Проверяем, существует ли диск
if (Test-Path $driveLetter) {
    Write-Host "RAM-диск $driveLetter уже существует. Удаляю..."
    imdisk -D -m $driveLetter
    Start-Sleep -Seconds 2  # Даём время на удаление
    exit  # Завершаем скрипт после удаления
}

# Если диска нет, создаём новый
Write-Host "RAM-диск $driveLetter не найден. Создаю новый..."
imdisk -a -t vm -s $diskSize -m $driveLetter -p "/fs:ntfs /q /y"

# Ожидание, пока диск появится в системе
$attempts = 10
while ($attempts -gt 0 -and !(Test-Path $driveLetter)) {
    Start-Sleep -Seconds 1
    $attempts--
}

# Если диск успешно создан, устанавливаем метку
if (Test-Path $driveLetter) {
    Write-Host "RAM-диск $driveLetter успешно создан. Устанавливаю метку '$volumeLabel'."
    label $driveLetter $volumeLabel
} else {
    Write-Host "Не удалось создать RAM-диск $driveLetter."
}

Скрипт проверяет наличие RAM-диска X:. Если диск уже существует, он удаляет его. Если диска нет, он создаёт новый и назначает ему метку. При запуске без админ-прав скрипт сам запросит повышение привилегий.

Файл сохраняем с разрешением ps1.

Ярлык

Дальше создаю ярылк. Правой кнопкой -> создать ярлык. В поле "расположение объекта":

powershell -ExecutionPolicy Bypass -File "C:\полный\путь\к\скрипту.ps1"

Теперь скрипт будет запускаться при двойном клике с повышенными правами.

Исключение для Microsoft Defender

Тут есть нюанс. Microsoft Defender не даст выполнить label для изменения метки тома. Так что нужно будет создать исключение для политики контроля доступа к папкам.

Это нормальное решение, и система остаётся защищённой.

Вот и всё! Джон фон Нейман гордился бы нами!