Пришла задачка сделать на аппаратном сервере RAM диск. Тестовый стенд:
- Сервер HP ProLiant DL360 Gen9
- 2 процессора
- 256 ГБ ОЗУ
- Операционная система Windows Server 2016
- Размер RAM диска 70 Гб
В качестве софта выбрали WinRamTech Ramdisk Enterprise. Благо русскоязычная версия бесплатная и без ограничений. Я перепробовал несколько вариантов софта, но там или денег хотят, или диск не может быть больше 64 ГБ, или RAM диск не создаётся автоматически при загрузке системы.
WinRamTech Ramdisk Enterprise — софт для создания RAM диска
Начал устанавливать WinRamTech Ramdisk Enterprise и столкнулся с проблемой, не устанавливается RAM диск и всё тут. Час крутит-вертит, потом вылетает по таймауту. Я попытался сделать всё то же самое на виртуальном сервере — RAM диск установился. А на физическом сервере HP ProLiant DL360 Gen9 ни в какую не ставится. Провозился весь день, в итоге решил проблему. О том как это было — читаем дальше.
Имеется сервер с активированной ОС Windows Server 2016. 2 процессора, 256 ГБ оперативной памяти.
Накатывать русскую локализацию интерфейса не обязательно, установки языка и региона достаточно.
Установка WinRamTech Ramdisk Enterprise
Есть два способа установки WinRamTech Ramdisk Enterprise.
- Можно запустить инсталлятор.
- Можно установить устройство через диспетчер устройств.
Я уже описывал процесс установки:
Создание RAM диска на Windows Server 2012 R2 средствами WinRamTech Ramdisk Enterprise
Принцип установки WinRamTech Ramdisk Enterprise в Windows Server 2016 ничем не отличается. Качаем WinRamTech Ramdisk Enterprise, распаковываем. Поскольку мне требуется RAM диск более 4 ГБ, то использовать в данном случае можно только 64-битную версию.
Запускаем Диспетчер устройств (Device Manager):
devmgmt.msc
Выделяем компьютер, в меню Action > Add legacy hardware. Запускается мастер добавления нового железа:
Next. Выбираем Install the hardware that I manually select from a list (Advanced):
Next. Выбираем Show All Devices:
Next. Нажимаем кнопку Have Disk...:
В обзоре заходим в папку с ПО WinRamTech Ramdisk Enterprise, 64-битная версия, выбираем файл RAMDriv.inf:
Open. Обнаружили модель WinRamTech RAMDisk Enterprise (x64):
Next:
Next. Начинается установка:
Если всё пройдёт нормально, то мы получим в результате успешную установку.
Однако, в моём случае установка длилась час. Я получил ошибку:
The following hardware was not installed:
WinRamTech Enterprise (x64)An error occurred during the installation of the device.
This operation returned because the timeout period expired.
Исследование проблемы
Первым делом я попытался развернуть RAM диск на виртуальном сервере с операционной системой Windows Server 2016. Всё развернулось быстро и без проблем. Значит, проблема в аппаратной части сервера.
Пробую установить RAM диск ещё раз.
Замечаю, что в процессе установки устройство создаётся. Однако, после ошибки оно становится неизвестным.
А если обновить список устройств, то совсем пропадает.
Получается, что драйвер RAM диска устанавливается, но сам RAM диск не создаётся. Что-то не срабатывает в настройках диска, память не выделяется.
После установки должен был создаться RAM диск с первоначальными характеристиками, которые заданы по умолчанию. Например, с такими:
Не буду описывать ход своих мыслей, но возможный корень зла я вижу в трёх местах:
- Use "Locked" Memory. Это заблокированный четвёртый Гигабайт памяти в 32-битных операционных системах. В 64-битной версии WinRamTech Ramdisk Enterprise данная опция не используется. Так что проблема явно не здесь.
- Use "Resident" Memory. Это наша обычная оперативная память.
- Use "System" Memory. А это что? Это какая-то системная память. Документация особо ничего об этом не говорит, но явно это какая-то память, которую кто-то использует или резервирует под аппаратные нужды. Вот бы эту галку отключить...
Как эту галку отключить — непонятно. Но мы можем обойти эту проблему.
Решение проблемы
Перезагружаем сервер. Если не перезагрузить, то запустить установку снова не получится.
После первой неуспешной установки нужна перезагрузка.
После перезагрузки запускаем установку заново.
Дожидаемся (несколько секунд) создания устройства RAM Drive. После этого делаем жёсткую перезагрузку сервера. По питанию или через iLO.
Тем самым мы добиваемся того, чтобы устройство создалось, но сам RAM диск — нет. Сервер перезагружается.
Дожидаемся начала загрузки операционной системы и жмём F8.
Попадаем в расширенные опции загрузки, загружаемся в Safe Mode.
Если загрузиться в обычном режиме, то винда час грузится, потом, по идее, загрузится без RAM диска, но я не стал ждать.
В безопасном режиме RAM диск не создаётся, поэтому мы можем спокойно войти в диспетчер устройств.
Находим WinRamTech Enterprise (x64), открываем свойства.
Вот что там по умолчанию настроено. Переделываю всё по-другому.
Самое главное, снимаю галку с системной памяти. Устанавливаю 32 ГБ, сдвигаю ползунок резидентной памяти вправо. Ставлю NTFS. Снимаю галку "Перезапустить RAMDisk после нажатия OK", иначе диск не сможет создаться в безопасном режиме и настройки сбросятся. Нажимаю OK для сохранения настроек.
Через Пуск перезагружаю сервер в обычном режиме.
Сервер загружается в обычном режиме. Даже какой-то RAM диск создаётся, но не тот что мне нужен. Снова заходим в диспетчер устройств.
Находим WinRamTech Enterprise (x64), открываем свойства.
Вот теперь настраиваем RAM диск по-нормальному. Указываем букву диска. Указываем размер диска, 70 ГБ это 71680 МБ. Ползунок резидентной памяти сдвигаем, чтобы значение было не меньше 71680. Если планируется динамическое расширение диска, то можно больше указать.
Ни в коем случае не ставим галку использования системной памяти.
Указываем файловую систему, метку диска. Ставим галку "Перезапустить RAMDisk после нажатия OK", нажимаем OK. И...
Бесплатный RAM диск R объёмом 70 ГБ с файловой системой NTFS создан. Для проверки перезагружаем сервер и убеждаемся что диск создаётся автоматически.
Примечание
На втором сервере я уже сразу устанавливал RAM устройство в режиме Safe Mode.
Примечание 2
Если RAM диск отсутствует в диспетчере устройств, удалите C:\Windows\System32\RAMDriv.dll и переустановите RAM диск заново. В Safe Mode.