HOWTO: 使用 PowerShell 删除已分配的 iSCSI 目标
之前 gOxiA 分享了一篇日志“HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk ”,由于该方法会导致服务器管理无法正常访问 iSCSI 目标服务器,可能会影响管理员日常操作。
如果您体验完毕可以使用以下 PowerShell 步骤去删除 RAM Disk,否则对 iSCSI 目标服务的管理都要基于 PowerShell 进行。删除 iSCSI RAM Disk 的方法很简单,就是倒着执行一遍之前的命令,只不过将新建改为移除。
首先,移除已经为 iSCSI 目标移除分配的 RAM Disk,为此执行如下命令:
Remove-IscsiVirtualDiskTargetMapping -targetName targetRAMDisk -Path "ramdisk:WIM-RAMDisk.vhdx"
然后,移除 iSCSI 目标,为此执行如下命令:
Remove-IscsiServerTarget -TargetName targetRAMDisk
我们还能使用 Get-IscsiServerTarget 查看当前所有的 iSCSI 目标。
最后,移除 RAM Disk,为此执行如下命令:
Remove-IscsiVirtualDisk -Path "ramdisk:WIM-RAMDisk.vhdx"
HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk
上个月看到 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 目标服务器角色。
HOWTO: 解决 Windows 10 UWP Apps 无法运行
HOWTO: 解决 Windows 10 UWP Apps 无法运行
UWP - Universal Windows Platform(通用 Windows 平台),自 Windows 10 引入,进一步推动了 WIndows Runtime 模型的发展,一统 Windows 核心。作为核心版的一部分,UWP 现提供了一个可供在每个运行 Windows 10 设备上使用的通用应用平台。
简单理解,就是我们开发一个 UWP 应用即可运行在所有的 Windows 10 设备上,其优势显而易见!有关 UWP 详细的介绍可以移步 https://docs.microsoft.com/zh-cn/windows/uwp/get-started/universal-application-platform-guide 参考。
而今天 gOxiA 要与大家分享的肯定是与 ITPro 密切相关的内容,正如本期之题目解决 Windows 10 UWP Apps 无法运行。具体的故障现象是点击 UWP Apps 都会没有响应,UWP Apps 不会按照预期那样启动运行。在有些环境下能看到点击 UWP Apps 图标后会显示正在安装一样的进度条,之后再无反应。具体的故障现象可参考下面的动画截图:
但是切换到 Administrator 账户下却能够运行这个 UWP Apps(PS:已经配置了GPO允许本地管理员运行 UWP Apps),唯独无法运行 Microsoft Edge,会出现闪退。检查日志发现来源 Apps,ID 5973 的错误事件,具体错误是“系统找不到指定文件”。难道是应用相关文件损坏?!
使用 PowerShell 命令行对 Microsoft Edge 进行重装测试,结果发现“部署失败,原因是 HRESULT: 0x80073D0A,无法安装该程序包,因为 Windows 防火墙服务未运行。请启用 Windows 防火墙服务并重置。”错误很明确了因为防火墙服务未启动导致!但是,为什么其他 UWP Apps 却能够运行呢?而且使用其他账号又都无法运行呢?!
带着迷惑执行了 PowerShell 命令行对所有系统 UWP Apps 执行重装任务,命令行参考如下:
Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like "*SystemApps*"} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
结果一致,同样提示因 Windows Firewall 服务未启动导致 UWP Apps 无法安装。检查 Windows Firewall 服务确实被禁用,重新启动后故障解除。
其实这个过程还有另外一个版本,在发现故障的时候是在生产环境下,且之前交付的 Surface Pro 4 都是经过测试的,运行也有近一年突然出现这个问题,还是新装系统后,确实十分诡异!参考映像未有更新,故障现象均发生在加域之后,那必然与域环境有关,首先检查的就是 GPO,是否进行了限制,但经过分析发现是 Windows 防火墙服务启动被配置为禁用,恢复后故障消失,之后再禁用 Windows Firewall 服务进行测试,发现除了 Edge 外其他的 UWP Apps 均可正常运行,怀疑是系统 Bug 向微软开了 Case,引出前面提到的重装应用进行测试,确认 Powershell 命令行执行失败时提示的错误信息,因防火墙服务未运行是导致 UWP Apps 无法启动的根因。
但该问题是否被确认为系统 Bug,还暂无结果。