SCSIコマンド

SCSIコマンド（、スカジーコマンド）とはストレージとコンピュータが通信・制御を行う際に利用されるコマンド群であるSCSIコマンドとは。

概要

コンピュータからSCSIデバイスを制御（例えばデータを記録再生、デバイス名を取得）する場合、コンピュータはSCSIコマンドをストレージに発行する。コマンド自体はパラレルSCSIの時代から存在したが、より高速なファイバーチャネル、iSCSI、SAS、シリアルATA等が開発された現在でもこれらトランスポート層上で利用されているSCSIコマンド on iSCSI。

詳細
SCSIコマンドは Command Descriptor Block (CDB)と呼ばれる形式で送受信されるSCSI CDB。合計6, 10, 12もしくは16バイトで一つのセットになる。一番初めのバイトはバイト・オペレーション・コードと呼ばれ、どのような動作命令なのかを大まかに規定する。それに続くバイトは動作の細かなパラメーターを規定する。CDBを受け取ったデバイスは送信者に対してステータスコードを返す。

SCSI標準ではコマンドを必須、オプショナル、ベンダー・ユニークの3種類に分けているコマンドの種類。SCSI標準準拠であるためには、ストレージの種類(ハードディスクドライブ、磁気テープ等)に依らず、「必須」コマンドに全て対応している必要がある。
ストレージの種類が異なればオペレーション・コードに対する実際の動作は当然異なるが、概ね似ている場合もある。例えばオペレーション・コード： 0x01 はディスクに対しては物理セクタゼロの位置にヘッドをシークするが、テープでは巻き戻しになる。

送受信ツール
sg3_utils - LinuxおよびWindows 2000以降をサポート
SCSITool - Windowsをサポート

 コマンドのリスト
オペレーション・コードとその動作はT10技術委員会で規定されているT10.org コマンドのまとめ。以下にオペレーション・コード(十六進法表現)とその時のオペレーションをリストする。詳細な動作及びパラメーターの指定はストレージベンダーから提供されるSCSI Referenceを参照する必要がある。外部リンクも参照されたい。
 コード  名称  長さ(バイト)00TEST UNIT READY601REWIND603REQUEST SENSE604FORMAT605READ BLOCK LIMITS607REASSIGN BLOCKS607INITIALIZE ELEMENT STATUS608READ(6)60AWRITE(6)60BSEEK(6)60FREAD REVERSE(6)610WRITE FILEMARKS(6)611SPACE(6)612INQUIRY613VERIFY(6)614RECOVER BUFFERED DATA615MODE SELECT(6)616RESERVE(6)617RELEASE(6)618COPY619ERASE (6)61AMODE SENSE (6)61BSTART STOP UNIT61BLOAD UNLOAD61CRECEIVE DIAGNOSTIC RESULTS61DSEND DIAGNOSTIC61EPREVENT ALLOW MEDIUM REMOVAL623READ FORMAT CAPACITIES1025READ CAPACITY(10)1028READ(10)1029READ GENERATION102AWRITE(10)102BSEEK(10)102BLOCATE(10)102CERASE(10)102DREAD UPDATED BLOCK102EWRITE AND VERIFY(10)102FVERIFY(10)1033SET LIMITS(10)1034PRE-FETCH(10)1034READ POSITION1035SYNCHRONIZE CACHE(10)1036LOCK UNLOCK CACHE(10)1037READ DEFECT DATA(10)1037INITIALIZE ELEMENT STATUS WITH RANGE1038MEDIUM SCAN1039COMPARE103ACOPY AND VERIFY103BWRITE BUFFER103CREAD BUFFER103DUPDATE BLOCK103EREAD LONG(10)103FWRITE LONG(10)1040CHANGE DEFINITION1041WRITE SAME(10)1042UNMAP1043READ TOC/PMA/ATIP1044REPORT DENSITY SUPPORT1045PLAY AUDIO(10)1046GET CONFIGURATION1047PLAY AUDIO MSF1048SANITIZE104AGET EVENT STATUS NOTIFICATION104BPAUSE/RESUME104CLOG SELECT104DLOG SENSE1050XDWRITE(10)1051XPWRITE(10)1051READ DISC INFORMATION1052XDREAD(10)1053XDWRITEREAD(10)1054SEND OPC INFORMATION1055MODE SELECT(10)1056RESERVE(10)1057RELEASE(10)1058REPAIR TRACK105AMODE SENSE(10)105BCLOSE TRACK/SESSION105CREAD BUFFER CAPACITY105DSEND CUE SHEET105EPERSISTENT RESERVE IN105FPERSISTENT RESERVE OUT107Eextended CDB＞167Fvariable length CDB可変80XDWRITE EXTENDED(16)1680WRITE FILEMARKS(16)1681READ REVERSE(16)1683Third-party Copy OUT commands1684Third-party Copy IN commands1685ATA PASS-THROUGH(16)1686ACCESS CONTROL IN1687ACCESS CONTROL OUT1688READ(16)1689COMPARE AND WRITE168AWRITE(16)168BORWRITE168CREAD ATTRIBUTE168DWRITE ATTRIBUTE168EWRITE AND VERIFY(16)168FVERIFY(16)1690PRE-FETCH(16)1691SYNCHRONIZE CACHE(16)1691SPACE(16)1692LOCK UNLOCK CACHE(16)1692LOCATE(16)1693WRITE SAME(16)1693ERASE(16)169DSERVICE ACTION BIDIRECTIONAL169ESERVICE ACTION IN(16)169FSERVICE ACTION OUT(16)16A0REPORT LUNS12A1ATA PASS-THROUGH(12)12A2 SECURITY PROTOCOL IN12A3MAINTENANCE IN12A4MAINTENANCE OUT12A4REPORT KEY12A5MOVE MEDIUM12A5PLAY AUDIO 1212A6EXCHANGE MEDIUM12A7MOVE MEDIUM ATTACHED12A8READ(12)12A9SERVICE ACTION OUT(12)12AAWRITE(12)12ABSERVICE ACTION IN(12)12ACERASE(12)12ADREAD DVD STRUCTURE12AEWRITE AND VERIFY(12)12AFVERIFY(12)12B0SEARCH DATA HIGH(12)12B1SEARCH DATA EQUAL(12)12B2SEARCH DATA LOW(12)12B3SET LIMITS(12)12B4READ ELEMENT STATUS ATTACHED12B5SECURITY PROTOCOL OUT12B6SEND VOLUME TAG12B7READ DEFECT DATA(12)12B8READ ELEMENT STATUS12B9READ CD MSF12BAREDUNDANCY GROUP (IN)12BBREDUNDANCY GROUP (OUT)12BCSPARE (IN)12BDSPARE (OUT)12BEVOLUME SET (IN)12BF VOLUME SET (OUT)12

 ステータスコード 
上記のコマンドに対してターゲットは必ずSCSI ステータスコードを返す。典型的にはGOOD(正常)、CHECK CONDITION(エラー)、BUSY(ビジー)となる。特にCHECK CONDIITONとなった場合、より詳細なエラー情報を含むSCSI Sense Keysが利用可能となる。 

 コード  名前  0x00GOOD0x02CHECK CONDITION0x04CONDITION MET0x08 BUSY0x18RESERVATION CONFLICT0x28TASK SET FULL0x30	ACA ACTIVE0x40TASK ABORTED

 脚注 

外部リンク
ハードディスク SCSI Reference
LTO SCSI  Reference
IBM 3592 SCSI  Reference

Category:SCSI