SCSI 协议命令字 中文含义
SCSI設備的連接類似樹形的分層結構,從PCIE總線遍歷,可以找到所有的SCSI設備,從上到下的層次為:PCIE->HOST->channel->target->lun。
Scsi架構中主機上的scsi接口卡稱為initiator,與其相連接的scsi 磁盤等設備稱為target,在邏輯上,initiator和target之間通信的工作模式,與兩個網絡設備之間的模式相似,他們之間采用client-server的“請求-響應”模式。
SPC:SCSI Primary Command,所有SCSI設備都需要支持的命令;項目實現SPC-5
SBC:SCSI Block Command,塊設備需要支持的命令;SBC-4
這里的client是initiator端的驅動,server是target端的邏輯單元 logic unit。與網絡設備相似,scsi設備對信息的處理也是分層進行的,最上面的是應用層,發出的是scsi命令,最下面的是物理層,發出的是光或電信號,中間通過層層封裝,保證傳輸的可靠性,并對上層屏蔽底層的差異。也就是說,client可以與server通信,而不需要知道底層的物理互連或SCSI傳輸協議。
SCSI 實現了一種客戶機/服務器風格的通信架構。發起者向目標設備發送命令請求。該目標處理此請求并向發起者返回響應。發起者可以是托管計算機中的一個 SCSI 設備,而 SCSI 目標則可以是一個磁盤、光盤和磁帶設備或特殊設備(比如箱體設備)。
LUN:一個Target設備中可能有多個Logical Unit,每個都由Logical Unit Number(LUN)標識。
Nexus:來自拉丁文,意思是紐帶(tie or bind),描述事物之間的連接關系。在SCSI系統中,表示設備之間的關系,如用于Target重連Initiator、Initiator獲取是哪個Target發送來的事物。例如:
a) I_T Nexus:Initiator和Target之間的連接;
b) I_T_L Nexus:Initiator和Target及內部的LU之間的連接;
c) I_T_L_Q Nexus:帶有權重的I_T_L之間的連接。
當應用client發送命令到設備服務端時,作為數據傳輸的開始[徐1] 。
Server端接受任務,通過發送或接收數據作為響應,然后返回這個事務的狀態值。服務端包含任務調度器,處理加入隊列后的任務集。SCSI為客戶端定義了一套任務管理功能(Task Management Function)來管理隊列。例如“Abort Current Task”,客戶端可以產生一個任務相關的請求發給服務端的任務管理功能,然后從Target端獲取一個響應,如下圖所示:
要求每個LUN都支持4個SPC命令,如下所示。例如,INQUIRY命令返回Target設備信息,包括該設備支持的命令集。
LU服務完一個命令后,將返回一個Status Code(狀態碼)。最常見的狀態碼如下表所示。如果狀態碼是02h(CHECK CONDITION),同時將返回Sense Data進一步解釋問題是什么。
完整的Sense Key參見SPC標準,這里列出常見的Key,如下圖所示:
1.1. CDB:Command Descriptor Block
根據SCSI定義,一共有4個命令組:
(1) Non-Data command:如TEST UNIT READY命令。
(2) Write command:如寫數據到硬盤,因為從Initiator角度看,寫數據命令也稱為Data Out命令。
(3) Read command:如讀磁盤命令,讀命令也稱為Data In命令。
(4) Bi-directional command:該命令中既有數據發送也有接收。但是不少操作系統不支持該命令,但是該命令對于支持RAID實現是有意義的,例如:Initiator可能發送數據,硬盤(drive)利用已存在的數據進行計算并返回結果。
邏輯單元驗證保留的CDB字段,并且在CDB保留字段內收到不為零的數據,則邏輯單元應當以CHECK CONDITION狀態終止命令,并且將sense key設置為ILLEGAL REQUEST,并且將其設置為CDB中的INVALID FIELD IN。
邏輯單元在OPERATION CODE字段以外的字段中接收到保留的CDB碼值,則該邏輯單元應以CHECK CONDITION狀態終止命令,將sense key設置為ILLEGAL REQUEST,并附加sense code設置為CDB中的INVALID FIELD IN。
1.1.1. CDB用例
命令通過向設備server端發送CDB來進行通信。對于幾個個命令,CDB在Data-Out緩沖區[徐2] 中伴隨著參數列表。詳見指定命令的詳細信息。
如果邏輯單元驗證保留的CDB字段并且保留字段內容不為0,則邏輯單元應該以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN CDB。
如果邏輯單元在OP CODE字段以外的其他字段中接收到保留的CDB碼。則邏輯單元以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN CDB。
定長/變長CDB見下面的相關描述,如果設備server端收到的CDB包含無效的或者不支持的OP CODE則,則邏輯單元以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID COMMAND OPERATION CODE。
對于所有的命令,如果CDB的參數無效,則設備server端應終止并不改變媒介。
1.1.2. 定長CDB
OPERATION CODE最為第一1 byte,CONTROL Byte作為最后1 byte。
定長6-byte、10-byte、12-byte、16-byte如下
(1)6 byte命令格式CDB
(2)10 byte命令格式CDB
(3)12 byte令格式CDB
(4)16字節命令格式CDB,長LBA
1.1.3. 變長CDB
變長CDB的第1 byte 應為OPERATION CODE :7Fh,第1 byte為CONTROL byte。
ADDITIONAL CDB LENGTH (n–7):表示額外的CDB字節長度,必須為4的倍數。如果傳輸與此長度不符,則該命令應以CHECK CONDITION狀態截止,且sense key設置為ILLEGAL REQUEST,附加sense code設置為INVALID FIELD IN CDB
[徐3]
1.2. CDB格式結構說明
1.2.1. OPERATION CODE
CDB第1個byte為 operation code(OP code),用于標識CDB的請求操作。某些operation code需要基于server action碼來標識對應的CDB請求。Operation code 數據格式,包括group code和command code如下表格。Group code: 3-bit標識8組command code。Command code: 5-bit 提供32個cmd code在每個group內。
5~7bit:0表示6字節長命令。1/2表示10字節命令。5組表示12個字節命令。4表示16個字節命令。
1.2.2. SERVICE ACITON
除6-byte外數據格式外,CDB都提供一個Service Action字段,與operation code字段配合執行特定操作。在CDB數據格式中定義了Server Action字段,但僅在包含了該描述中使用,當CDB中Server action沒有被定義試。按照CDB格式指定的方式使用。
1.2.3. LOGICAL BLOCK ADDRESS
邏輯區塊地址:邏輯單元卷或分區內的邏輯塊地址連續地從0塊開始直到該邏輯單元的最后一個邏輯塊。
一個6-byte的CDB可能包含一個21bit的LBA字段。10-byte和12-byte的CDB包含32 bit LBA字段。16 byte 的 CDB具有兩種格式:一種允許32bit LBA字段,另一種允許64bit LBA字段。附加參數數據中的邏輯塊地址字段的長度為每次出現指定。
1.2.4. TRANSFER LENGTH
Transfer Length字段要傳輸的數據量,通常以塊為單位,一些描述中定義為發送請求的字節數。最多運行一個命令傳輸256個塊256個字節的數據,多字節的Transfer Length字段標中,長度為零指定為無數據傳輸。
1.2.5. PRAMETER LIST LENGTH
參數列表長度:用于從Data-out緩沖區發送的字節數。在CDB中用戶發送到server設備的參數(如模式、診斷、日志參數)。參數列表參數為0,為不傳輸任何數據。
1.2.6. ALLOCATION LENGTH[x4]
分配長度:表示應用client端在已經申請的Data-in緩沖區中分配的最大字節數。分配長度為0表示沒有任何數據傳輸。當分配長度的字節或者所有有效數據(以較小者為準)已經傳輸時候,設備的server端需要終止傳輸到數據輸入緩沖區。Allocation Length用于限制返回給應用的client端可變數據的的最大長度。如果傳輸到Data-in緩沖區的信息包括一些或者全部字段,這些字段內容不允許更改以反映由于分配長度不足而導致的階段,除非手冊另有說明。
如果要傳輸的數據信息超過分配長度的最大值,則設備的server端將不傳輸任何數據,命令會以CHECK CONDITION狀態結束,sense key被置位 ILLEGAL REQUEST。Sense code被置為INVALID FIELD.
1.2.7. CONTROL
控制字對所有命令具有相同的定義。所有的CDB都包含一個控制字節,控制字節的定義如上表格表示。所有的SCSI協議標準都應該定義NACA位所需的功能。
NACA(Normal ACA)bit:
指定當狀態以CHECK CONDITION回復是否建立偶然事件自動通信。用于指示LU是否進行auto contingent allegiance (ACA),ACA是在命令執行過程中萬一發生錯誤時LU所采取的一種措施,如果ACA位沒有置1,那么只要下一個命令是從同一個client發出的,該錯誤狀態就被清除,如果ACA為被置1,就會保持這種錯誤狀態,讓引起錯誤的啟動器通過REQUEST SENSE命令來獲取檢測數據。在ACA狀態下所接受的第一個命令將刪除檢測數據并結束ACA狀態。
1.2.8. GRUOPING FUNCTION
分組函數是收集與命令相關聯的屬性信息的函數(關于具有相同組值的命令被收集到指定的組中)
1.2.9. SENSE DATA
返回錯誤的狀態給應用client端或者應答REQUST SENSE命令。
Sense Data的格式描述見手冊。
2.1. TEST UNIT READY
查詢硬盤狀態是否準備好。
如果邏輯單元能夠接收一個恰當的訪問命令,則不返回CHECK CONDITION狀態,應返回GOOD狀態。如果邏輯單元將設置為ready但是無法置為可操作狀態或者應用client端正處于執行某命令的狀態,這個命令需要以CHECK CONDITION狀態結束,sense key置為NOT READY。(回復數據的格式)[徐5]
OP code: 0x00H
2.2. INQUIRY
查詢設備信息。Inquiry命令發送到應用client端用來請求有關邏輯單元和SCSI目標設備信息。
OP code: 0x12h
EVPD(Enable Vital Product Data)bit:標志位表示設備server端返回一個重要的產品數據,而不是標準查詢。Page Code字段表示返回的是哪個重要的產品數據[徐6] 。
0b:設備server端返回標準Inquiry數據。如果Page Code未設置為0且EVPD位為0,則該命令以CHECK CONDITION狀態終止,sense key置為ILLEGAL REQUEST,附加sensen code置為INVALID FIELD。
1b:Page Code空間指定設備服務端返回產品重要信息的頁信息。
CMDDT(Command Support Date):
T10委員會宣布此位作廢,某些產品上可能還有實現,模擬平臺不對此位進行處理。2.3. ALLOCATION LENGTH:分配長度[徐7]
(1)如果EVPD為0,則分配長度至少為5,以使參數數據中的ADDITIONAL LENGTH空間返回。如果EVPD為1,則分配長度至少為4,以使參數數據中的PAGE LENGTH空間返回。
(2)如果響應錯誤的邏輯單元的Inquiry命令,SCSI目標設備應返回如表 定義的外設限定符。查詢設備命令盡在無能返回Inquiry請求的數據時,返回CHECK CONDITION狀態。
(3)從具有等待關注的條件的端口接收到Inquiry命令,設備server端執行Inquiry命令,不應清除設備關注的條件。
(4)即使設備server端還沒有準備好接受其他的命令,Inquiry數據也需要返回。標準Inquiry數據應可以用,而不會引起任何媒介訪問的延遲,如果設備server端媒介上存儲了部分標準Inquiry或者VPD數據,可能會在返回ASCII碼中的空格(20H)控在其他空間中返回0字段,直到可從媒介收獲得數據。
(5)當SCSI設備及其邏輯單元執行初始化序列時,Inquiry數據可能會被更改。
(6)任何導致Inquiry數據的改變,則設備server端應與每個I_T關聯的啟動端口建立單元關注條件。并將sense code置為INQUIRY DATA HAS CHANGED。
(7)設備硬重置或開機后,應用client端可以使用Inquiry命令來確定系統配置的設備類型。
2.3.1. 標準Inquiry數據結構
標準Inquiry數據結構至少包含36字節
BitByte
7
6
5
4
3
2
1
0
0
PERIPHERAL QUALIFIER
PERIPHERAL DEVICE TYPE
1
RMB
Reserved
2
VERSION
3
Obsolete
Obsolete
NORMACA
HISUP
RESPONSE DATA FORMAT
4
ADDITIONAL LENGTH (n-4)
5
SCCS
ACC
TPGS
3PC
Reserved
PROTECT
6
BQUE
ENCSERV
VS
MULTIP
MCHNGR
Obsolete
Obsolete
ADDR16a
7
Obsolete
Obsolete
WBUS16a
SYNCa
LINKED
Obsolete
CMDQUE
VS
8
(MSB)
T10 VENDOR IDENTIFICATION
(LSB)
15
16
(MSB)
PRODUCT IDENTIFICATION
(LSB)
31
32
(MSB)
PRODUCT REVISION LEVEL
(LSB)
35
36
Vendor specific
55
56
Reserved
CLOCKINGa
QASa
IUSa
57
Reserved
58
(MSB)
VERSION DESCRIPTOR 1
59
(LSB)
.
.
.
72
(MSB)
VERSION DESCRIPTOR 8
73
(LSB)
74
Reserved
95
Vendor specific parameters
96
Vendor specific
n
PERIPHERAL QUALIFIER:外圍設備限定符,指出設備是否和查詢的邏輯單元相連接。
000b:標識具有指定的DeviceType的外圍設備已和邏輯單元建立了連接。如果設備server端不能確定是否和外圍設備是否連接,也可以使用這個限定符值。此值并不表示連接到邏輯單元的外圍設備已經準備就緒。
001b:標識具有指定的DeviceType的外圍設備沒有和邏輯單元建立連接。設備server端在邏輯單元上具有支持該DeviceType的外圍設備的能力。
010b:保留
011b:設備Server端在邏輯單元上不具有支持外設的能力。對于此限定符,DeviceType應配置為1FH。其他的DeviceType類型對于該限定符保留。
100b~111B:廠商專用
PERIPHERAL DEVICE TYPE:外圍設備類型,SCSI的類型碼[徐8] 。
00h:直接存儲設備(磁盤驅動器)
01h:順序存儲設備(磁盤驅動器)
02h:打印設備
03h:處理器設備
04h:一次寫入設備
05h:CD-ROM設備
06h:掃描儀設備
07h:光存儲設備
08h:介質轉換設備
…
1Fh:未知設備類型
RMB(Removable Media)bit:可移動媒介位[x9]
0b:表示不支持可移動
1b:表示可以移動媒介
VERSION field:
表示實現SPC實現的版本
06h:SPC-4
07h:SPC-5
NORMACA(Normal ACA Supported):
0b:表示設備server端不支持NACA為1,和ACA任務屬性
1b:表示設備server端支持CDB中NACA為1,和ACA任務屬性
HISUP(Hierarchical Support)bit
0b:表示SCSI目標設備部不使用分層尋址模式將LUN(邏輯單元號)分配給邏輯單元。
1b:表示SCSI目標設備使用分層尋址模式將LUN分配給邏輯單元。
RESPONSE DATA FORMAT field:
該字段值為2時候表示數據采用手冊中定義的格式。小于2時表示格式無效。大于2表示
保留。
ADDITIONAL LENGTH field:
附加數據長度,表示在標準查詢數據頭后面跟隨著的多少數據字節長度是可以使用的。
SCCS(SCC Supported)bit:
0b:表示不支持SCSI目標設備支持嵌入式存儲控制器。
1b:表示支持SCSI目標設備支持嵌入式存儲控制器。
ACC(ACCESS Control Coordinator)bit:
0b:表示SCSI目標設備沒有邏輯單元尋址的訪問控制協調器。如果SCSI目標設備可以通過邏輯單元進行尋址兒不是通過ACCESS CONTROLS,0邏輯單元號的ACC設置為1。
1b:表示SCSI目標設備包含可通過此邏輯單元尋址的訪問控制協調器。
TPGS(Target Port Group Support)field:
目標端口組支持TPGS字段表示支持邏輯單元不對稱訪問。
00b:SCSI目標設備不支持不對稱邏輯單元訪問或支持廠商指定的形式的不對稱訪問。不支持Report Target Groups和Set Target Group命令。01b:僅支持非對稱邏輯單元訪問(SPC-5)。SCSI目標設備不使用SET TARGET PORT GROUPS命令即可更改目標端口非對稱訪問。支持REPORT TARGET PORTGROUPS命令,不支持SET TARGET PORT GROUPS命令。11b:支持顯式和隱式的非對稱邏輯單元訪問。支持REPORT TARGET PORTGROUPS命令,支持SET TARGET PORT GROUPS命令。3PC(Third-Part Copy)bit:
0b:SCSI目標設備不支持此命令1b:SCSI目標設備支持第三方拷貝命令,比如EXTENED COPY命令。PROTECT bit:
0b:邏輯單元不支持保護信息[x10] 。1b:邏輯單元支持1/2/3保護類型。SPT空間在Extened Inquiry數據頁。ENCSERV(Enclosure Services)bit:
0b:SCSI目標設備不具有嵌入式附加組件。1b:SCSI目標設備含有嵌入式附加組件。具體參考SES。MULTIP(Multi Port)bit:
0b:SCSI目標設備只有一個端口,不實現多端口需求。1b:SCSI目標設備具有多個符合SCSI標準的端口。CMDQUE(Command Queuing)bit:
命令隊列1如果不支持BQUE bit,CMDQUE應置為0,表示邏輯單元不支持任務管理2如果支持BQUE bit,CMDQUE和BQUE表示的任務管理模式如下表描述T10 VENDOR IDENTIFICATION field:
T10廠商標識字段,包含8byte左對齊的ASCII信息。用于表示產品廠商,供應商表示應為INCITS分配的表示。8byte~15byte表示“SEAGATE”。PRODUCT IDENTIFICATION:
產品表示字段,左對齊的ASCII信息。16byte~31byte使用空格(20h)填滿。PRODUCT REVISION LEVEL field:
產品版本等級字段,使用左對齊ASCII信息。32ByteVERSION DESCRIPTOR fields:
版本描述字段,用于標識SCSI目標設備的目標設備的8個標準。可參考最新的SPCCopyright Notice field:
版本聲明字段,Seagate使用96~143byte提供版權聲明ASCII碼。2.4. MODE SENSE 6
查詢硬盤參數命令為設備Server端向應用Client端上報參數的方法,是MODE SELECT命令的互補命令。(6字節)
OP CODE:0x1Ah
DBD(disable block descriptor)bit:
0b:表示設備server端可能在MODE SENSE date中返回0或者更多的塊描述符。
1b:表示設備server端不用在MODE SENSE data返回塊描述符。
PC(Page Control)field:
表示請求的參數類型,對應值如下表:11b的錯誤處理見手冊。
PAGE CODE and SUBPAGE CODE fields:
PAGE CODE和SUBPAGE CODE字段指定要返回的模式頁面和子頁面。如下表ALLOCATION LENGTH field:
分配長度通知目標設備為返回數據分配了多少空間。錯誤處理詳見手冊2.5. MODE SENSE 10
查詢硬盤參數命令為設備Server端向應用Client端上報參數的方法,是MODE SELECT10命令的互補命令。(10字節)
OP CODE:0x5Ah
LLBAA (Long LBA Accepted) bit:
0b:設備Server端LONGLBA在參數數據中為0并返回。
1b:設備Server端返回參數數據并且LONGLBA位返回值為0
其他字段參考MODE SENSE(6)。
2.6. START STOP UNIT
啟動/停止單元命令請求設備Server更換邏輯單元電源功率、加載或者彈出介質操作。包含指定設備server端通過控制功率和定時器來使能或禁止介質訪問操作的直接訪問塊設備。
如果設備Server端正在處理該命令,后續有確認過的CDB請求邏輯單元執行啟動/停止單元命令更換電源狀態的話,設備server端應中斷后續的啟動/停止單元命令,CHECK CONDITION,sense key設置為NOT READY,sense code設置為LOGICAL UNIT NOT REAY, START STOP UNIT COMMAND IN PROGRESS。
OP CODE:0x1Bh
IMMED(Immediate)bit:
0b:設備server端在操作執行完成后返回狀態信息。1b:設備server端在CDB驗證過后盡快返回狀態信息。POWER CONDITION field and POWER CONDITION MODIFIER field:
功率控制狀態字段,功率條件修改。如果支持電源條件則POWER CONDITION值設為非0,START和LOEJ位忽略。如下表所述如果START STOP UNIT命令指定的電源條件與正在進行的操作沖突,在啟動/停止單元命令以GOOD狀態完成后,邏輯單元可能沒有電源條件請求的命令,這個不是個錯誤。NO_FLUSH bit:
0b:表示在進入任何阻止訪問介質電源條件之前,包含cache的邏輯單元所有的邏輯塊寫入媒介中,以應答SYNCHRONIZE CACHE命令其中SYNC_NV位[徐11] 設置為0,LOGICAL BLOCK ADDRESS字段設置為0,NUMBER OF LOGICAL BLOCKS設置為0 1b:在進入任何阻止訪問介質功率條件之前,邏輯單元不應將緩存的邏輯塊寫入媒介。LOEJ (load eject) bit:
加載/彈出位0b:表示邏輯單元不會對加載/彈出介質做任何操作。1b:如果START 位同時為0,則邏輯單元卸載介質。如果START位同時為1,則表示邏輯單元加載介質。如果支持POWER CONDITION字段,POWER CONDITION設置非0h,設備server端應該忽略LOEJ位。START bit:
0b:設備server端執行如下操作a) 使邏輯單元轉換到停止電源。
b) 停止任何已經使能的空閑狀態定時器。
c) 停止任何已經使能的待機狀態定時器。
1b:設備server端執行如下操作1.符合SCSI傳輸協議標準定義的要求2.邏輯單元轉換到有效的power condition;3.初始化使能任何空閑狀態定時器。4.初始化使能任何待機狀態定時器。如果power condition字段支持,同時設置為非0h值,設備server端應忽略START位。2.7. READ CAPACITY 10
返回當前硬盤容量。請求設備server端向date-in緩沖區傳送直接訪問塊設備的參數數據和媒介格式[x12] 。可以像處理HEAD OF QUEUE任務屬性一樣處理此命令。如果邏輯單元支持protection information,應用client端必須使用16字節的READ CAPACITY。
OP CODE:0x25h
此功能協助存儲管理軟件確定是否在CDB中描述的邏輯塊地址起始有足夠空間,包含頻繁訪問的數據結構,不會引起額外的延遲。
LOGICAL BLOCK ADDRESS field:
廢棄。PMI (Partial Medium Indicator) bit:
廢棄。2.8. REQUEST SENSE[x13]
請求查詢Sense命令請求設備Server端發送Sense Date到應用client端。
OP Code:0x03h
DESC(Descriptor Format)bit:
描述格式位
0b:返回固定格式sense data
1b:返回描述格式sense data
ALLOCATION LENGTH field:
應用Client端應該請求252字節的sense data,以確保他們取回所有的sense data。如果求情的字節少于252, sense data可能已丟失,因為帶有任意allocation length的請求REQUESET SENSE命令會清楚sense dataSense data 應在SAM-5規定的條件下可用并清除。如果設備server端沒有其他sense data可回復,則如下:
(1) 返回sense key設置為NO SENSE, sense code設置為NO ADDITIONAL SENSE INFORMATION
(2) 以GOOD狀態完成REQUESET SENSE命令。
(3) 命令完成后,邏輯單元在接收REQUESET SENSE命令之前應返回相同的有效的power condition 。REQUESET SENSE命令不可以重啟任何power condition定時器。
設備server端應向REQUESET SENSE命令返回CHECK CONDITION狀態,上報特定的REQUESET
SENSE本身的異常狀態。
設備Server端應返回至少18字節的參數數據響應一[x14] 個REQUESET SENSE命令,并且DESC設置為0。應用Client端可以確定返回了多少sense data,通改過檢驗CDB中的ALLOCATION LENGTH字段和sense data中的ADDITIONAL SENSE LENGTH字段。如果allocation length小于sense data長度,設備server端不可以適應截斷部分來調整additional sense length。2.9. SYNCHRONIZE CACHE[x15]
同步緩存信息命令,請求設備server端確保指定的邏輯塊的最新數據記錄在非易失性cache和媒介上。邏輯塊包含用戶數據,如果媒介啟用了保護信息,則邏輯塊包括保護信息。由于同步緩存的操作,邏輯塊可能會或可能不會從易失性和非易失性cache中刪除。
OP CODE:0x35h
IMMED(Immediate)bit:
0b:設備server端在同步緩存操作執行完成后返回狀態信息。
1b:設備server端在CDB有效后盡快返回狀態信息。如果IMMED位為1且設備Server端不支持IMMED,設備Server端以CHECK CONDITION狀態結束,sense key置為ILLEGAL REQUEST,sense code置為INVALID FIELD IN CDB。
如果IMMED位置為1,synchronize cache操作未完成,Cathing mode page定義的SYNC_PROG定義設備server動作行為。
LOGICAL BLOCK ADDRESS field:
分配長度字段告訴設備client端在Data-In-Buffer已經申請的長度。
GROUP NUMBER field:
組號字段與命令相關的的屬性[x16] 收集到指定的組。一個組好字段設置為0表示與該命令相關的任何屬性都不收集到任何組中。NUMBER OF BLOCKS field:
塊數量字段指定應同步的邏輯塊的數量,由LOGICAL BLOCK ADDRESS字段指定邏輯塊的起始地址。該字段設置為0表示LOGICAL BLOCK ADDRESS字段中指定開始位置到介質上最后一個邏輯塊的所有邏輯塊都應進行同步。如果logical block address 加上 the number of blocks超過了過媒介的容量,設備server端以CHECK CONDITION狀態終止命令,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。不存在cache內的邏輯塊不被認為是錯誤。2.10. SEEK 10
硬盤LBA定位,請求硬盤驅動來定位指定的邏輯塊地址。
OP CODE:0x2Bh
LUN(Logical Unit Number)field:
邏輯數據塊0,Seagate驅動只支持Logical Unit NumberLOGICAL BLOCK ADDRESS field:
指定4byte邏輯地址。驅動在收到命令后定位指定的地址。最大的邏輯塊地址在Read Capacity Data定義。CONTROL byte:
在1.2.7中定義的描述。2.11. MODE SELECT 6
模式選擇指令(6)使應用client去指定媒介、邏輯單元或者外設參數設備server端的模式。設備server端需要執行MODE SENSE(6)命令。應用Client端在每個MODE SELECT執行之前先發出相應的MODE SENSE命令,來確定支持的mode pages,page lengths和其他參數。關于Mode page[x17] 參見手冊。
OP CODE:0x15h
PF(Page Format)bit:
0b:在塊描述(block descriptors)之后的所有參數為廠商配置。1b:表示消息投和塊描述被構造為手冊中定義的相關參數,如果RTD為1,則忽略PF值。RTD(revert to defaults)bit
0b:表示設備server端應基于CDB中其他字段和參數來處理MODE SELECT命令1b:如果RTD_SUP位置為1,RTD位置為1表示設備server服務端應該還原:a)如果SP置為0,所有模擬頁面的當前模式頁面值為默認值b)如果SP置為1,所有頁面的當前mode page和已保存的mode page恢復為默認值。SP(save pages)bit:
0b:表示設備server端應該執行指定的MODE SELECT操作,不需要保存mode pages。如果邏輯單元在當前和保存的mode pages之間實現任何差別,則命令應以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN CDB。如果SP位設置為1則設備服務端應該執行指定的MODE SELECT操作,然后將所有保存的mode page(包括在Data-Out緩存中發從的)保存在非易失性廠商指定的位置。通過MODE SENSE命令在每個mode page第一個字節中返回PS(parameter saveable)來保存指定的mode pages.1b:表示如果在MODE SENSE數據中PS位設置為1,通過使用MODE SELECT命令發送可以保存的mode pages。如果邏輯單元未實現已保存的mode pages同時SP位設置為1,則命令應以CHECK CONDITION狀態終止,則sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN CDB。PARAMETER LIST LENGTH field:
參數列表長度,表示指定的mode parameter list的長度,這個長度應包含在Data-Out緩沖區中。一個參數列表長度為0表示指定Data-Out緩沖區為空,這種情況不認為是錯誤。如果參數列表長度導致任何mode parameter head,模式描述,模式page被截斷,則命令操作應該以CHECK CONDITION結束,sense key設置為ILLEGAL REQUEST,sense code被設置為PARAMETER LIST LENGTH ERROR。Mode parameter list 在MODE SENSE中定義,每個模式參數列表都以device-type相關的方式定義,在使用的命令標準中找到每種模式中各設備類型唯一的定義。以下所述情況,設備server端以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN PARAMETER LIST,不需要改變任何mode parameter參數:a)應用client端將設備上報為不可更改的任何字段設置與當前值不同。b)應用client端將模式參數頭或塊描述中的任何字段設置為不支持的值。c)應用client端發送的mode page的頁面長度不等于MODE SENSE命令返回的page長度,d)應用client端發送了不支持的模式參數值,并未對該模式的參數進行取整。e)應用client端將模式參數中的任何保留字段設置為非0,并設備server端檢查保留字段。設備server端可以更改任何模式參數在任何mode page(甚至是上報的不可更改的)。設備server端根據MODE SELECT命令之前存在的模式參數與當前值來驗證不可更改的模式參數。2.12. MODE SELETCT 10
模式選擇指令(10)使應用client去指定媒介、邏輯單元或者外設參數設備server端的模式。設備server端需要執行MODE SENSE(10)命令。應用Client端在每個MODE SELECT執行之前先發出相應的MODE SENSE命令。
OP CODE:0x55h
2.13. UNMAP
取消LBA映射,請求設備server使一個或者多個LBA取消映射。NUMAP命令是可以支持精簡配置實現的命令之一。
OP CODE:0x42h
ANCHOR [x18] bit:
0b:表示指定的LBA取消映射的操作都將被執行并解除分配1b:表的指定的LBA取消映射的操作都將被執行并被錨定。錯誤處理見手冊。GROUP NUMBER field:
租號字段,表示指定與命令關聯的屬性收集到同一個租號內。租號字段為0表示與命令相關的屬性不要收集到任何組中。PARAMETER LIST LENGTH field:
表示從應用client端發送到設備server端的UNMAP 參數的字節長度。字段為0表示不發送任何數據。CONTROL byte:
在1.2.7中定義的描述。UNMAP parameter list
參數列表定義詳細見手冊。2.14. WRITE SAME 10
寫相同數據(10),請求設備server端從Data-Out緩存中以指定的LAB范圍內的每個LBA傳輸單個邏輯快。a)執行邏輯塊內容寫操作或者b)unmap操作。操作說明見手冊。
OP CODE:0x41h
WRPROTECT [x19] 寫保護:
見write寫字段LOGICAL BLOCK ADDRESS field:
見1.2.3GROUP NUMBER field:
見1.2.8ANCHOR and UNMAP bits:
如果邏輯單元支持邏輯塊配置管理(請參閱SBC-4),則ANCHOR位,UNMAP位和ANC_SUP位在邏輯塊配置VPD頁面(請參閱5.4.13)確定設備服務器如何處理下表中所述的命令。NUMBER OF BLOCKS field:
表示指定寫入的連續邏輯塊的數量,從邏輯塊指定的LOGICAL BLOCK ADDRESS開始。該字段設置為0表示LOGICAL BLOCK ADDRESS字段表示寫入指定開始位置到介質上最后一個邏輯塊的所有邏輯塊。如果logical block address 加上 the number of blocks超過了過媒介的容量,設備server端以CHECK CONDITION狀態終止命令,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。2.15. WRITE SAME 16
寫相同數據16字節與10字節內容相同,主要在邏輯塊地址和塊數量最大長度不同。
OP Code:0x93h
NDOB bit:
0b:設備server端應使用Data-Out緩沖區的邏輯塊數據來處理命令。
1b:設備server端從Data-Out緩沖區中不傳輸數據。詳細內容見手冊。
2.16. VERIFY 10
校驗數據,請求設備server端檢驗指定媒介上的邏輯塊。基于VRPROTECT字段和媒介格式,每個邏輯塊都包含用戶數據,并可能包含保護信息[x20] 。
OP Code:0x2Fh
包含的緩存邏輯單元應將引用的cache寫入邏輯單元的媒介中(見2.9的SYNCHRONIZE CACHE的SYNC_NV的bit位)DPO bit:
見READ(10)命令GROUP NUMBER field:
組號字段,表示指定與命令關聯的屬性收集到同一個租號內。租號字段為0表示與命令相關的屬性不要收集到任何組中。BYTCHK(byte check) field:
具體含義見手冊。如果 byte-by-byte比較失敗,則設備server端以CHECK CONDITION狀態終止,并將sense key設置為MISCOMPARE,并將sense code設置為此條件的適當值。VERIFICATION LENGTH field:
驗證長度字段,指定需要驗證的連續邏輯塊的數量,通過LOGICAL BLOCK ADDRESS字段來指定邏輯塊開始的位置。如果BYTCHK設置為1,則VERIFICATION LENGTH字段指定設備server端從Data-Out緩存中傳輸的邏輯塊數。如果此字段設置為0表示沒有邏輯塊校驗,這種情況不應被認為是錯誤。如果LOGICAL BLOCK ADDRESS加上VERIFICATION LENGTH字段表示的長度超出媒介容量,設備server端應該以CHECK CONDITION狀態結束,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。驗證長度字段受VPD頁面中的塊限制。如果BYTCHK字段設置為00b、01b/11b,設備server端應基于VRPORTECT從介質或者date-out緩存讀取保護信息,含義見手冊。2.17. VERIFY 12
OP code:0xAFh
含義可見verify 10
2.18. VERIFY 16
OP code:0x8Fh
含義可見verify 10
2.19. READ 6
讀數據請求設備server端讀取指定的邏輯塊并將傳輸這些到data-in緩存中。讀取的每個邏輯塊均包含用戶數據,如果媒介使能了保護信息,還應包含保護信息。傳輸的每個邏輯塊均包含數據信息不包含保護信息。返回在邏輯塊的尋址塊中寫入的或在緩存后寫入的最新數據。
此命令不提供緩存位控制。具有cache訪問的直讀塊設備在READ(6)具有控制值,但本手冊未定義默認值。如果需要顯示控制,使用READ(10)命令。
OP code:0x08h
LOGICAL BLOCK ADDRESS field:
邏輯塊塊地址字段,表示命令訪問的第一個邏輯塊。如果邏輯塊地址超出媒介容量,設備server端應以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。TRANSFER LENGTH field:
傳輸長度字段,讀取指定連續的數據邏輯塊的數據,這些數據傳輸到data-in緩沖區中,邏輯塊起始地址以LOGICAL BLOCK ADDRESS字段指定。當TRANSFER LENGTH設置為0表示需要讀取256個邏輯塊,其他數值表示指定數量的邏輯塊需要被讀取。如果LOGICAL BLOCK ADDRESS加上VERIFICATION LENGTH字段表示的長度超出媒介容量,設備server端應該以CHECK CONDITION狀態結束,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。TRANSFER LENGTH字段值受VPD page中MAXIMUM TRANSFER LENGTH字段限制。a) 對于READ(10),READ(12),READ(16)命令,TRANSFER LENGTH字段值設置為0表示沒有邏輯塊需要讀取
b) READ(6)限制尋址空間為2G邏輯塊,對于512字節的塊長度在某些系統初始例程要使用READ(6)命令。系統初始化例程從READ(6)命令遷移到READ(10)命令,該命令能夠以512字節尋址2TB的塊長度,或者從READ(16)遷移尋址超過2TB。
在返回命令狀態前,設備server端應從媒介中讀取保護信息,詳細見手冊。
2.20. READ 10
讀數據請求設備server端讀取指定的邏輯塊并將傳輸這些到data-in緩存中。讀取的每個邏輯塊均包含用戶數據,如果媒介使能了保護信息,還應包含保護信息。傳輸的每個邏輯塊均包含數據信息不包含保護信息。返回在邏輯塊的尋址塊中寫入的或在緩存后寫入的最新數據。
OP Code:0x28h
RDPROTEST field:
在返回命令狀態之前,設備server端從媒介讀取保護信息以檢驗保護信息。具體描述見手冊。DPO(Disable Page Out)bit:
0b:表示由Cache的RETENTION PRIORITY字段的確定保留優先級。1b:表示設備server端為此命令訪問的邏輯塊分配最低的保留優先級,為提取或保留到cache中。FUA (Force unit Access)bit:
0b:表示設備server端可以從易失性cache、非易失性cache或者其他媒介中讀取邏輯塊,該LBA指定的數據格。1b:表示設備server端以指定的數據格式從LBA中,非易失性cache,或者媒介中讀取邏輯塊。如果易失性cache包含最新的邏輯塊,設備server端在讀邏輯塊之前應該將邏輯塊寫入非易失性cache或媒介中。RARC(rebuild assist recovery control) bit:
如果支持重建輔助模式,但未啟用,則將忽略RARC位。如果支持并啟用了重建輔助模式,則RARC表示按照SBC-4中定義處理讀操作。如果不支持重建輔助模式,RARC置為1,設備server端應以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為INVALID FIELD IN CDB。LOGICAL BLOCK ADDRESS field:
表示該命令訪問邏輯塊的起始位置。如果邏輯塊地址超出媒介容量,則設備server端應以CHECK CONDITION狀態終止,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。GROUP NUMBER field:
組號字段表示與該命令相關屬性收集到一組。GROUP NUMBER設置為0表示不收集到任何組中。TRANSFER LENGTH field:
傳輸長度字段,讀取指定連續的數據邏輯塊的數據,這些數據傳輸到data-in緩沖區中,邏輯塊起始地址以LOGICAL BLOCK ADDRESS字段指定。該字段設置為0表示沒有邏輯塊需要被讀取。非0數值表示需要被讀取的塊數量。如果邏輯塊地址加傳輸長度超過媒介容量,設備server端應以CHECK CONDITION狀態結束,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。TRANSFER LENGTH字段受VPD page中MAXIMUM TRANSFER LENGTH字段限制2.21. READ 12
OP code:0xA8h
功能以及各字段定義與READ(10)相同。
2.22. READ 16
功能描述與READ(10)相同
OP Code:0x88h
DLD2,DLD1 and DLD0 bits:
DLD(Duration limit descriptor),命令持續時間由DLD2,DLD1,DLD0限制,詳見手冊。CDLP字段描述參見SPC-5。其他字段定義如READ(10)所述。
2.23. WRITE 6
寫數據,T10 已過時,在某些產品上任然需要使用。
寫數據命令,請求設備server端從Data-Out緩沖區傳輸指定的邏輯塊并寫入。傳輸的每個邏輯塊均包含用戶數據,但不包含保護信息。每個寫入的邏輯塊包含用戶數據信息,如果媒介驅動并使能了保護信息,還應該包含保護信息。
[x21]
OP Code:0x0Ah
Cache Control bit字段對此命令不支持。具有cache訪問的直寫塊設備在WRITE(6)具有控制值,但本手冊未定義默認值。如果需要顯示控制,使用WRITE(10)命令。
LOGICAL BLOCK ADDRESS field:
見1.2.3定義TRANSFER LENGTH field:
表示需要從Data-out緩沖區中傳輸的連續的邏輯塊數據,以LOGICAL BLOCK ADDRESS field字段表示邏輯塊的起始位置。TRANSFER LENGTH field設置為0表示有256個邏輯塊需要寫入,其他任何數值表示需要寫入的邏輯塊的數量。如果LOGICAL BLOCK ADDRESS 加上TRANSFER LENGTH 超出媒介容量,設備server端應該以CHECK CONDITION狀態結束,sense key設置為ILLEGAL REQUEST,sense code設置為LOGICAL BLOCK ADDRESS OUT OF RANGE。TRANSFER LENGTH字段值受VPD page中MAXIMUM TRANSFER LENGTH字段限制。如果WRITE(6)命令在保護信息使能下,設備server端的寫每個邏輯塊的操作見手冊。2.24. WRITE 10
寫數據(10字節),功能描述與WRITE 6相同。
OP Code:0x24h
見READ(10)中對DPO bit的定義。
LOGICAL BLOCK ADDRESS field定義見1.2.8。
GROUP UNMBER field定義見SPC-5。
設備server端根據WRPOTECT字段校驗從Data-Out緩沖區傳輸保護信息。詳見手冊。
FUA[x22] bit:
2.25. WRITE 12
2.26. WRITE 16
2.27. WRITE VERIFY 10[x23]
寫校驗,請求設備server端從Data-out 緩沖區傳輸指定的邏輯塊,將其寫入到媒介中,然后驗證是否已經正確寫入。每個邏輯塊都基于WRPROTECT字段和媒介格式,其中包含用戶數據并可能包含保護信息。邏輯塊數據僅從data-out緩沖區一次傳輸到設備server端。
OP Code:0x2Eh
如果實現了錯誤驗證恢復模式,則此模式頁面中當前設置以及讀-寫錯誤恢復模式將制定驗證錯誤標準。如果這些mode pages沒有實施,則驗證標準是特定于廠商定義。
BYTCHK:參見VERIFY(10)定義
2.28. WRITE VERIFY 12
操作說明同WRITE VERIFY(10)相同
2.29. WRITE VERIFY 16
操作說明同WRITE VERIFY(10)相同。
2.30. REPORT LUNS
上報邏輯塊數量信息。請求將I_T關聯可訪問的外圍設備邏輯單元清單發送給應用server端。邏輯清單是一個列表,其中應包括具有PERIPHERAL QUALIFIER的值為0000b的所有的邏輯單元號。除000b和011b意外的PERIPHERAL QUALIFIER值得邏輯單元的邏輯單元號可以包含在邏輯單元清單中。PERIPHERAL QUALIFIER值為011b的邏輯單元號不應該包含在邏輯單元清單中。
OP code:0xA0h
SELECT REPORT field:
指定上報的邏輯單元地址類型,詳見手冊。ALLOCATION LENGTH field:
請求長度,見1.2.6。錯誤處理方式見手冊。設備server上報設備邏輯清單見手冊。
內核include/scsi_proto.h
Service response = Execute Command (IN (I_T_L_Q Nexus, CDB, Task Attribute, [Data-In Buffer Size],
[Data-Out Buffer], [Data-Out Buffer Size], [Command Reference Number], [Task Priority]),
OUT ([Data-In Buffer], [Sense Data], [Sense Data Length], Status))
通訊模型
總結
以上是生活随笔為你收集整理的SCSI 协议命令字 中文含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 振幅和差单脉冲雷达在自动测角系统中的应用
- 下一篇: C语言刷题:递归