Condividi tramite


Identificatori univoci del dispositivo (DUID) per i dispositivi di archiviazione

Le tecniche per identificare i dispositivi di archiviazione diventano inadeguate perché l'architettura del file system diventa più complessa, il numero di componenti del sistema operativo moltiplica e gli iniziatori accedono alle destinazioni di archiviazione attraverso percorsi hardware e software sempre più diversi.

Ad esempio, la gestione Plug and Play (PnP) genera un identificatore di istanza (ID) per ogni dispositivo nel computer. Ogni ID istanza corrisponde a un singolo nodo del dispositivo nell'albero dei dispositivi e identifica in modo univoco un dispositivo, se il dispositivo rimane nella stessa posizione. Gli ID istanza vengono mantenuti quando un computer viene riavviato, ma non rimangono uguali se si sposta il dispositivo in un bus diverso o in un computer diverso. Di conseguenza, gli ID istanza sono inadeguati per le applicazioni nelle reti di area di archiviazione (SAN) e per alcuni componenti di sistema più recenti, ad esempio il servizio di diagnostica Windows Vista, che operano in ambienti con archiviazione distribuita. Quando un disco rigido stima un errore SMART, genera un evento per il servizio di diagnostica. Questo evento deve contenere un identificatore che identifica in modo univoco il disco rigido non riuscito in tutti i computer in cui il disco potrebbe trovarsi e su tutti gli autobus a cui potrebbe essere collegato. Gli ID istanza e una delle altre stringhe di identificazione del dispositivo sono inadeguate per questo scopo.

Alcune applicazioni e servizi di sistema, ad esempio Microsoft Cluster Service (MSCS) e Partition Manager, usano la firma del layout del dispositivo (STORAGE_DEVICE_LAYOUT_SIGNATURE) per identificare in modo univoco un dispositivo di archiviazione in un cluster. Tuttavia, la firma del layout del dispositivo non è adeguata a questo scopo, in determinate circostanze e include le limitazioni seguenti:

  • La firma potrebbe essere modificata o cancellata.

  • La firma potrebbe non essere disponibile se il dispositivo non sta girando o ha problemi ad accedere ai settori in cui risiede la firma.

  • La firma non è disponibile se il disco è riservato da un altro nodo del cluster. MSCS può leggere il layout dell'unità solo dei dischi associati al nodo in cui è in esecuzione MSCS. Il software che deve accedere ai dischi in nodi cluster diversi deve usare un'alternativa alla firma del layout del disco.

  • Le firme di layout dell'unità non possono distinguere tra un numero di unità logica (LUN) e il relativo snapshot. Poiché un LUN e lo snapshot hanno contenuto identico, le firme di layout dell'unità saranno uguali.

Un numero di serie è talvolta una tecnica affidabile di identificazione univoca di un dispositivo di archiviazione che non dipende dalla posizione del dispositivo. Il numero di serie è spesso disponibile come parte dei dati di richiesta di un dispositivo. Gli iniziatori possono eseguire query sui dati dell'indagine con una richiesta di IOCTL_STORAGE_QUERY_PROPERTY e il driver di porta segnala i risultati della query in una struttura STORAGE_DEVICE_DESCRIPTOR . Tuttavia, questa tecnica non consente di identificare i dispositivi, ad esempio unità nastro, che non segnalano i dati delle indagini.

Identificatori univoci del dispositivo (DUID)

Poiché le tecniche per identificare in modo univoco i dispositivi spesso diventano obsolete perché la tecnologia evolve, Microsoft ha sviluppato un formato ID dispositivo denominato ID univoco del dispositivo (DUID) estendibile e che può incorporare nuove tecniche per identificare i dispositivi quando diventano disponibili.

Un DUID è definito da una struttura STORAGE_DEVICE_UNIQUE_IDENTIFIER e la prima versione di questa struttura ( DUID_VERSION_1 ) include una combinazione degli identificatori seguenti:

STORAGE_DEVICE_ID_DESCRIPTOR
La struttura STORAGE_DEVICE_ID_DESCRIPTOR contiene identificatori estratti dalla pagina 0x83 dei dati di prodotto vitali del dispositivo .VPD. In genere, solo i dispositivi SCSI e Fibre Channel supportano questa pagina. Dispositivi IDE (Integrated Drive Electronics) e Universal Serial Bus (USB), IEEE 1394 unità e controller RAID non forniscono 0x83 pagina.

STORAGE_DEVICE_DESCRIPTOR
La struttura STORAGE_DEVICE_DESCRIPTOR contiene altri dati di richiesta, inclusi un offset al numero di serie dell'unità nel membro SerialNumberOffset . Il numero di serie viene formattato come stringa con terminazione NULL variabile. Se il dispositivo di archiviazione è conforme a SCSI, il driver di porta tenta di estrarre il numero di serie dalla pagina numero di serie unità facoltativa (pagina 0x80) del VPD. Se il dispositivo di archiviazione è un dispositivo IDE, il driver di porta genera un numero di serie dai dati di identificazione del dispositivo.

STORAGE_DEVICE_LAYOUT_SIGNATURE
Il STORAGE_DEVICE_LAYOUT_SIGNATURE contiene la firma del layout del dispositivo.

Altri dati verranno aggiunti ai DUID nelle versioni future.

I DUID non hanno una dimensione fissa, quindi il software che usa DUID (noto come consumer DUID) deve ottenere le dimensioni del DUID dal membro Size della struttura STORAGE_DEVICE_UNIQUE_IDENTIFIER. La versione del DUID è disponibile nel membro Vers**ion della stessa struttura.

Alcuni dispositivi non forniscono informazioni sufficienti per il sistema per garantire che il DUID del dispositivo sia sufficientemente univoco per tutti gli usi e tutti i consumer DUID. Se il sistema operativo può recuperare ID univoci dal VPD del dispositivo, può creare un DUID sufficientemente univoco per tutti i consumer DUID. Tuttavia, se il sistema deve creare un DUID dalla firma del layout del dispositivo da solo, il DUID sarà sufficientemente univoco per alcuni consumer DUID, ma non per altri.

Il sistema tenta di creare un DUID con le caratteristiche seguenti:

  • Il DUID rimane invariato quando il sistema operativo viene riavviato.

  • Il DUID rimane lo stesso, anche quando il dispositivo viene spostato da un computer a un altro, un adattatore a un altro o un canale a un altro.

  • Il DUID identifica il dispositivo e non il supporto. Questa distinzione è importante per le unità con supporti rimovibili.

  • Nei sistemi multipath, il DUID è lo stesso per tutti i percorsi di I/O.

I DUID presentano le limitazioni seguenti:

  • I DUID contengono spesso contenuti binari che non possono essere visualizzati.

  • I DUID non vengono sempre terminati con valori Null. I consumer DUID devono controllare il membro Size della struttura STORAGE_DEVICE_LAYOUT_SIGNATURE per determinare la lunghezza del DUID.

  • I consumer DUID devono usare CompareStorageDuids per confrontare i DUID anziché confrontarli per byte.

  • Gli enumeratori non devono tentare di usare DUID per identificare gli oggetti dispositivo per scopi Plug and Play (PnP). I sistemi multipath possono avere più dispositivi che condividono lo stesso DUID. Tuttavia, per PnP, gli ID dispositivo devono essere univoci.

Gli iniziatori possono eseguire query per i dati delle informazioni DUID usando una richiesta di IOCTL_STORAGE_QUERY_PROPERTY con un ID proprietà di StorageDeviceUniqueIdProperty.

Come confrontare i DUID

I consumer DUID devono usare la routine CompareStorageDuids , definita in Storduids.h, per confrontare due DUID. CompareStorageDuids restituisce un valore DUID_MATCH_STATUS che indica se i due DUID corrispondono. Se l'operazione ha esito positivo, CompareStorageDuids restituisce uno dei valori seguenti:

DuidExactMatch
Tutti i campi nei due DUID corrispondono esattamente.

DuidSubIdMatch
Un DUID è costituito da diversi ID secondari. Almeno uno degli ID secondari corrisponde e i due DUID rappresentano probabilmente lo stesso dispositivo. Quando il firmware del dispositivo viene aggiornato, potrebbe acquisire nuovi identificatori, che cambierà la composizione del DUID del dispositivo. Se un consumer DUID confronta un DUID precedente per il dispositivo con il nuovo DUID, CompareStorageDuids potrebbe restituire DuidSubIdMatch anziché DuidExactMatch. Si tratta di un esempio di corrispondenza valida basata su un sotto-ID. Un consumer DUID deve scegliere se accetta il valore restituito DuidSubIdMatch come corrispondenza o una mancata corrispondenza, a seconda dei requisiti del consumer DUID.

DuidNoMatch
I numeri di serie non corrispondono e nessuno degli ID secondari univoci dalla pagina 83h della corrispondenza dei dati dei prodotti vitali (VPD).

Oltre ai valori precedenti, CompareStorageDuids potrebbe restituire vari codici di errore.

La routine CompareStorageDuids usa l'algoritmo seguente per confrontare due DUID:

  1. Verificare la corrispondenza esatta. Se tutti i dati nelle unità DUID corrispondono esattamente e CompareStorageDuids restituisce DuidExactMatch. In caso contrario, continuare con il controllo successivo.

  2. Controllare gli identificatori VPD. Se si verifica una corrispondenza tra id secondari univoci, i DUID corrispondono e CompareStorageDuids restituisce DuidSubIdMatch. Se non corrisponde alcun ID secondario o il dispositivo non fornisce identificatori VPD univoci, continuare con il controllo successivo.

  3. Controllare il numero di serie dell'unità. Se l'ID fornitore, l'ID prodotto e il numero di serie sono uguali, i DUID corrispondono e CompareStorageDuids restituisce DuidSubIdMatch. Se nessuno di questi valori corrisponde o il dispositivo non fornisce questi valori, continuare con il controllo successivo.

  4. Controllare la firma del layout dell'unità. Se le firme del layout dell'unità dei due DUID corrispondono, i DUID corrispondono eCompareStorageDuids restituisce DuidSubIdMatch. Se le firme dell'unità non corrispondono o il sistema non riesce a leggere la firma del layout dell'unità del dispositivo, i DUID non corrispondono e CompareStorageDuids restituisce DuidNoMatch.