为什么我看到 WSL 磁盘驱动器列表与注册表有差异

为什么我看到 WSL 磁盘驱动器列表与注册表有差异

我试图了解 WSL2 如何与主机 Win11 操作系统交互。

WSL 磁盘驱动器列表简要报告了我的 USB 拇指驱动器\\.\PHYSICALDRIVE2和我的内部 SSD\\.\PHYSICALDRIVE0

但在注册表中HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\ Scsi Bus 0\Target ID 0\Logical Unit Id 0\DeviceName显示我的 SSDPhysicalDrive2

知道为什么会有这种差异吗?

答案1

我不确定注册表为什么会报告DeviceName您的驱动器有 (或是什么生成了该属性)。总的来说,HARDWARE注册表的这一部分似乎没有记录。而且,正如您所看到的,这是不是无论如何,这是您安装时需要使用的实际名称。

作为参考,我的系统中有三个 SSD,但没有一个DeviceName在 SCSI 部分。例如:

> Get-ChildItem 'HKLM:\HARDWARE\DEVICEMAP\Scsi\Scsi Port 5\Scsi Bus 0\Target Id 0\'


    Hive: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 5\Scsi Bus 0\Target Id 0

Name                           Property
----                           --------
Logical Unit Id 0              InquiryData          : {0, 0, 6, 18...}
                               SerialNumber         : xxxx-xxxxx-xxx
                               Identifier           : NVMe    Samsung SSD 950 BXX7
                               DeviceType           : DiskPeripheral
                               DeviceIdentifierPage : {0, 131, 0, 24...}

可能是以前的 Windows 版本或其他软件在某个时候在您的系统上设置了此名称。即使注册表中的该名称有效,也可能适用于特定的 SCSI 总线/端口,而不是整个系统。

但无论如何,SCSI 总线注册表并不是 WSL 安装所需名称的来源。这是由 WMI(通过 CIM)返回的。正如您在本文

这些数据是从哪里获得的?答案是,这些数据是从许多来源获得的,例如 WinApi、Windows 注册表、SMBIOS 或嵌入在 MOF 定义中的自定义函数。

因此,我们不能期望您能够仅从注册表中直接获取驱动器信息。另外,从那篇文章中,显然有一种方法可以确定 WMI 如何检索这些值,但我还没有深入研究该 Delphi 代码以了解它如何映射到 PowerShell。等效的 PowerShell 文章似乎已被 Microsoft 下线,可能是因为 WMI 已被 PowerShell 中的 CMI 取代。

作为微软文档说,继续用...

GET-CimInstance -query "SELECT * from Win32_DiskDrive"

... 以获得要使用的正确名称wsl --mount。还请注意这些似乎映射到您在中看到的相同“磁盘编号”计算机管理 -> 存储 -> 磁盘管理

答案2

查看其他一些系统,它们都没有任何 HKLM:\HARDWARE\DEVICEMAP\Scsi... 设备的 DeviceName 值,因此这是徒劳的……

但是,我确实发现 Microsoft-Windows-StorageSpaces-Driver/Operational eventID 207 包含与 Get-CimInstance 中的 \.\PHYSICALDRIVE 编号匹配的 DeviceNumber,并且还包含 DriveID {GUID} 和驱动器序列号,这正是我最终要寻找的

相关内容