다음을 통해 공유


스토리지 디바이스에 대한 DUID(디바이스 고유 식별자)

파일 시스템 아키텍처가 더 복잡해지고, 운영 체제 구성 요소가 곱해지고, 초기자가 점점 더 다양한 하드웨어 및 소프트웨어 경로를 통해 스토리지 대상에 액세스함에 따라 스토리지 디바이스를 식별하는 기술이 부적절해집니다.

예를 들어 PnP(플러그 앤 플레이) 관리자는 컴퓨터의 각 디바이스에 대한 instance 식별자(ID)를 생성합니다. 각 instance ID는 디바이스 트리의 단일 디바이스 노드에 해당하며 디바이스가 동일한 위치에 유지되는 경우 디바이스를 고유하게 식별합니다. 인스턴스 ID는 컴퓨터를 다시 시작할 때 유지되지만 디바이스를 다른 버스 또는 다른 컴퓨터로 이동하는 경우 동일하게 유지되지 않습니다. 따라서 instance ID는 SAN(스토리지 영역 네트워크)의 애플리케이션과 분산 스토리지가 있는 환경에서 작동하는 Windows Vista 진단 서비스와 같은 일부 최신 시스템 구성 요소에 적합하지 않습니다. 하드 디스크 드라이브는 SMART 오류를 예측하면 진단 서비스에 대한 이벤트를 생성합니다. 이 이벤트에는 디스크가 있을 수 있는 모든 컴퓨터와 연결할 수 있는 모든 버스에서 실패한 하드 디스크를 고유하게 식별하는 식별자가 포함되어야 합니다. 인스턴스 ID 및 다른 디바이스 식별 문자열은 이 용도로 적합하지 않습니다.

MSCS(Microsoft 클러스터 서비스) 및 파티션 관리자와 같은 일부 애플리케이션 및 시스템 서비스는 디바이스 레이아웃 서명(STORAGE_DEVICE_LAYOUT_SIGNATURE)을 사용하여 클러스터의 스토리지 디바이스를 고유하게 식별합니다. 그러나 디바이스 레이아웃 서명은 특정 상황에서 이 용도에 적합하지 않으며 다음과 같은 제한 사항을 포함합니다.

  • 서명이 변경되거나 지워질 수 있습니다.

  • 디바이스가 회전하지 않거나 서명이 있는 섹터에 액세스하는 데 문제가 있는 경우 서명을 사용할 수 없습니다.

  • 디스크가 다른 클러스터 노드에서 예약된 경우 서명을 사용할 수 없습니다. MSCS는 MSCS가 실행 중인 노드와 연결된 디스크의 드라이브 레이아웃만 읽을 수 있습니다. 다른 클러스터 노드의 디스크에 액세스해야 하는 소프트웨어는 디스크 레이아웃 서명 대신 사용해야 합니다.

  • 드라이브 레이아웃 서명은 LUN(논리 단위 번호)과 해당 스냅샷 구분하는 데 도움이 될 수 없습니다. LUN 및 해당 스냅샷 콘텐츠가 동일하기 때문에 드라이브 레이아웃 서명은 동일합니다.

일련 번호는 디바이스의 위치에 의존하지 않는 스토리지 디바이스를 고유하게 식별하는 신뢰할 수 있는 기술인 경우가 있습니다. 일련 번호는 종종 디바이스의 조회 데이터의 일부로 사용할 수 있습니다. 초기자는 IOCTL_STORAGE_QUERY_PROPERTY 요청을 사용하여 조회 데이터를 쿼리할 수 있으며 포트 드라이버는 쿼리 결과를 STORAGE_DEVICE_DESCRIPTOR 구조로 보고합니다. 그러나 이 기술은 조회 데이터를 보고하지 않는 테이프 드라이브와 같은 디바이스를 식별하는 데 도움이 되지 않습니다.

DUID(디바이스 고유 식별자)

기술이 발전함에 따라 디바이스를 고유하게 식별하는 기술은 더 이상 사용되지 않는 경우가 많기 때문에 Microsoft는 확장 가능한 DUID(디바이스 고유 ID)라는 디바이스 ID 형식을 개발했으며, 이를 통해 디바이스를 식별할 수 있는 새로운 기술을 통합할 수 있습니다.

DUID는 STORAGE_DEVICE_UNIQUE_IDENTIFIER 구조체로 정의되며 이 구조체의 첫 번째 버전(DUID_VERSION_1)에는 다음 식별자의 조합이 포함됩니다.

STORAGE_DEVICE_ID_DESCRIPTOR
STORAGE_DEVICE_ID_DESCRIPTOR 구조에는 디바이스의 중요한 제품 데이터(VPD)의 페이지 0x83 추출된 식별자가 포함되어 있습니다. 일반적으로 SCSI 및 파이버 채널 디바이스만 이 페이지를 지원합니다. IDE(통합 드라이브 전자 장치) 및 USB(유니버설 직렬 버스) 디바이스, IEEE 1394 드라이브 및 RAID 컨트롤러는 페이지 0x83 제공하지 않습니다.

STORAGE_DEVICE_DESCRIPTOR
STORAGE_DEVICE_DESCRIPTOR 구조에는 SerialNumberOffset 멤버의 단위 일련 번호에 대한 오프셋을 포함하여 다른 조회 데이터가 포함됩니다. 일련 번호는 가변 길이 NULL로 끝나는 문자열로 형식이 지정됩니다. 스토리지 디바이스가 SCSI 규격인 경우 포트 드라이버는 VPD의 선택적 단위 일련 번호 페이지(페이지 0x80)에서 일련 번호를 추출하려고 시도합니다. 스토리지 디바이스가 IDE 디바이스인 경우 포트 드라이버는 디바이스의 식별 데이터에서 일련 번호를 생성합니다.

STORAGE_DEVICE_LAYOUT_SIGNATURE
STORAGE_DEVICE_LAYOUT_SIGNATURE 디바이스 레이아웃 서명을 포함합니다.

이후 버전에서는 DUID에 더 많은 데이터가 추가될 예정입니다.

DUID에는 고정 크기가 없으므로 DUID(DUID 소비자라고 함)를 사용하는 소프트웨어는 STORAGE_DEVICE_UNIQUE_IDENTIFIER 구조체의 Size 멤버에서 DUID의 크기를 가져와야 합니다. DUID 버전은 이 구조체의 Vers****ion 멤버에서 사용할 수 있습니다.

일부 디바이스는 디바이스의 DUID가 모든 용도 및 모든 DUID 소비자에 대해 충분히 고유하도록 보장하기 위해 시스템에 충분한 정보를 제공하지 않습니다. 운영 체제가 디바이스의 VPD에서 고유 ID를 검색할 수 있는 경우 모든 DUID 소비자에 대해 충분히 고유한 DUID를 만들 수 있습니다. 그러나 시스템이 디바이스 레이아웃 서명에서만 DUID를 만들어야 하는 경우 DUID는 일부 DUID 소비자에게는 충분히 고유하지만 다른 DUID 소비자에게는 고유하지 않습니다.

시스템은 다음과 같은 특성을 가진 DUID를 만들려고 시도합니다.

  • 운영 체제가 다시 시작될 때 DUID는 동일하게 유지됩니다.

  • 장치가 한 컴퓨터에서 다른 컴퓨터로, 한 어댑터에서 다른 어댑터로 또는 한 채널에서 다른 채널로 이동하는 경우에도 DUID는 동일하게 유지됩니다.

  • DUID는 미디어가 아닌 디바이스를 식별합니다. 이러한 구분은 이동식 미디어가 있는 드라이브에 중요합니다.

  • 다중 경로 시스템에서 DUID는 모든 I/O 경로에 대해 동일합니다.

DUID에는 다음과 같은 제한 사항이 있습니다.

  • DUID에는 표시할 수 없는 이진 콘텐츠가 포함된 경우가 많습니다.

  • DUID가 항상 null로 종료되는 것은 아닙니다. DUID 소비자는 DUID의 길이를 확인하려면 STORAGE_DEVICE_LAYOUT_SIGNATURE 구조체의 Size 멤버를 검사 합니다.

  • DUID 소비자는 바이트 바이트를 비교하는 대신 CompareStorageDuids 를 사용하여 DUID를 비교해야 합니다.

  • 열거자는 DUID를 사용하여 PnP(플러그 앤 플레이) 목적으로 디바이스 개체를 식별하려고 시도해서는 안 됩니다. 다중 경로 시스템에는 동일한 DUID를 공유하는 디바이스가 둘 이상 있을 수 있습니다. 그러나 PnP의 경우 디바이스 ID는 고유해야 합니다.

초기자는 StorageDeviceUniqueIdProperty의 속성 ID가 있는 IOCTL_STORAGE_QUERY_PROPERTY 요청을 사용하여 DUID 정보 데이터를 쿼리할 수 있습니다.

DUID를 비교하는 방법

DUID 소비자는 Storduids.h에 정의된 CompareStorageDuids 루틴을 사용하여 두 개의 DUID를 비교해야 합니다. CompareStorageDuids는DUID 가 일치하는지 여부를 나타내는 DUID_MATCH_STATUS 값을 반환합니다. 작업이 성공하면 CompareStorageDuids 는 다음 값 중 하나를 반환합니다.

DuidExactMatch
두 DUID의 모든 필드가 정확히 일치합니다.

DuidSubIdMatch
DUID는 여러 하위 ID로 구성됩니다. 하위 ID 중 하나 이상이 일치하며 두 DUID는 동일한 디바이스를 나타낼 수 있습니다. 디바이스 펌웨어가 업데이트되면 새 식별자를 획득하여 디바이스의 DUID 구성을 변경할 수 있습니다. DUID 소비자가 디바이스의 이전 DUID를 새 DUID와 비교하는 경우 CompareStorageDuidsDuidExactMatch 대신 DuidSubIdMatch반환할 수 있습니다. 하위 ID를 기반으로 하는 유효한 일치 항목의 예입니다. DUID 소비자는 DUID 소비자의 요구 사항에 따라 DuidSubIdMatch 반환 값을 일치 또는 불일치로 허용할지 여부를 선택해야 합니다.

DuidNoMatch
일련 번호가 일치하지 않으며 중요한 제품 데이터(VPD)의 페이지 83h에 있는 고유한 하위 ID가 일치하지 않습니다.

이전 값 외에도 CompareStorageDuids는 다양한 오류 코드를 반환할 수 있습니다.

CompareStorageDuids 루틴은 다음 알고리즘을 사용하여 두 개의 DUID를 비교합니다.

  1. 정확한 일치 항목을 확인합니다. DUID의 모든 데이터가 일치하는 경우 DUID는 정확히 일치하고 CompareStorageDuidsDuidExactMatch를 반환합니다. 그렇지 않은 경우 다음 검사 계속합니다.

  2. VPD 식별자를 확인합니다. 고유한 하위 ID가 일치하면 DUID가 일치하고 CompareStorageDuidsDuidSubIdMatch를 반환합니다. 일치하는 하위 ID가 없거나 디바이스가 고유한 VPD 식별자를 제공하지 않는 경우 다음 검사 계속 진행합니다.

  3. 단위 일련 번호를 확인합니다. 공급업체 ID, 제품 ID 및 일련 번호가 같으면 DUID가 일치하고 CompareStorageDuidsDuidSubIdMatch를 반환합니다. 이러한 값이 일치하지 않거나 디바이스에서 이러한 값을 제공하지 않는 경우 다음 검사 계속 진행합니다.

  4. 드라이브 레이아웃 서명을 확인합니다. 두 DUID의 드라이브 레이아웃 서명이 일치하면 DUID가 일치하고CompareStorageDuidsDuidSubIdMatch를 반환합니다. 드라이브 서명이 일치하지 않거나 시스템에서 디바이스의 드라이브 레이아웃 서명을 읽을 수 없는 경우 DUID는 일치하지 않으며 CompareStorageDuidsDuidNoMatch를 반환합니다.