# SCSI command

In SCSI computer storage, computers and storage devices use a client-server model of communication. The computer is a client which requests the storage device to perform a service, e.g., to read or write data. The SCSI command architecture was originally defined for parallel SCSI buses but has been carried forward with minimal change for use with Fibre Channel, iSCSI, Serial Attached SCSI, and other transport layers.
In the SCSI protocol, the initiator sends a SCSI command information unit to the target device. Data information units may then be transferred between the computer and device. Finally, the device sends a response information unit to the computer.
SCSI commands are sent in a command descriptor block (CDB), which consists of a one byte operation code (opcode) followed by five or more bytes containing command-specific parameters. Upon receiving and processing the CDB the device will return a status code byte and other information.
The rest of this article contains a list of SCSI commands, sortable in opcode or description alphabetical order. In the published SCSI standards, commands are designated as "mandatory," "optional" or "vendor-unique." Only the mandatory commands are required of all devices. There are links to detailed descriptions for the more common SCSI commands. Some opcodes produce different, though usually comparable, effects in different device types; for example, opcode 0x01 recalibrates a disk drive by seeking back to physical sector zero, but rewinds the medium in a tape drive.

## SCSI command lengths

Originally the most significant 3 bits of a SCSI opcode specified the length of the CDB. However, when variable-length CDBs were created this correspondence was changed, and the entire opcode must be examined to determine the CDB length. The lengths are as follows:
| Opcode (hex ) | Length |
| 00h to 1Fh | 6 |
| 20h to 5Fh | 10 |
| 60h to 7Dh | reserved |
| 7Eh | variable (more than 16 bytes) |
| 7Fh | extended (variable length; may contain one or more CDBs) |
| 80h to 9Fh | 16 |
| A0h to BFh | 12 |
| C0h to FFh | vendor specific |

## List of SCSI commands

When a command is defined in multiple CDB sizes, the length of the CDB is given in parentheses after the command name, e.g., READ(6) and READ(10).
| Code | Command |
| 00 | TEST UNIT READY |
| 01 | REWIND |
| 03 | REQUEST SENSE |
| 04 | FORMAT |
| 05 | READ BLOCK LIMITS |
| 07 | REASSIGN BLOCKS |
| 07 | INITIALIZE ELEMENT STATUS |
| 08 | READ(6) |
| 0A | WRITE(6) |
| 0B | SEEK(6) |
| 0F | READ REVERSE(6) |
| 10 | WRITE FILEMARKS(6) |
| 11 | SPACE(6) |
| 12 | INQUIRY |
| 13 | VERIFY(6) |
| 14 | RECOVER BUFFERED DATA |
| 15 | MODE SELECT(6) |
| 16 | RESERVE(6) |
| 17 | RELEASE(6) |
| 18 | COPY |
| 19 | ERASE (6) |
| 1A | MODE SENSE (6) |
| 1B | START STOP UNIT |
| 1B | LOAD UNLOAD |
| 1C | RECEIVE DIAGNOSTIC RESULTS |
| 1D | SEND DIAGNOSTIC |
| 1E | PREVENT ALLOW MEDIUM REMOVAL |
| 23 | READ FORMAT CAPACITIES |
| 25 | READ CAPACITY(10) |
| 28 | READ(10) |
| 29 | READ GENERATION |
| 2A | WRITE(10) |
| 2B | SEEK(10) |
| 2B | LOCATE(10) |
| 2C | ERASE(10) |
| 2D | READ UPDATED BLOCK |
| 2E | WRITE AND VERIFY(10) |
| 2F | VERIFY(10) |
| 33 | SET LIMITS(10) |
| 34 | PRE-FETCH(10) |
| 34 | READ POSITION |
| 35 | SYNCHRONIZE CACHE(10) |
| 36 | LOCK UNLOCK CACHE(10) |
| 37 | READ DEFECT DATA(10) |
| 37 | INITIALIZE ELEMENT STATUS WITH RANGE |
| 38 | MEDIUM SCAN |
| 39 | COMPARE |
| 3A | COPY AND VERIFY |
| 3B | WRITE BUFFER |
| 3C | READ BUFFER |
| 3D | UPDATE BLOCK |
| 3E | READ LONG(10) |
| 3F | WRITE LONG(10) |
| 40 | CHANGE DEFINITION |
| 41 | WRITE SAME(10) |
| 42 | UNMAP |
| 43 | READ TOC/PMA/ATIP |
| 44 | REPORT DENSITY SUPPORT |
| 45 | PLAY AUDIO(10) |
| 46 | GET CONFIGURATION |
| 47 | PLAY AUDIO MSF |
| 48 | SANITIZE |
| 4A | GET EVENT STATUS NOTIFICATION |
| 4B | PAUSE/RESUME |
| 4C | LOG SELECT |
| 4D | LOG SENSE |
| 50 | XDWRITE(10) |
| 51 | XPWRITE(10) |
| 51 | READ DISC INFORMATION |
| 52 | XDREAD(10) |
| 53 | XDWRITEREAD(10) |
| 54 | SEND OPC INFORMATION |
| 55 | MODE SELECT(10) |
| 56 | RESERVE(10) |
| 57 | RELEASE(10) |
| 58 | REPAIR TRACK |
| 5A | MODE SENSE(10) |
| 5B | CLOSE TRACK/SESSION |
| 5C | READ BUFFER CAPACITY |
| 5D | SEND CUE SHEET |
| 5E | PERSISTENT RESERVE IN |
| 5F | PERSISTENT RESERVE OUT |
| 7E | extended CDB |
| 7F | variable length CDB |
| 80 | XDWRITE EXTENDED(16) |
| 80 | WRITE FILEMARKS(16) |
| 81 | READ REVERSE(16) |
| 83 | Third-party Copy OUT commands |
| 84 | Third-party Copy IN commands |
| 85 | ATA PASS-THROUGH(16) |
| 86 | ACCESS CONTROL IN |
| 87 | ACCESS CONTROL OUT |
| 88 | READ(16) |
| 89 | COMPARE AND WRITE |
| 8A | WRITE(16) |
| 8B | ORWRITE |
| 8C | READ ATTRIBUTE |
| 8D | WRITE ATTRIBUTE |
| 8E | WRITE AND VERIFY(16) |
| 8F | VERIFY(16) |
| 90 | PRE-FETCH(16) |
| 91 | SYNCHRONIZE CACHE(16) |
| 91 | SPACE(16) |
| 92 | LOCK UNLOCK CACHE(16) |
| 92 | LOCATE(16) |
| 93 | WRITE SAME(16) |
| 93 | ERASE(16) |
| 9D | SERVICE ACTION BIDIRECTIONAL |
| 9E | SERVICE ACTION IN(16) |
| 9F | SERVICE ACTION OUT(16) |
| A0 | REPORT LUNS |
| A1 | ATA PASS-THROUGH(12) |
| A2 | SECURITY PROTOCOL IN |
| A3 | MAINTENANCE IN |
| A4 | MAINTENANCE OUT |
| A4 | REPORT KEY |
| A5 | MOVE MEDIUM |
| A5 | PLAY AUDIO 12 |
| A6 | EXCHANGE MEDIUM |
| A7 | MOVE MEDIUM ATTACHED |
| A8 | READ(12) |
| A9 | SERVICE ACTION OUT(12) |
| AA | WRITE(12) |
| AB | SERVICE ACTION IN(12) |
| AC | ERASE(12) |
| AD | READ DVD STRUCTURE |
| AE | WRITE AND VERIFY(12) |
| AF | VERIFY(12) |
| B0 | SEARCH DATA HIGH(12) |
| B1 | SEARCH DATA EQUAL(12) |
| B2 | SEARCH DATA LOW(12) |
| B3 | SET LIMITS(12) |
| B4 | READ ELEMENT STATUS ATTACHED |
| B5 | SECURITY PROTOCOL OUT |
| B6 | SEND VOLUME TAG |
| B7 | READ DEFECT DATA(12) |
| B8 | READ ELEMENT STATUS |
| B9 | READ CD MSF |
| BA | REDUNDANCY GROUP (IN) |
| BB | REDUNDANCY GROUP (OUT) |
| BC | SPARE (IN) |
| BD | SPARE (OUT) |
| BE | VOLUME SET (IN) |
| BF | VOLUME SET (OUT) |