The Linux SCSI Generic (sg) Driver(使用说明)

来源:互联网 发布:如何查看淘宝店铺等级 编辑:程序博客网 时间:2024/05/22 09:03

在工作中,由于要对写的代码进行测试,主要需要判断数据包返回值的正确性。测试命令如:SES,SPC,SSP,SMP中涉及到的命令。觉得上面的网址挺好的,现在就来看看,整理整理,以备后用。下面主要针对sg上面的三个命令集进行说明。

1:Utilities: sg3_utils and sg_utils

The sg3_utils package contains utilities that send SCSI commands to devices.
SCSI command sets are divided into a common setandseveral device class specific sets.

The common set of commands is referred to as theSCSI Primary Commands (SPC) with SPC-3 being the most recent standard. The mandatory SCSI INQUIRY command is defined in SPC-3.

The SCSI Block Commands (SBC) cover direct access devices such as disks.

The MultiMedia Commands (MMC) cover CD, DVD and BD drives and the media within them.
In the Linux kernel (lk) 2.4 series most of these utilities must be used with a SCSI generic (sg) driver device name (e.g./dev/sg0). In the lk 2.6 series almost all of these utilities can be used withthe primary device names as well (e.g./dev/sda, /dev/scd0, /dev/st0 and/dev/hdd (if it is an ATAPI device)). From lk 2.6.28 bsg devices can also be used (e.g./dev/bsg/3:0:0:0 ).

 

Utility name

Main SCSI commands
invoked

Notes

sginfo
[legacy, use sdparm]

MODE SENSE/SELECT, READ DEFECT

symbolic decoding (optional changing) of mode pages. Can also output (disk) defect lists. Port of olderscsiinfo utility.

sgm_dd

READ, WRITE

sg_dd variant that uses memory mapped IO (only on Linux sg devices)

sgp_dd

READ, WRITE

sg_dd variant that uses POSIX threads

sg_dd

READ, WRITE

Unix dd command variant, uses SG_IO ioctl to send SCSI commands to copy data. See thesg_dd page. Newerddpt utility adds features and is ported to "f,s,w"

sg_decode_sense

decodes sense data given as a string of hexadecimal bytes or in binary

sg_emc_trespass

MODE SELECT

utility specialized for EMC Clariion series

sg_format

FORMAT

format or resize a SCSI disk

sg_get_config

GET CONFIGURATION

fetch features and profiles of a cd/dvd drive and/or its current media

sg_get_lba_status

GET LBA STATUS

logical block provisioning support

sg_ident

REPORT/SET IDENTIFYING INFORMATION

default is to report (fetch) the device identifier. With the '--set' option a new identifier is sent to the device.

sg_inq

INQUIRY

fetch standard response, VPD pages or version descriptors. Also can perform IDENTIFY (PACKET) DEVICE ATA command. VPD page decoding also performed by sg_vpd and sdparm.

sg_logs

LOG SENSE

fetch log sense pages, decode standard and some vendor pages

sg_luns

REPORT LUNS

fetch luns reported by a device (lun 0 or "well known lu")

sg_map

INQUIRY

shows mapping between sg devices and primary device node (if any). In lk 2.6 seelsscsi .

sg_map26

maps between single Linux sg device and primary device node (and vice versa). Also does mapping in to, and out of, sysfs. For the Linux 2.6 series.

sg_modes

MODE SENSE

fetch mode pages (output mainly in hex, to decode output use sdparm)

sg_opcodes

REPORT SUPPORTED OPERATION CODES

fetch supported SCSI commands or supported task management functions

sg_persist

PERSISTENT RESERVE IN/OUT

control persistent reservations and report reservation status

sg_prevent

PREVENT ALLOW MEDIUM REMOVAL

control media removal, mainly for those SCSI devices which have removable media (e.g. CD/DVD and tape drives)

sg_raw

<user specified>

send user supplied cdb

sg_rbuf

READ BUFFER

read from SCSI device cache. Typically for testing the SCSI transport (for throughput or errors)

sg_rdac

MODE SENSE/SELECT

display or modify RDAC redundant controller mode page

sg_read

READ

read continually from same offset. Syntax similar to sg_dd (without write side). Can test SCSI device cache and transport performance.

sg_readcap

READ CAPACITY

fetch the number of blocks and the individual block size for disks and CD/DVD media

sg_read_buffer

READ BUFFER

read descriptors or data

sg_read_long

READ LONG

read data from given LBA which includes the block and ECC data.

sg_reassign

REASSIGN BLOCKS

reassign a LBA from one sector on a disk (typically damaged) to a new (spare) sector. User data copied if it is recoverable.

sg_referrals

REPORT REFERRALS

report data segment accessibility from target port groups

sg_requests

REQUEST SENSE

fetch sense data from the given device. Modern uses include getting a progress indication (e.g. during a format) or finding the power condition state.

sg_reset

-

Issue a driver, (SCSI) bus or device (target or lun?) reset.

sg_rmsn

READ MEDIA SERIAL NUMBER

Relatively new command added to SPC-3. Format of response is vendor specific so this utility outputs it in hex (default) or binary.

sg_rtpg

REPORT TARGET PORT GROUPS

Specialized for multi-ported SCSI devices where one port (or a group of them) is preferred for IO over another (or others).

sg_safte

READ BUFFER

fetch information from a SAF-TE processor

sg_sanitize

SANITIZE

Send SCSI SANITIZE command

sg_sat_identify

ATA PASS-THROUGH

Send ATA IDENTIFY DEVICE or IDENTIFY PACKET DEVICE commands via the SAT ATA PASS-THROUGH (16 or 12) SCSI command.

sg_sat_phy_event

ATA PASS-THROUGH

Sends an ATA READ LOG EXT command via a SAT to fetch log page 11h which contains SATA phy event counters.

sg_sat_set_features

ATA PASS_THROUGH

Sends ATA SET FEATURES command via SAT

sg_scan
[.c.linux]

[INQUIRY]

maps each sg device name to the corresponding numeric <host, channel, target, lun> tuple. In lk 2.6 series the "lsscsi -g" command is similar.

sg_scan
[.c.win32]

[INQUIRY]

shows one device per line, with the device's various names and INQUIRY response string on that line.

sg_senddiag

SEND DIAGNOSTIC

Issues either a default self test or a short/extended foreground/background self test. With no arguments it uses RECEIVE DIAGNOSTIC RESULTS to list all supported diagnostic pages.

sg_ses

SEND/RECEIVE DIAGNOSTIC

Fetches status diagnostic pages from, and sends some control pages to, a SCSI Enclosure Services (SES) device. See thesg_ses page.

sg_start

START STOP UNIT

Controls the power condition state of a SCSI device. Primary use is to spin up and down SCSI disks. Can also load and eject removable media.

sg_stpg

SET TARGET PORT GROUPS

Specialized for multi-ported SCSI devices where one port (or a group of them) is preferred for IO over another (or others).

sg_sync

SYNCHRONIZE CACHE

Causes disk caches to be flushed to media

sg_test_rwbuf

READ/WRITE BUFFER

Random pattern written to SCSI device buffer then read back and checked. Used in testing for data corruption.

sg_turs

TEST UNIT READY

Issue one or more Test Unit Ready commands. Can be used to time SCSI command overhead.

sg_unmap

UNMAP

logical block provisioning support ("Trim" in the ATA world)

sg_verify

VERIFY

reads indicated blocks on a SCSI disks, stops on the first error found. Does not yield any data. Useful for media scans.

sg_vpd

INQUIRY

Decodes standard and some vendor Vital Product Data (VPD) pages.

sg_write_buffer

WRITE BUFFER

write data; can be used to download firmware

sg_write_long

WRITE LONG

writes to a LBA, data which includes the block and ECC data. Suitable data typically fetched by prior sg_read_long utility.

sg_write_same

WRITE SAME

writes a single block to one or more (consecutive) LBAs. Also supports some logical block provisioning options.

sg_wr_mode

MODE SELECT

writes mode pages supplied in ASCII hex (e.g. from "sg_modes -r") to the SCSI device. Seesdparm for another method of setting mode page parameters.

上面表格中的的命令,是对SPC中定义的命令的实现。

可以在sg上面下载源码包,自己编译安装。'./configure ; make ; make install' 就可以将编译好的sg命令安装到/usr/local/bin/目录中。

[root@centos /usr/local/bin]$ls
sg_dd              sginfo    sg_modes    sg_rdac               sg_referrals  sg_sat_identify      sg_stpg        sg_write_buffer
sg_decode_sense    sg_inq    sg_opcodes  sg_read               sg_requests   sg_sat_phy_event     sg_sync        sg_write_long
sg_emc_trespass    sg_logs   sgp_dd      sg_read_block_limits  sg_reset      sg_sat_set_features  sg_test_rwbuf  sg_write_same sg_format          sg_luns   sg_persist  sg_read_buffer        sg_rmsn       sg_scan              sg_turs        sg_wr_mode sg_get_config      sg_map    sg_prevent  sg_readcap            sg_rtpg       sg_senddiag          sg_unmap
sg_get_lba_status  sg_map26  sg_raw      sg_read_long          sg_safte      sg_ses               sg_verify
sg_ident           sgm_dd    sg_rbuf     sg_reassign           sg_sanitize   sg_start             sg_vpd

下面举几个例子(命令式在虚拟机上面执行的)

 [root@centos /usr/local/bin]$sg_inq /dev/sda //时间inquiry命令查询target的信息
standard INQUIRY: //标准inquiry的输出数据
PQual=0 Device_type=0 RMB=0 version=0x02 [SCSI-2]
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=0 Resp_data_format=2
SCCS=0 ACC=0 TPGS=0 3PC=0 Protect=0 BQue=0
EncServ=0 MultiP=0 [MChngr=0] [ACKREQQ=0] Addr16=0
[RelAdr=0] WBus16=1 Sync=1 Linked=0 [TranDis=0] CmdQue=1
length=36 (0x24) Peripheral device type: disk
Vendor identification: VMware,
Product identification: VMware Virtual S
Product revision level: 1.0 

 [root@centos /usr/local/bin]$sg_scan
/dev/sg0: scsi0 channel=0 id=0 lun=0
/dev/sg1: scsi0 channel=0 id=1 lun=0
/dev/sg2: scsi0 channel=0 id=2 lun=0 

2:smp_utils

The smp_utils package contains utilities for the Serial Attached SCSI (SAS) Serial  Management Protocol (SMP). Most utilities correspond to a single SMP function, sending out a request, checking for errors and if all is well processing the response. The response is either decoded, printed out in ASCII hexadecimal or sent as binary to stdout.
At the lower levels SAS is a point to point interconnect (like SATA).SAS has devices called expanders which have a similar role to switches in the Fibre Channel protocol and the Ethernet.The primary role of SMP is to monitor and control SAS expanders. Most SAS Host Bus Adapters (HBAs) contain a SMP initiator through which SMP requests are sent and responses received. SAS expanders contain SMP targets that respond to SMP requests. SAS disks do not normally contains SMP targets and SATA disks do not contain SMP targets.SAS has two other protocols: SSP for transporting SCSI command sets to SAS devices(e.g. SAS disks and tape drives) , and STP for tunnelling the ATA command set to a SAS expander.

SMP is a request response protocol with each request and response limited currently to 1028 bytes in length (including a 4 byte CRC at the end of each request and response).

Each expander phy has a routing attribute. There are three routing attributes: direct, subtractive and table. Direct routing is the simplest and is all that is required if a single expander interconnects SAS end devices (e.g. SAS initiators (HBAs) and SAS targets (including SAS disks, tapes and SES devices)).Such an interconnect is termed in SAS as a "Service Delivery Subsystem" (SDS) while other transports might term this as a "fabric".

 The utilities in the smp_utils packagesend requests to what the standard terms as a SMP target. A SMP target is not a SCSI device so SCSI commands like INQUIRY cannot be sent to a SMP target. Hence utilities such as those in the sg3_utils package cannot be used on a SMP target.
A SAS expander will contain one SMP target with the SAS address of the expander.Some SAS host bus adapters (HBAs) have a (hidden) SMP target. Typically SAS end devices such as disk drives (both SAS and SATA) and tape drives do not contain a SMP target.

编译完之后,linux上面的smp如下:

[root@centos /usr/local/bin]$smp
smp_conf_general        smp_discover_list       smp_rep_broadcast       smp_rep_phy_sata        smp_zoned_broadcast
smp_conf_phy_event      smpdump                 smp_rep_exp_route_tbl   smp_rep_route_info      smp_zone_lock
smp_conf_route_info     smp_ena_dis_zoning      smp_rep_general         smp_rep_self_conf_stat  smp_zone_unlock
smp_conf_zone_man_pass  smp_phy_control         smp_rep_manufacturer    smp_rep_zone_man_pass  
smp_conf_zone_perm_tbl  smp_phy_test            smp_rep_phy_err_log     smp_rep_zone_perm_tbl  
smp_conf_zone_phy_info  smpquery                smp_rep_phy_event       smp_write_gpio         
smp_discover            smp_read_gpio           smp_rep_phy_event_list  smp_zone_activate 

对上面的命令的解释可以参考SPL中的9.4 Management application layer

smp_utils很重要,但是我现在的条件,不能实际的测试smp_utils中的命令,如果以后有机会肯定会把smp_utils中的命令执行一遍,看看结果,思考思考expander在整个系统的功能。

3:Scsi_ses 

SCSI Enclosure Services (SES) permit themanagement and sensethe state ofpower supplies, cooling devices, displays, indicators, individual drives, and other non-SCSI elements installed in an enclosure. The scsi_ses adapter driver simulates a SES device. The default action is to appear as a disk (actually an 8 MB ramdisk) with associated Enclosure Services. This is similar to a fibre channel disk with a SCA-2 connector which includes an Enclosure Services Interface (ESI). Alternatively this driver can simulate a simple SES device.

Supported SES Diagnostic pages

A SES (and SES-2 draft) application client communicates with a SES device via diagnostic pages.Status diagnostic pages are fetched from a SES device with the RECEIVE DIAGNOSTIC RESULTS SCSI command.Control diagnostic pages are sent to a SES device with the SCSI SEND DIAGNOSTIC SCSI command.

 The supported status diagnostic pages are: //状态 page code

  • List supported diagnostic pages [0x0]
  • Configuration [0x1]
  • Enclosure status [0x2]
  • Help text [0x3]
  • String In [0x4]
  • Threshold In [0x5]
  • Element descriptor [0x7]
  • Enclosure busy [0x9]

The supported control diagnostic pages are: //控制page code

  • Enclosure control [0x2]
  • String Out [0x4]
  • Threshold Out [0x5] 

上面说的很清楚通过send diagnostic和receive diagnostic来控制或获取enclosure中的elements的信息。

上面涉及到的sg命令,以后有机会我会统统的执行一遍。

原创粉丝点击