Eindeutige Gerätebezeichner (Device Unique Identifiers, DUIDs) für Speichergeräte
Techniken zum Identifizieren von Speichergeräten werden unzureichend, da die Dateisystemarchitektur komplexer wird, sich die Anzahl der Betriebssystemkomponenten multipliziert und Initiatoren über immer vielfältigere Hardware- und Softwarepfade auf Speicherziele zugreifen.
Beispielsweise generiert der Plug & Play-Manager (PnP) einen instance Bezeichner (ID) für jedes Gerät auf dem Computer. Jede instance-ID entspricht einem einzelnen Geräteknoten in der Gerätestruktur und identifiziert ein Gerät eindeutig, wenn das Gerät am gleichen Standort verbleibt. Instanz-IDs bleiben beim Neustart eines Computers erhalten, aber sie bleiben nicht gleich, wenn Sie das Gerät auf einen anderen Bus oder einen anderen Computer verschieben. Daher sind instance-IDs für Anwendungen in SaNs (Storage Area Networks) und für einige neuere Systemkomponenten wie den Windows Vista-Diagnosedienst, die in Umgebungen mit verteiltem Speicher ausgeführt werden, unzureichend. Wenn ein Festplattenlaufwerk einen SMART-Fehler vorhersagt, generiert es ein Ereignis für den Diagnosedienst. Dieses Ereignis muss einen Bezeichner enthalten, der die fehlerhafte Festplatte auf allen Computern, in denen sich der Datenträger befinden könnte, und auf allen Bussen, an die er angefügt werden könnte, eindeutig identifiziert. Instanz-IDs und andere Geräteidentifikationszeichenfolgen sind für diesen Zweck unzureichend.
Einige Anwendungen und Systemdienste, z. B. der Microsoft Cluster Service (MSCS) und der Partitions-Manager, verwenden die Gerätelayoutsignatur (STORAGE_DEVICE_LAYOUT_SIGNATURE), um ein Speichergerät in einem Cluster eindeutig zu identifizieren. Die Signatur des Gerätelayouts ist für diesen Zweck jedoch unter bestimmten Umständen unzureichend und umfasst die folgenden Einschränkungen:
Die Signatur kann geändert oder gelöscht werden.
Die Signatur ist möglicherweise nicht verfügbar, wenn sich das Gerät nicht dreht oder Probleme beim Zugriff auf die Sektoren aufweist, in denen sich die Signatur befindet.
Die Signatur ist nicht verfügbar, wenn der Datenträger von einem anderen Clusterknoten reserviert ist. MSCS kann das Laufwerklayout nur von Datenträgern lesen, die dem Knoten zugeordnet sind, auf dem MSCS ausgeführt wird. Software, die auf Datenträger in verschiedenen Clusterknoten zugreifen muss, muss eine Alternative zur Datenträgerlayoutsignatur verwenden.
Laufwerklayoutsignaturen können nicht helfen, zwischen einer logischen Einheitennummer (LUN) und deren Momentaufnahme zu unterscheiden. Da eine LUN und ihre Momentaufnahme identischen Inhalt aufweisen, sind ihre Laufwerklayoutsignaturen identisch.
Eine Seriennummer ist manchmal eine zuverlässige Methode zur eindeutigen Identifizierung eines Speichergeräts, das nicht vom Standort des Geräts abhängig ist. Die Seriennummer ist häufig als Teil der Abfragedaten eines Geräts verfügbar. Initiatoren können die Abfragedaten mit einer IOCTL_STORAGE_QUERY_PROPERTY-Anforderung abfragen, und der Porttreiber meldet die Ergebnisse der Abfrage in einer STORAGE_DEVICE_DESCRIPTOR-Struktur . Diese Technik hilft jedoch nicht, Geräte wie Bandlaufwerke zu identifizieren, die keine Abfragedaten melden.
Eindeutige Gerätebezeichner (Device Unique Identifiers, DUIDs)
Da Techniken zur eindeutigen Identifizierung von Geräten häufig veraltet werden, wenn sich die Technologie weiterentwickelt, hat Microsoft ein Geräte-ID-Format namens Device Unique ID (DUID) entwickelt, das erweiterbar ist und neue Techniken integrieren kann, um Geräte zu identifizieren, sobald sie verfügbar werden.
Eine DUID wird durch eine STORAGE_DEVICE_UNIQUE_IDENTIFIER-Struktur definiert, und die erste Version dieser Struktur (DUID_VERSION_1) enthält eine Kombination der folgenden Bezeichner:
STORAGE_DEVICE_ID_DESCRIPTOR
Die STORAGE_DEVICE_ID_DESCRIPTOR-Struktur enthält Bezeichner, die aus der Seite 0x83 der wichtigen Produktdaten (VPD) des Geräts extrahiert werden. In der Regel unterstützen nur SCSI- und Fibre Channel-Geräte diese Seite. Integrierte Laufwerkselektronik (IDE) und USB-Geräte (Universal Serial Bus), IEEE 1394-Laufwerke und RAID-Controller bieten keine seitenseitigen 0x83.
STORAGE_DEVICE_DESCRIPTOR
Die STORAGE_DEVICE_DESCRIPTOR-Struktur enthält weitere Abfragedaten, einschließlich eines Offsets zur Seriennummer der Einheit im SerialNumberOffset-Element . Die Seriennummer ist als Zeichenfolge mit variabler Länge und NULL-Zeichenfolge formatiert. Wenn das Speichergerät SCSI-konform ist, versucht der Porttreiber, die Seriennummer aus der optionalen Seite "Unit Serial Number" (Seite 0x80) der VPD zu extrahieren. Wenn es sich bei dem Speichergerät um ein IDE-Gerät handelt, generiert der Porttreiber eine Seriennummer aus den Identifikationsdaten des Geräts.
STORAGE_DEVICE_LAYOUT_SIGNATURE
Die STORAGE_DEVICE_LAYOUT_SIGNATURE enthält die Gerätelayoutsignatur.
In zukünftigen Versionen werden weitere Daten zu DUIDs hinzugefügt.
DUIDs haben keine feste Größe, sodass Software, die DUIDs (bekannt als DUID-Consumer) verwendet, die Größe der DUID aus dem Size-Member der STORAGE_DEVICE_UNIQUE_IDENTIFIER-Struktur abrufen muss. Die Version der DUID ist im Vers****ion-Element derselben Struktur verfügbar.
Einige Geräte liefern nicht genügend Informationen für das System, um sicherzustellen, dass die DUID des Geräts für alle Verwendungen und alle DUID-Verbraucher ausreichend eindeutig ist. Wenn das Betriebssystem eindeutige IDs aus der VPD des Geräts abrufen kann, kann es eine DUID erstellen, die für alle DUID-Consumer ausreichend eindeutig ist. Wenn das System jedoch eine DUID allein aus der Gerätelayoutsignatur erstellen muss, ist die DUID für einige DUID-Consumer ausreichend eindeutig, für andere jedoch nicht.
Das System versucht, eine DUID mit den folgenden Merkmalen zu erstellen:
Die DUID bleibt unverändert, wenn das Betriebssystem neu gestartet wird.
Die DUID bleibt gleich, auch wenn das Gerät von einem Computer auf einen anderen, von einem Adapter auf einen anderen oder von einem Kanal zu einem anderen verschoben wird.
Die DUID identifiziert das Gerät und nicht die Medien. Diese Unterscheidung ist wichtig für Laufwerke mit Wechselmedien.
Auf Multipath-Systemen ist die DUID für alle E/A-Pfade identisch.
DUIDs weisen die folgenden Einschränkungen auf:
DUIDs enthalten häufig binäre Inhalte, die nicht angezeigt werden können.
DUIDs sind nicht immer null-beendet. DUID-Consumer müssen den Size-Member der STORAGE_DEVICE_LAYOUT_SIGNATURE Struktur überprüfen, um die Länge der DUID zu ermitteln.
DUID-Consumer müssen CompareStorageDuids verwenden, um DUIDs zu vergleichen, anstatt sie byte byte zu vergleichen.
Enumeratoren dürfen nicht versuchen, DUIDs zu verwenden, um Geräteobjekte für Plug & Play (PnP) zu identifizieren. Multipath-Systeme können über mehrere Geräte verfügen, die dieselbe DUID verwenden. Für PnP müssen Geräte-IDs jedoch eindeutig sein.
Initiatoren können die DUID-Informationsdaten mithilfe einer IOCTL_STORAGE_QUERY_PROPERTY-Anforderung mit der Eigenschaften-ID StorageDeviceUniqueIdProperty abfragen.
Vergleichen von DUIDs
DUID-Consumer müssen die CompareStorageDuids-Routine verwenden, die in Storduids.h definiert ist, um zwei DUIDs zu vergleichen. CompareStorageDuids gibt einen DUID_MATCH_STATUS Wert zurück, der angibt, ob die beiden DUIDs übereinstimmen. Wenn der Vorgang erfolgreich ist, gibt CompareStorageDuids einen der folgenden Werte zurück:
DuidExactMatch
Alle Felder in den beiden DUIDs stimmen genau überein.
DuidSubIdMatch
Eine DUID besteht aus mehreren Unter-IDs. Mindestens eine der Unter-IDs stimmt überein, und die beiden DUIDs stellen wahrscheinlich dasselbe Gerät dar. Wenn die Gerätefirmware aktualisiert wird, werden möglicherweise neue Bezeichner abgerufen, wodurch sich die Zusammensetzung der DUID des Geräts ändert. Wenn ein DUID-Consumer eine alte DUID für das Gerät mit der neuen DUID vergleicht, gibt CompareStorageDuids möglicherweise DuidSubIdMatch anstelle von DuidExactMatch zurück. Dies ist ein Beispiel für eine gültige Übereinstimmung basierend auf einer Unter-ID. Ein DUID-Consumer muss abhängig von den Anforderungen des DUID-Consumers auswählen, ob er den DuidSubIdMatch-Rückgabewert als Übereinstimmung oder als Konflikt akzeptiert.
DuidNoMatch
Die Seriennummern stimmen nicht überein, und keine der eindeutigen Unter-IDs von Seite 83h der wichtigen Produktdaten (VPD) entspricht.
Zusätzlich zu den vorherigen Werten gibt CompareStorageDuids möglicherweise verschiedene Fehlercodes zurück.
Die CompareStorageDuids-Routine verwendet den folgenden Algorithmus, um zwei DUIDs zu vergleichen:
Suchen Sie nach einer genauen Übereinstimmung. Wenn alle Daten in den DUIDs übereinstimmen, stimmen die DUIDs genau überein, und CompareStorageDuids gibt DuidExactMatch zurück. Andernfalls fahren Sie mit der nächsten Überprüfung fort.
Überprüfen Sie die VPD-Bezeichner. Wenn eindeutige Unter-IDs übereinstimmen, stimmen die DUIDs überein und CompareStorageDuids gibt DuidSubIdMatch zurück. Wenn keine Unter-IDs übereinstimmen oder das Gerät keine eindeutigen VPD-Bezeichner bereitstellt, fahren Sie mit der nächsten Überprüfung fort.
Überprüfen Sie die Seriennummer der Einheit. Wenn die Anbieter-ID, die Produkt-ID und die Seriennummer identisch sind, stimmen die DUIDs überein, und CompareStorageDuids gibt DuidSubIdMatch zurück. Wenn keiner dieser Werte übereinstimmt oder das Gerät diese Werte nicht bereitstellt, fahren Sie mit der nächsten Überprüfung fort.
Überprüfen Sie die Laufwerkslayoutsignatur. Wenn die Laufwerklayoutsignaturen der beiden DUIDs übereinstimmen, stimmen die DUIDs überein undCompareStorageDuids gibt DuidSubIdMatch zurück. Wenn die Laufwerksignaturen nicht übereinstimmen oder das System die Laufwerklayoutsignatur des Geräts nicht lesen kann, stimmen die DUIDs nicht überein, und CompareStorageDuids gibt DuidNoMatch zurück.