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