
Я пытаюсь понять, как 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 был заменен CMI в PowerShell.
КакДокументы Microsoftскажем, продолжайте использовать ...
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
... чтобы получить правильное имя для использования с wsl --mount
. Также обратите внимание, что этиделатьпохоже, соответствуют тем же «номерам дисков», которые вы видите вУправление компьютером -> Хранилище -> Управление дисками.
решение2
Рассмотрев некоторые другие системы, ни в одной из них не было значения DeviceName ни для одного из устройств HKLM:\HARDWARE\DEVICEMAP\Scsi..., так что это была погоня за призраками...
Однако я обнаружил, что Microsoft-Windows-StorageSpaces-Driver/Operational eventID 207 содержит DeviceNumber, который соответствует номеру \.\PHYSICALDRIVE из Get-CimInstance, а также содержит DriveID {GUID} и серийный номер диска, что и было тем, что я в конечном итоге искал.