SCSIコマンド
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 はディスクに対しては物理セクタゼロの位置にヘッドをシークするが、テープでは巻き戻しになる。
送受信ツール
[編集]- sg3_utils - LinuxおよびWindows 2000以降をサポート
- SCSITool - Windowsをサポート
コマンドのリスト
[編集]オペレーション・コードとその動作は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 |