【实战经验分享】如何对SSD固态硬盘下发SCSI command?

简介: 目前可以供用来下发SCSI/ATA Command的工具有很多,比如BusHound, Hdparm, Sg3, Msecli等。其中Msecli是Micron自己的专门用来管理Micron SSD的命令行接口, 对于其他家的SSD是无效的。我们这里主要用的Sg3这个工具

SCSI的英文全称是Small Computer System Interface, 翻译过来就是“小型计算机系统接口”,是一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。


这篇文章重点讲述计算机与硬盘之间的交互, 以小编的电脑为例,

电脑上配备了一块BIWIN SATA SSD + 一块机械硬盘, 查看这两块硬盘的接口标准皆为SCSI.


除了SCSI,IDE(英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”)也是一种极为常用的接口。这里不多讲IDE,主要说一下IDE与SCSI的区别:

  1. IDE的工作方式需要CPU的全程参与,CPU读写数据的时候不能再进行其他操作,这种情况在Windows多任务操作系统中,自然就会导致系统反应的大大减慢。
  2. 由于SCSI卡本身带有CPU,可处理一切SCSI设备的事务,在工作时主机CPU只要向SCSI卡发出工作指令,SCSI卡就会自己进行工作,工作结束后返回工作结果给CPU,在整个过程中,CPU均可以进行自身工作,完全通过独立的高速的SCSI卡来控制数据的读写操作,CPU就不必浪费时间进行等待,显然可以提高系统的整体性能。


SCSI/ATA command的下发方式

目前可以供用来下发SCSI/ATA Command的工具有很多,比如BusHound, Hdparm, Sg3, Msecli等。其中Msecli是Micron自己的专门用来管理Micron SSD的命令行接口, 对于其他家的SSD是无效的。我们这里主要用的Sg3这个工具,


愣~~~,sg3是啥?

不急,来,先看看sg3官网咋说的:


''The sg3_utils package contains utilities that send SCSI commands to devices.As well as devices on transports traditionally associated with SCSI (e.g. Fibre Channel (FCP), Serial Attached SCSI (SAS) and the SCSI Parallel Interface(SPI)) many other devices use SCSI command sets. ATAPI cd/dvd drives andSATA disks that connect via a translation layer or a bridge device are examples of devices that use SCSI command sets.

''

按照sg3官网的说法, sg3可以对SATA盘通过两种方式直接下发SCSI Command:

  1. 直接用电脑SATA接口;
  2. 用SATA转USB接口也可以;


不管黑猫白猫,能逮住老鼠就是好猫! 找到了可以为我们所用的工具,我们就开工,


打开sg3工具包你会发现好多.exe执行档啊~用哪个啊~啊~啊~抓狂~~~


其实sg3已经定义了大部分的SCSI command,只要按照说明直接执行就可以。可惜的是,小编本次在处理case时需要用的SCSI command并没有集成,所以在后续的过程中小编只用到两个执行档, sg_scan.exe和sg_raw.exe,


对这两个执行档,sg3官网的解释是:

sg_scan.exe:shows one device per line, with the device's various names and INQUIRY response string on that line. 简单的说就去扫一下系统当下几块硬盘。

看到上图扫描的结果是发现三块盘,对的,没错,鉴于前面提到的一块BIWIN SATA SSD + 一块机械硬盘里面存有重要资料,为了保险起见,就不用来做实验了,小编另外用SATA转USB转板接了一块Tigo SSD, 哈哈,对,这块盘将用来做后续的实验,


sg_raw.exe:send user supplied cdb. 意思就是说要用户自己定义SCSI command的CDB。


那么,问题来了,CDB又是什么东东?

没关系,SCSI Spec是这样说的:

CDB用中文可以很直白的翻译就是命令描述块,简单的来说就是供用户自己定义下发SCSI command的内容。


按照SPEC里的定义,CDB的长度主要有三类: 6字节,10字节,12字节以及16字节。


后续我们的实例主要采用12字节的方式,具体定义如下:


上面12-byte command定义里面最关键的是找到OPERATION CODE,因为我们是采用自定义的方式下发SCSI command,所以,我们这里采用的ATA PASS-THROUGH(12字节),其对应的OPERATION CODE是A1h,


SCSI spec对ATA PASS-THROUGH(12字节)的定义如下:


上图里面protocol的具体定义分类:



好了,到这里我们应该就知道大概怎么下发SCSI command了,古人有云“纸上得来终觉浅,绝知此事要躬行”。我们下面还是结合具体的SCSI/ATA command来检验一下我们的认知。


比如,我们要在Windows环境下发standby immediate command,

这个时候,还得先看一下ATA spec对standby immediate command的定义,

从上图里面我们可以得到两个重要信息:

  1. standby immediate command的代码是0xE0,
  2. standby immediate command的protocol是Non-Data,


结合前面的理论,我们下发standby immediate command的具体12-byte应该是:

A10600 00 00 00 00 00 00E000 00


到这里就是,万事俱备,只欠东风咯~


我们现在用sg3工具包执行一下,看看是否可以成功哈~

从结果来看,成功咯~


希望此文可以带给大家些许的帮助,感兴趣的朋友可以自己玩一下~~~

相关文章
|
算法 固态存储 关系型数据库
|
固态存储 内存技术
SCSI命令下发方式<续>:对NVMe硬盘如何实现SCSI命令转换?
我们前面有对SATA硬盘下发SCSI命令,其实对NVMe硬盘下发SCSI的方式大同小异。下面我们就来试一下,这里我们用到的SCSI命令是READ CAPACITY。
|
固态存储 测试技术 BI
基于TMS320C6657+ZYNQ7035/45平台-PL端 NVMe 的 exFAT 文件系统 FPGA IP
基于广州星嵌电子科技有限公司TMS320C6657+ZYNQ7035/45评估板的PL端实现标准NVMe 1.3协议的Host端,即纯逻辑实现NVMe Host IP设计分享。
基于TMS320C6657+ZYNQ7035/45平台-PL端 NVMe 的 exFAT 文件系统 FPGA IP
|
存储 运维 资源调度
百度使用自主研发系统工具hdoctor 使SATA盘返修率低于SAS盘
据了解,百度近三年来一直使用其主导研发的系统工具hdoctor。该创新工具的应用,使SATA 硬盘的故障返修率低于比其成本及可靠性更高的SAS硬盘,有效地解决了在大数据时代,大规模大容量SATA硬盘应用背景下的高故障率、低运维效率和存储成本控制等难题,并对大幅降低云存储购置成本奠定坚实基础。
202 0
|
存储 固态存储 虚拟化
新一代服务器预览:M.2 SSD系统盘RAID1方案
Xeon Processor Scalable服务器上的“BOSS”是啥?
3314 0
|
存储 开发工具 IDE
存储基础:ATA、SATA、SCSI、SAS、FC
一、概述 关于存储,作为一名运维工程师我觉得是很有必要去花点时间去了解一下的!磁盘是服务器、存储设备的主要存储媒介之一,非常重要! 按照存储介质类型一般分为机械磁盘(HDD、传统磁性硬盘)、固态磁盘(SSD,主要使用闪存颗粒来存储)、混合磁盘(HHD,磁性硬盘和闪存集成到一起的硬盘)。
2248 0
|
存储 供应链 数据安全/隐私保护