Почему я вижу разницу в списке дисков 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 был заменен 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} и серийный номер диска, что и было тем, что я в конечном итоге искал.

Связанный контент