SCSIコマンド(: SCSI Command、スカジーコマンド)とはストレージコンピュータが通信・制御を行う際に利用されるコマンド群である[1]

概要 編集

コンピュータからSCSIデバイスを制御(例えばデータを記録再生、デバイス名を取得)する場合、コンピュータはSCSIコマンドをストレージに発行する。コマンド自体はパラレルSCSIの時代から存在したが、より高速なファイバーチャネルiSCSISASシリアル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

脚注 編集

外部リンク 編集