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

来源:互联网 发布:数据库概念模式 编辑:程序博客网 时间:2024/06/04 20:45

一、故事背景

最近在处理SSD客户端case时,需要在Windows环境直接下发SCSI command来复现客户问题, 这下可为难了小编, 小编之前并未深入了解SCSI相关内容。话说,事在人为,知识啃下来就是自己的。借习大大的话就是"撸起袖子加油干"!


将研读之后的内容结合实战的经验加以整理,终成此文。 鉴于小编在这方面还不是很精通,如有不足的地方,敬请见谅!


二、SCSI概述

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 and SATA 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应该是: 

A1 06 00 00 00 00 00 00 00 E0 00 00 


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


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

从结果来看,成功咯~


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



更多精彩内容,敬请关注微公众号: 存储随笔,Memory-logger.


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 6个月婴儿便秘怎么办 一个多月宝宝两天没拉大便怎么办 7个月宝宝便秘怎么办 9个月宝宝便秘怎么办 六个月宝宝严重便秘怎么办 公司调岗员工不同意怎么办 acca注册一直在审核怎么办 ieee ap二审被拒怎么办 文章投到假期刊怎么办 论文投了假网站怎么办 网上传了虚假的怎么办? 网上做兼职被骗了钱怎么办 通过支付宝扫码被骗了怎么办 支付宝扫二维码被骗怎么办 在is上被骗了怎么办 微信兼职被骗怎么办天涯论坛 公众号不给稿费怎么办 围绕服务改善民生提出怎么办 翰墨香林苑怎么办全产权 西城高铁联名卡怎么办 英语教学系统做题时超时了怎么办 sci被要求撤稿怎么办 论文投稿后初审通过想撤稿怎么办 河南大学读写译挂了怎么办 在职mba双证硕士怎么办户口 电脑开机了出现一些英文单词怎么办 不懂法语想读法语书怎么办 大鱼号文章需要修改怎么办 过了上诉期怎么办申诉 法院判刑后被告逃亡监护人怎么办 二审判决后不服的怎么办 对树木对生物花草过敏怎么办 高一英语成绩差怎么办 文章被同时录用该怎么办 来不及开ei检索证明怎么办 淘宝生产许可编号一定要填怎么办 官网下单被砍单怎么办美卡美私 大学网络课程挂了怎么办 如果二审超过6个月还不判怎么办? sci的proof时间超了怎么办 合肥电大考试没过怎么办