上个月看到 Windows Team 的工程师 Mounia Rachidi 发布的 Blog,提到了在 Windows Server 上利用 iSCSI 创建 RAM Disk 的方法,于是动手实践了一下,感觉还不错!决定分享一下实践经验。
实践环境是一台运行 Windows Server 2016,且拥有 32GB 内存的工作站。计划在内存中创建 28GB 的 RAM Disk,用于系统映像(WIM)的处理。将 WIM 放在 RAM Disk 里进行读写操作的优势显而易见,降低磁盘IO瓶颈。当然,也许您还能想到更多 RAM Disk 的应用场景,不妨利用 Windows Server iSCSI 服务来体验一下。
首先,我们需要为 Windows Server 2016 安装 iSCSI 目标服务器(iSCSI Target Server)角色,可启动服务器管理工具添加角色和功能。iSCSI目标服务器角色位于”文件和存储服务“角色下,具体参考下图:
然后,在 Windows 防火墙(Windows Firewall)中允许”iSCSI 服务“例外,即允许通过防火墙。
为了确保 iSCSI 目标服务能够为本机提供 iSCSI 服务,需要修改 Windows Server 2016 的注册表以允许回环模式,为此执行 Regedit 定位至如下路径,修改 AllowLoopBack(REG_DWORD) 值为:1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\iSCSI Target
完成上述操作后,便可开始创建 RAM Disk,首先创建容量为 28GB 的 RAM Disk:
New-IscsiVirtualDisk -Path "ramdisk:WIM-RAMDisk.vhdx -Size 28GB
之后创建 iSCSI 目标:
New-IscsiServerTarget -TargetName targetRAMDisk -Initiatorlds @("IPAddress:X.X.X.X")
接下来将 RAM Disk 分配给 iSCSI 目标:
Add-IscsiVirtualDiskTargetMapping -TargetName targetRAMDisk -DevicePath "ramdisk:WIM-RAMDisk.vhdx"
现在启动 Windows Server 2016 上的 iSCSI Initiator(iSCSI 发起程序,该程序位于管理工具组下) 来连接这个 iSCSI 目标。
连接成功后,便可在通过磁盘管理器初始化这个 RAM Disk,默认配置下这个 RAM Disk 是动态扩展类型的 VHDX,所以分配并格式化后,不会马上占用内存容量,会随着 RAM Disk 数据量的增长,而发生变化,但不会因删除数据而逆转。也就是说拷贝了一个10GB的数据,删除后会发现内存占用还是10GB,必须重新启动服务器才会得到空间的释放。
最后需要注意的是,在 iSCSI 目标服务上启用 RAM Disk 后,会导致无法正常访问 服务器管理器 下的 iSCSI 目标服务器角色。