我试图了解 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} 和驱动器序列号,这正是我最终要寻找的