存储设备的设备惟一标示符(DUID)
由于文件系統(tǒng)構(gòu)架變得更復(fù)雜,操作系統(tǒng)組件數(shù)目倍增,啟動程序訪問存儲目標(biāo)通過激增的多樣的硬件和軟件路徑等原因,識別存儲設(shè)備的方法變得不充足。
例如,即插即用管理器為計算機中每一設(shè)備產(chǎn)生了一個實例標(biāo)示符(instance identifier )。每一實例標(biāo)示符相當(dāng)于設(shè)備樹中一個單獨設(shè)備節(jié)點,并惟一標(biāo)示該設(shè)備,如果設(shè)備保留在相同的位置。當(dāng)計算機重啟時,實例標(biāo)示符仍然存在,但是當(dāng)你移除設(shè)備到一個不同的總線上或不同的計算機上時,實例ID并不保持相同。因此,實例ID,對于存儲區(qū)域網(wǎng)絡(luò)(SAN)和一些較新的系統(tǒng)組件而言,并不準(zhǔn)確,如Windows Vista Diagnostic Service,其操作在分發(fā)式存儲環(huán)境中。當(dāng)硬盤驅(qū)動器預(yù)言一個SMART失敗,其將產(chǎn)生一個診斷服務(wù)時間。在磁盤可能在的所有計算機上和磁盤可能綁定的所有總線上,該事件必須包含惟一標(biāo)志失敗硬盤的標(biāo)示符。然而,實例ID和任意其它的設(shè)備標(biāo)示符字符串為達到這一目的并不精確。
一些應(yīng)用程序和系統(tǒng)服務(wù),如Microsoft Cluster Service(MSCR)和分區(qū)管理器,在設(shè)備簇中,使用設(shè)備布局簽名device layout signature(STORAGE_DEVICE_LAYOUT_SIGNATURE)來惟一標(biāo)示存儲設(shè)備。然而在一些環(huán)境下,設(shè)備布局簽名是不精確的,包含如下限制
l???????? 簽名可能改變或清除
l???????? 如果設(shè)備沒有旋轉(zhuǎn)或者訪問簽名保留區(qū)域遇到問題,簽名無法獲取
l???????? 簽名無法被獲取,如果磁盤被其它簇節(jié)點預(yù)留。MSCS
l???????? 驅(qū)動器布局簽名無法幫助區(qū)分邏輯單元號(LUN)和它的快照。因為一個邏輯單元號和它的快照有著相同的內(nèi)容,他們的驅(qū)動器布局簽名將是相同的。
序列號有時可以作為一個可信賴的方法去唯一識別存儲設(shè)備,其不依賴于設(shè)備的位置。序列號通常作為設(shè)備的詢盤數(shù)據(jù)的一部分可以被獲取。啟動程序可以通過IOCTL_STORAGE_QUERY_PROPERTY 來查詢詢盤數(shù)據(jù),端口驅(qū)動程序在一個STORAGE_DEVICE_DESCRIPTOR結(jié)構(gòu)體中上報查詢結(jié)果。然而,這種方法無法識別那些不上報詢盤數(shù)據(jù)的設(shè)備,如磁帶驅(qū)動器,
?
設(shè)備唯一標(biāo)識符(DUIDs)
由于唯一識別設(shè)備的方法經(jīng)常因為技術(shù)的進步變?yōu)椴辉偈褂?#xff0c;Microsoft開發(fā)了一種被稱為設(shè)備唯一ID(DUID)的設(shè)備ID格式,DUID具有可擴充性,并能包含新的方法去識別設(shè)備。
?????? ?????? DUID由數(shù)據(jù)結(jié)構(gòu)STORAGE_DEVICE_UNIQUE_IDENTIFIER定義,該數(shù)據(jù)結(jié)構(gòu)的第一個版本包含下列標(biāo)示組合:
STORAGE_DEVICE_ID_DESCRIPTOR
STORAGE_DEVICE_ID_DESCRIPTOR結(jié)構(gòu)包含從設(shè)備的重要產(chǎn)品數(shù)據(jù)(VPD)中0x83頁中提取的標(biāo)識符。典型的,只有SCSI和光纖通道設(shè)備支持該頁面。集成驅(qū)動器電子(IDE)和通用串行總線(USB)設(shè)備, IEEE1394設(shè)備和RAID控制器不提供0x83頁
STORAGE_DEVICE_DESCRIPTOR
STORAGE_DEVICE_DESCRIPTOR 結(jié)構(gòu)包含其他的詢盤數(shù)據(jù),包括SerialNumberOffset數(shù)據(jù)成員中相對于單元序列號的偏移。序列號格式化為變量長度的,以NULL終止的字符串。如果存儲設(shè)備是SCSI兼容的,端口驅(qū)動程序嘗試從VPD中可選擇的單元序列號頁面(頁0x80)中提取序列號。如果存儲設(shè)備是IDE設(shè)備,端口驅(qū)動程序從設(shè)備標(biāo)識數(shù)據(jù)中產(chǎn)生一個序列號。
STORAGE_DEVICE_LAYOUT_SIGNATURE
STORAGE_DEVICE_LAYOUT_SIGNATURE結(jié)構(gòu)包含設(shè)備布局簽名。
?
更多的數(shù)據(jù)將在以后的版本中添加到DUID中。
DUID沒有固定的大小,因此使用DUID的軟件(被稱為DUID消費者)必須從數(shù)據(jù)結(jié)構(gòu)STORAGE_DEVICE_UNIQUE_IDENTIFIER中成員Size獲取DUID的大小。DUID的版本也可以從相同的數(shù)據(jù)結(jié)構(gòu)中Version變量獲取。
一些設(shè)備并不會提供足夠的信息給操作系統(tǒng)以保證設(shè)備的DUID對于所有的使用和所有的DUID消費者都十分的唯一。如果系統(tǒng)能從設(shè)備的VPD中檢索到唯一ID,系統(tǒng)將創(chuàng)建一個DUID,對于所有的DUID來說將十分的唯一。然而,如果系統(tǒng)必須單獨地從設(shè)備布局簽名中創(chuàng)建一個DUID,DUID對于一些DUID消費者來說以充足唯一,但是并不是對于所有而言。
系統(tǒng)試圖創(chuàng)建具有如下特征的DUID:
l???????? 系統(tǒng)重啟時DUID保持不變
l???????? DUID保持不變。即使當(dāng)設(shè)備從一臺電腦移動到另一臺電腦,或一個適配器到另一適配器,一個通道到另一通道。
l???????? DUID是被設(shè)備而不是媒介。這一區(qū)別對于具有可移動媒介的設(shè)備而言十分重要。
DUID具有如下限制:
l???????? DUID通常包含不能被顯示的二進制內(nèi)容;
l???????? DUID并不是總是NULL終止的。DUID消費者必須檢查STORAGE_DEVICE_LAYOUT_SIGNATURE數(shù)據(jù)結(jié)構(gòu)中成員Size來確定DUID的長度;
l???????? 枚舉者不能為熱拔插目的去試圖使用DUID去識別設(shè)備對象。多路系統(tǒng)可以有多個設(shè)備共享相同的DUID。但是對于熱拔插目的,設(shè)備ID必須是唯一的。
如何比較DUID
DUID消費者使用頭文件Storduids.h中定義的CompareStorageDuids例程來比較兩個DUID。CompareStorageDuids 返回一個DUID_MATCH_STATUS值,顯示這兩個DUID是否匹配。如果操作成功,CompareStorageDuids返回下面中一個值:
DuidExactMatch
這兩個DUID中所有的位都匹配。
DuidSubIdMatch
DUID是有許多子-ID組成。至少其中一個子-ID匹配,這兩個DUID可能代表著相同的設(shè)備。當(dāng)設(shè)備固件更新時,它可能獲取新的設(shè)備標(biāo)識符,將改變設(shè)備DUID的組成。如果DUID消費者對于具有新的DUID設(shè)備采用舊的DUID進行比較,CompareStorageDuids可能返回DuidSubIdMatch代替DuidExactMatch。這只是一個基于子-ID的一個合法的匹配。基于DUID消費者的需求,DUID消費者必須選擇是否接受DuidSubIdMatch返回值作為匹配或不匹配。
DuidNoMatch
序列號不匹配。產(chǎn)品重要數(shù)據(jù)中頁83h中唯一子ID均不匹配。
除了前面的值,CompareStorageDuids可能返回一些錯誤代碼.
1.?????? 檢查完全匹配。如果DUID中所有數(shù)據(jù)都匹配,DUID完全匹配,CompareStorageDuids返回DuidExactMatch。如果不是,繼續(xù)下一步檢查。
2.?????? 檢查VPD標(biāo)識符。如果任一唯一子-ID匹配,那么DUID匹配,CompareStorageDuids返回DuidSubIdMatch匹配。如果沒有子-ID匹配或者設(shè)備不提供唯一產(chǎn)品重要數(shù)據(jù)(VPD)標(biāo)識符,繼續(xù)如下的檢查。
3.?????? 檢查單元序列號。如果廠商ID,產(chǎn)品ID,序列號相同,那么DUID匹配,CompareStorageDuids返回CompareStorageDuids。如果這些都不匹配或設(shè)備不提供唯一產(chǎn)品重要數(shù)據(jù)(VPD)標(biāo)識符,繼續(xù)如下的檢查。
檢查驅(qū)動器布局簽名。如果兩個DUID的設(shè)備布局簽名匹配,那么DUID匹配,CompareStorageDuids 返回 DuidSubIdMatch。如果設(shè)備簽名不匹配或者系統(tǒng)不能讀到設(shè)備驅(qū)動器布局簽名。DUID不匹配,同時CompareStorageDuids返回DuidNoMatch。
總結(jié)
以上是生活随笔為你收集整理的存储设备的设备惟一标示符(DUID)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言程序设计教程习题和答案-C语言期末
- 下一篇: 小芯片与大芯片技术