Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las técnicas para identificar los dispositivos de almacenamiento son inadecuadas a medida que la arquitectura del sistema de archivos se vuelve más compleja, el número de componentes del sistema operativo multiplica y los iniciadores acceden a los destinos de almacenamiento a través de rutas de acceso de hardware y software cada vez más diversas.
Por ejemplo, el administrador de Plug and Play (PnP) genera un identificador de instancia (ID) para cada dispositivo del equipo. Cada identificador de instancia corresponde a un único nodo de dispositivo en el árbol de dispositivos e identifica de forma única un dispositivo, si el dispositivo permanece en la misma ubicación. Los identificadores de instancia se conservan cuando se reinicia un equipo, pero no siguen siendo los mismos si mueve el dispositivo a un bus diferente o a otro equipo. Como resultado, los identificadores de instancia son inadecuados para las aplicaciones en redes de área de almacenamiento (SAN) y para algunos componentes del sistema más recientes, como el Servicio de diagnóstico de Windows Vista, que funcionan en entornos con almacenamiento distribuido. Cuando una unidad de disco duro predice un error SMART, genera un evento para el servicio de diagnóstico. Este evento debe contener un identificador que identifique de forma única el disco duro con errores en todos los equipos a los que el disco podría estar dentro y en todos los buses a los que se podría conectar. Los identificadores de instancia y cualquiera de las demás cadenas de identificación del dispositivo son inadecuados para este fin.
Algunas aplicaciones y servicios del sistema, como el Servicio de clúster de Microsoft (MSCS) y el Administrador de particiones, usan la firma de diseño de dispositivo (STORAGE_DEVICE_LAYOUT_SIGNATURE) para identificar de forma única un dispositivo de almacenamiento en un clúster. Pero la firma de diseño del dispositivo no es adecuada para este fin, en determinadas circunstancias, e incluye las siguientes limitaciones:
La firma puede cambiar o borrarse.
Es posible que la firma no esté disponible si el dispositivo no está girando o tiene problemas para acceder a los sectores donde reside la firma.
La firma no está disponible si otro nodo de clúster reserva el disco. MSCS puede leer el diseño de la unidad de solo los discos asociados al nodo en el que se ejecuta MSCS. El software que debe tener acceso a los discos de diferentes nodos de clúster debe usar una alternativa a la firma de diseño de disco.
Las firmas de diseño de unidad no pueden ayudar a distinguir entre un número de unidad lógica (LUN) y su instantánea. Dado que un LUN y su instantánea tienen contenido idéntico, sus firmas de diseño de unidad serán las mismas.
A veces, un número de serie es una técnica confiable de identificar de forma única un dispositivo de almacenamiento que no depende de la ubicación del dispositivo. El número de serie suele estar disponible como parte de los datos de consulta de un dispositivo. Los iniciadores pueden consultar los datos de consulta con una solicitud de IOCTL_STORAGE_QUERY_PROPERTY y el controlador de puerto notifica los resultados de la consulta en una estructura de STORAGE_DEVICE_DESCRIPTOR . Sin embargo, esta técnica no ayuda a identificar dispositivos, como unidades de cinta, que no notifican datos de consulta.
Identificadores únicos de dispositivo (DUID)
Dado que las técnicas para identificar dispositivos de forma única suelen quedar obsoletas a medida que evoluciona la tecnología, Microsoft ha desarrollado un formato de identificador de dispositivo denominado id. único de dispositivo (DUID) que es extensible y que puede incorporar nuevas técnicas para identificar los dispositivos a medida que están disponibles.
Un DUID se define mediante una estructura de STORAGE_DEVICE_UNIQUE_IDENTIFIER y la primera versión de esta estructura (DUID_VERSION_1) incluye una combinación de los siguientes identificadores:
STORAGE_DEVICE_ID_DESCRIPTOR
La estructura de STORAGE_DEVICE_ID_DESCRIPTOR contiene identificadores que se extraen de la página 0x83 de los datos vitales del producto (VPD) del dispositivo. Normalmente, solo los dispositivos SCSI y Canal de fibra admiten esta página. Los dispositivos de la electrónica de unidad integrada (IDE) y el bus serie universal (USB), las unidades IEEE 1394 y los controladores RAID no proporcionan 0x83 de página.
STORAGE_DEVICE_DESCRIPTOR
La estructura STORAGE_DEVICE_DESCRIPTOR contiene otros datos de consulta, incluido un desplazamiento al número de serie de unidad en el miembro SerialNumberOffset . El número de serie tiene el formato de una cadena terminada en NULL de longitud variable. Si el dispositivo de almacenamiento es compatible con SCSI, el controlador de puerto intenta extraer el número de serie de la página número de serie de unidad opcional (página 0x80) del VPD. Si el dispositivo de almacenamiento es un dispositivo IDE, el controlador de puerto genera un número de serie a partir de los datos de identificación del dispositivo.
STORAGE_DEVICE_LAYOUT_SIGNATURE
El STORAGE_DEVICE_LAYOUT_SIGNATURE contiene la firma de diseño del dispositivo.
Se agregarán más datos a los DUID en versiones futuras.
Los DUID no tienen un tamaño fijo, por lo que el software que utiliza DUID (conocido como consumidor de DUID) debe obtener el tamaño del DUID del miembro Size de la estructura STORAGE_DEVICE_UNIQUE_IDENTIFIER. La versión del DUID está disponible en el miembro Vers***ion de esta misma estructura.
Algunos dispositivos no proporcionan suficiente información para que el sistema garantice que el DUID del dispositivo será lo suficientemente único para todos los usos y todos los consumidores DUID. Si el sistema operativo puede recuperar identificadores únicos del VPD del dispositivo, puede crear un DUID lo suficientemente único para todos los consumidores de DUID. Pero si el sistema debe crear un DUID solo a partir de la firma de diseño del dispositivo, el DUID será lo suficientemente único para algunos consumidores DUID, pero no para otros.
El sistema intenta crear un DUID que tenga las siguientes características:
El DUID sigue siendo el mismo cuando se reinicia el sistema operativo.
El DUID sigue siendo el mismo, incluso cuando el dispositivo se mueve de un equipo a otro, un adaptador a otro o un canal a otro.
El DUID identifica el dispositivo y no los medios. Esta distinción es importante para las unidades que tienen medios extraíbles.
En los sistemas de múltiples rutas, el DUID es el mismo para todas las rutas de acceso de E/S.
Los DUID tienen las siguientes limitaciones:
Los DUID suelen contener contenido binario que no se puede mostrar.
Los DUID no siempre terminan en null. Los consumidores DUID deben comprobar el miembro Size de la estructura STORAGE_DEVICE_LAYOUT_SIGNATURE para determinar la longitud del DUID.
Los consumidores de DUID deben usar CompareStorageDuids para comparar DUID en lugar de compararlos byte byte.
Los enumeradores no deben intentar usar DUID para identificar objetos de dispositivo con fines de Plug and Play (PnP). Los sistemas de múltiples rutas pueden tener más de un dispositivo que comparta el mismo DUID. Pero para PnP, los identificadores de dispositivo deben ser únicos.
Los iniciadores pueden consultar los datos de información de DUID mediante una solicitud de IOCTL_STORAGE_QUERY_PROPERTY con un identificador de propiedad de StorageDeviceUniqueIdProperty.
Comparación de DUID
Los consumidores de DUID deben usar la rutina CompareStorageDuids , que se define en Storduids.h, para comparar dos DUID. CompareStorageDuids devuelve un valor de DUID_MATCH_STATUS que indica si los dos DUID coinciden. Si la operación se realiza correctamente, CompareStorageDuids devuelve uno de los siguientes valores:
DuidExactMatch
Todos los campos de los dos DUID coinciden exactamente.
DuidSubIdMatch
Un DUID se compone de varios subdirecciones. Al menos uno de los subdirecciones coincide, y los dos DUID probablemente representan el mismo dispositivo. Cuando se actualiza el firmware del dispositivo, puede adquirir nuevos identificadores, lo que cambiará la composición del DUID del dispositivo. Si un consumidor de DUID compara un DUID antiguo para el dispositivo con el nuevo DUID, CompareStorageDuids podría devolver DuidSubIdMatch en lugar de DuidExactMatch. Este es un ejemplo de una coincidencia válida basada en un subdidirección. Un consumidor de DUID debe elegir si aceptará el valor devuelto duidSubIdMatch como una coincidencia o un error de coincidencia, según los requisitos del consumidor DUID.
DuidNoMatch
Los números de serie no coinciden y ninguno de los subdirecursos únicos de la página 83h de la coincidencia de datos vitales del producto (VPD).
Además de los valores anteriores, CompareStorageDuids puede devolver varios códigos de error.
La rutina CompareStorageDuids usa el siguiente algoritmo para comparar dos DUID:
Compruebe si hay una coincidencia exacta. Si todos los datos de los DUID coinciden, los DUID coinciden exactamente y CompareStorageDuids devuelve DuidExactMatch. Si no es así, continúe con la siguiente comprobación.
Compruebe los identificadores de VPD. Si coinciden los identificadores secundarios únicos, los DUID coinciden y CompareStorageDuids devuelve DuidSubIdMatch. Si no coinciden los subdirecciones o el dispositivo no proporciona identificadores VPD únicos, continúe con la siguiente comprobación.
Compruebe el número de serie de la unidad. Si el identificador del proveedor, el identificador del producto y el número de serie son los mismos, los DUID coinciden y CompareStorageDuids devuelve DuidSubIdMatch. Si ninguno de estos valores coincide o el dispositivo no proporciona estos valores, continúe con la comprobación siguiente.
Compruebe la firma del diseño de la unidad. Si las firmas de diseño de unidad de los dos DUID coinciden, los DUID coinciden yCompareStorageDuids devuelve DuidSubIdMatch. Si las firmas de unidad no coinciden o el sistema no puede leer la firma de diseño de unidad del dispositivo, los DUID no coinciden y CompareStorageDuids devuelve DuidNoMatch.