RAM-диск в Windows
В этой статье создадим виртуальный диск, который будет в 20 раз быстрее, чем физический диск. Бесплатно, без регистрации и смс.
Будем использовать Windows 11 и PowerShell. Всё то же самое можно сделать в Linux.
Дисклеймер. Автор не несёт ответственности за сохранность ваших данных и целостностью железа.
Последовательная запись и чтение: 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
Хорошо, что не 42 (лайк, кто заценил отсылку к "автостопом по галактике").
Теперь полезно будет знать сколько памяти свободно:
(Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1mb -as [int]
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"
-t vm
– создать диск в оперативной памяти.
-p "/fs:ntfs /q /y"
– отформатировать в NTFS.
Готово. Теперь этот диск можно использовать. Что это даёт?
- Разархивирование больших файлов. Быстрее, чем на SSD.
- Кэш браузера. Ускоряет работу и не нагружает диск.
- Обработка фото/видео. Загружаешь файлы в RAM, работаешь мгновенно.
- Компиляция кода. Например, для кэша сборки.
- Тестирование софта. Разворачиваешь проект в RAM-диске и удаляешь без следов.
После перезагрузки всё пропадёт. RAM-диск = временное хранилище, поэтому если данные важны, нужно сохранять их перед выключением.
Удаялем RAM-диск
Для того чтобы удалить RAM-диск, используем команду
imdisk -D -m X:
Апдейты
Скрипт
# --- Настройки 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 для изменения метки тома. Так что нужно будет создать исключение для политики контроля доступа к папкам.