SCSIコマンド(英: SCSI Command、スカジーコマンド)とはストレージとコンピュータが通信・制御を行う際に利用されるコマンド群である[1]。
概要
コンピュータからSCSIデバイスを制御(例えばデータを記録再生、デバイス名を取得)する場合、コンピュータはSCSIコマンドをストレージに発行する。コマンド自体はパラレルSCSIの時代から存在したが、より高速なファイバーチャネル、iSCSI、SAS、シリアルATA等が開発された現在でもこれらトランスポート層上で利用されている[2]。
詳細
SCSIコマンドは Command Descriptor Block (CDB)と呼ばれる形式で送受信される[3]。合計6, 10, 12もしくは16バイトで一つのセットになる。一番初めのバイトはバイト・オペレーション・コードと呼ばれ、どのような動作命令なのかを大まかに規定する。それに続くバイトは動作の細かなパラメーターを規定する。CDBを受け取ったデバイスは送信者に対してステータスコードを返す。
SCSI標準ではコマンドを必須、オプショナル、ベンダー・ユニークの3種類に分けている[4]。SCSI標準準拠であるためには、ストレージの種類(ハードディスクドライブ、磁気テープ等)に依らず、「必須」コマンドに全て対応している必要がある。
ストレージの種類が異なればオペレーション・コードに対する実際の動作は当然異なるが、概ね似ている場合もある。例えばオペレーション・コード: 0x01 はディスクに対しては物理セクタゼロの位置にヘッドをシークするが、テープでは巻き戻しになる。
送受信ツール
コマンドのリスト
オペレーション・コードとその動作はT10技術委員会で規定されている[5]。以下にオペレーション・コード(十六進法表現)とその時のオペレーションをリストする。詳細な動作及びパラメーターの指定はストレージベンダーから提供されるSCSI Referenceを参照する必要がある。外部リンクも参照されたい。
コード |
名称 |
長さ(バイト)
|
00 |
TEST UNIT READY |
6
|
01 |
REWIND |
6
|
03 |
REQUEST SENSE |
6
|
04 |
FORMAT |
6
|
05 |
READ BLOCK LIMITS |
6
|
07 |
REASSIGN BLOCKS |
6
|
07 |
INITIALIZE ELEMENT STATUS |
6
|
08 |
READ(6) |
6
|
0A |
WRITE(6) |
6
|
0B |
SEEK(6) |
6
|
0F |
READ REVERSE(6) |
6
|
10 |
WRITE FILEMARKS(6) |
6
|
11 |
SPACE(6) |
6
|
12 |
INQUIRY |
6
|
13 |
VERIFY(6) |
6
|
14 |
RECOVER BUFFERED DATA |
6
|
15 |
MODE SELECT(6) |
6
|
16 |
RESERVE(6) |
6
|
17 |
RELEASE(6) |
6
|
18 |
COPY |
6
|
19 |
ERASE (6) |
6
|
1A |
MODE SENSE (6) |
6
|
1B |
START STOP UNIT |
6
|
1B |
LOAD UNLOAD |
6
|
1C |
RECEIVE DIAGNOSTIC RESULTS |
6
|
1D |
SEND DIAGNOSTIC |
6
|
1E |
PREVENT ALLOW MEDIUM REMOVAL |
6
|
23 |
READ FORMAT CAPACITIES |
10
|
25 |
READ CAPACITY(10) |
10
|
28 |
READ(10) |
10
|
29 |
READ GENERATION |
10
|
2A |
WRITE(10) |
10
|
2B |
SEEK(10) |
10
|
2B |
LOCATE(10) |
10
|
2C |
ERASE(10) |
10
|
2D |
READ UPDATED BLOCK |
10
|
2E |
WRITE AND VERIFY(10) |
10
|
2F |
VERIFY(10) |
10
|
33 |
SET LIMITS(10) |
10
|
34 |
PRE-FETCH(10) |
10
|
34 |
READ POSITION |
10
|
35 |
SYNCHRONIZE CACHE(10) |
10
|
36 |
LOCK UNLOCK CACHE(10) |
10
|
37 |
READ DEFECT DATA(10) |
10
|
37 |
INITIALIZE ELEMENT STATUS WITH RANGE |
10
|
38 |
MEDIUM SCAN |
10
|
39 |
COMPARE |
10
|
3A |
COPY AND VERIFY |
10
|
3B |
WRITE BUFFER |
10
|
3C |
READ BUFFER |
10
|
3D |
UPDATE BLOCK |
10
|
3E |
READ LONG(10) |
10
|
3F |
WRITE LONG(10) |
10
|
40 |
CHANGE DEFINITION |
10
|
41 |
WRITE SAME(10) |
10
|
42 |
UNMAP |
10
|
43 |
READ TOC/PMA/ATIP |
10
|
44 |
REPORT DENSITY SUPPORT |
10
|
45 |
PLAY AUDIO(10) |
10
|
46 |
GET CONFIGURATION |
10
|
47 |
PLAY AUDIO MSF |
10
|
48 |
SANITIZE |
10
|
4A |
GET EVENT STATUS NOTIFICATION |
10
|
4B |
PAUSE/RESUME |
10
|
4C |
LOG SELECT |
10
|
4D |
LOG SENSE |
10
|
50 |
XDWRITE(10) |
10
|
51 |
XPWRITE(10) |
10
|
51 |
READ DISC INFORMATION |
10
|
52 |
XDREAD(10) |
10
|
53 |
XDWRITEREAD(10) |
10
|
54 |
SEND OPC INFORMATION |
10
|
55 |
MODE SELECT(10) |
10
|
56 |
RESERVE(10) |
10
|
57 |
RELEASE(10) |
10
|
58 |
REPAIR TRACK |
10
|
5A |
MODE SENSE(10) |
10
|
5B |
CLOSE TRACK/SESSION |
10
|
5C |
READ BUFFER CAPACITY |
10
|
5D |
SEND CUE SHEET |
10
|
5E |
PERSISTENT RESERVE IN |
10
|
5F |
PERSISTENT RESERVE OUT |
10
|
7E |
extended CDB |
>16
|
7F |
variable length CDB |
可変
|
80 |
XDWRITE EXTENDED(16) |
16
|
80 |
WRITE FILEMARKS(16) |
16
|
81 |
READ REVERSE(16) |
16
|
83 |
Third-party Copy OUT commands |
16
|
84 |
Third-party Copy IN commands |
16
|
85 |
ATA PASS-THROUGH(16) |
16
|
86 |
ACCESS CONTROL IN |
16
|
87 |
ACCESS CONTROL OUT |
16
|
88 |
READ(16) |
16
|
89 |
COMPARE AND WRITE |
16
|
8A |
WRITE(16) |
16
|
8B |
ORWRITE |
16
|
8C |
READ ATTRIBUTE |
16
|
8D |
WRITE ATTRIBUTE |
16
|
8E |
WRITE AND VERIFY(16) |
16
|
8F |
VERIFY(16) |
16
|
90 |
PRE-FETCH(16) |
16
|
91 |
SYNCHRONIZE CACHE(16) |
16
|
91 |
SPACE(16) |
16
|
92 |
LOCK UNLOCK CACHE(16) |
16
|
92 |
LOCATE(16) |
16
|
93 |
WRITE SAME(16) |
16
|
93 |
ERASE(16) |
16
|
9D |
SERVICE ACTION BIDIRECTIONAL |
16
|
9E |
SERVICE ACTION IN(16) |
16
|
9F |
SERVICE ACTION OUT(16) |
16
|
A0 |
REPORT LUNS |
12
|
A1 |
ATA PASS-THROUGH(12) |
12
|
A2 |
SECURITY PROTOCOL IN |
12
|
A3 |
MAINTENANCE IN |
12
|
A4 |
MAINTENANCE OUT |
12
|
A4 |
REPORT KEY |
12
|
A5 |
MOVE MEDIUM |
12
|
A5 |
PLAY AUDIO 12 |
12
|
A6 |
EXCHANGE MEDIUM |
12
|
A7 |
MOVE MEDIUM ATTACHED |
12
|
A8 |
READ(12) |
12
|
A9 |
SERVICE ACTION OUT(12) |
12
|
AA |
WRITE(12) |
12
|
AB |
SERVICE ACTION IN(12) |
12
|
AC |
ERASE(12) |
12
|
AD |
READ DVD STRUCTURE |
12
|
AE |
WRITE AND VERIFY(12) |
12
|
AF |
VERIFY(12) |
12
|
B0 |
SEARCH DATA HIGH(12) |
12
|
B1 |
SEARCH DATA EQUAL(12) |
12
|
B2 |
SEARCH DATA LOW(12) |
12
|
B3 |
SET LIMITS(12) |
12
|
B4 |
READ ELEMENT STATUS ATTACHED |
12
|
B5 |
SECURITY PROTOCOL OUT |
12
|
B6 |
SEND VOLUME TAG |
12
|
B7 |
READ DEFECT DATA(12) |
12
|
B8 |
READ ELEMENT STATUS |
12
|
B9 |
READ CD MSF |
12
|
BA |
REDUNDANCY GROUP (IN) |
12
|
BB |
REDUNDANCY GROUP (OUT) |
12
|
BC |
SPARE (IN) |
12
|
BD |
SPARE (OUT) |
12
|
BE |
VOLUME SET (IN) |
12
|
BF |
VOLUME SET (OUT) |
12
|
ステータスコード
上記のコマンドに対してターゲットは必ずSCSI ステータスコードを返す。典型的にはGOOD(正常)、CHECK CONDITION(エラー)、BUSY(ビジー)となる。特にCHECK CONDIITONとなった場合、より詳細なエラー情報を含むSCSI Sense Keysが利用可能となる。
コード |
名前
|
0x00 |
GOOD
|
0x02 |
CHECK CONDITION
|
0x04 |
CONDITION MET
|
0x08 |
BUSY
|
0x18 |
RESERVATION CONFLICT
|
0x28 |
TASK SET FULL
|
0x30 |
ACA ACTIVE
|
0x40 |
TASK ABORTED
|
脚注
外部リンク