如何构建高效稳定的iSCSI网络虚拟存储实现方案?

摘要:网络虚拟存储,通过Iscsi协议可以实现本地挂载磁盘,扩展本机设备存储。 Iscsi有以下实现方案,简单介绍下: 1.Powershell 脚本 PowerShell 提供了一些 cmdlet,比如 Get-iSC
网络虚拟存储,通过Iscsi协议可以实现本地挂载磁盘,扩展本机设备存储。 Iscsi有以下实现方案,简单介绍下: 1.Powershell 脚本 PowerShell 提供了一些 cmdlet,比如Get-iSCSITarget和New-iSCSISession,用于管理 iSCSI 会话。 PowerShell实现有比较完善的文档: 简介 - Training | Microsoft Learn- Iscsis以及里面的powershell培训文档实现 Windows Server iSCSI - Training | Microsoft Learn iSCSI Module | Microsoft Learn、IscsiTarget Module | Microsoft Learn- 操作文档 iSCSI Target Server Overview | Microsoft Learn 2.WMI API WMI其实也可以iSCSI WMI 类 - Windows drivers | Microsoft Learn,只不过貌似未开放。也可能比较老了,微软不再维护 3.iscsicli 脚本 也可以通过命令行调用iscsicli 更多的操作,可以使用iscsicli help查看 4.开源组件-Vanara.PInvoke.IScsiDsc Vanara/PInvoke/IScsiDsc/readme.md at master · dahall/Vanara 它内部是使用Win32API-iscsicli.h封装 并对函数返回值int,做了隐式转换,Win32Error定义了常见异常码以及LastError异常信息。返回值这块,挺不错的设计 5. Win32API Iscsi有官方的发现库API:Iscsidsc.h 标头 - Win32 apps | Microsoft Learn 比如获取Iscsi会话列表: 1 ISDSC_STATUS ISDSC_API GetIScsiSessionListA( 2 [in, out] ULONG *BufferSize, 3 [out] ULONG *SessionCount, 4 [out] PISCSI_SESSION_INFOA SessionInfo 5 ); PInvoke调用DLL是"C:\Windows\System32\iscsidsc.dll" 我们可以基于目前团队内使用场景,对指定几个API进行封装,添加好注释、做好输出状态及值的返回