
WSL2 がホスト Win11 オペレーティング システムとどのように対話しているかを理解しようとしています。
WSLディスクドライブリストの簡単なレポートでは、USBサムドライブ\\.\PHYSICALDRIVE2
と内部SSDが次のように表示されます。\\.\PHYSICALDRIVE0
しかし、regeditではHKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\ Scsi Bus 0\Target ID 0\Logical Unit Id 0\DeviceName
SSDがPhysicalDrive2
なぜ矛盾が生じるのか、何か考えはありますか?
答え1
DeviceName
レジストリがドライブにエラーを報告している理由(または、そのエラーの原因となったもの)はわかりません。一般的に、HARDWARE
レジストリのセクションはほとんど文書化されていないようです。そして、ご覧のとおり、それはないとにかくマウントに使用する必要がある実際の名前。
参考までに、私のシステムには 3 つの 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 によってオフラインになっているようです。おそらく、PowerShell で WMI が CMI に置き換えられたためでしょう。
としてマイクロソフトドキュメント言い換えれば、使い続けることです...
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
... で使用する適切な名前を取得しますwsl --mount
。また、これらのする同じ「ディスク番号」にマッピングされているようですコンピューターの管理 -> ストレージ -> ディスクの管理。
答え2
他のシステムをいくつか見てみると、HKLM:\HARDWARE\DEVICEMAP\Scsi... デバイスの DeviceName 値が存在しないため、これは無駄な努力でした...
しかし、Microsoft-Windows-StorageSpaces-Driver/Operational イベント ID 207 には、Get-CimInstance の \.\PHYSICALDRIVE 番号と一致する DeviceNumber が含まれており、DriveID {GUID} とドライブのシリアル番号も含まれていることが分かりました。これが最終的に探していたものです。