SCSI - 系统工具

在SCSI系统的调试和维护中可能会使用到一些操作系统中的命令和工具,大致如下:

linux和Windows端的SCSI工具 

在Linux环境下,可以使用命令行工具"sg3_utils"来发送SCSI命令。这个工具通常可以通过Linux发行版的包管理器进行安装。例如,在Ubuntu上可以使用以下命令安装:
sudo apt-get install sg3-utils

在Windows环境下,可以使用第三方工具"sg3_utils_win32"来发送SCSI命令。这个工具可以从其官方网站下载,例如,可以从以下网址下载:

https://sourceforge.net/projects/sg3-utils-win32/
需要注意的是,这个工具只能在Windows XP和Windows Server 2003及其之前的版本上使用。对于Windows Vista及其之后的版本,可以使用PowerShell脚本来发送SCSI命令。

SCSI设备驱动

在发送SCSI命令之前,需要先安装相关的SCSI设备驱动。这些驱动程序通常由SCSI设备的制造商提供,它们与操作系统的SCSI驱动程序一起工作,使得SCSI设备可以正常地与操作系统进行通信。如果没有正确的驱动程序,发送SCSI命令可能无法生效或者会导致不可预测的行为。 需要注意的是,某些SCSI设备可能没有适用于特定操作系统版本的驱动程序。在这种情况下,可能需要升级操作系统或寻找替代设备。

SCSI的命令格式

SCSI(Small Computer System Interface)命令是一种用于与SCSI设备进行通信的标准化协议。SCSI命令的格式由多个字节的命令块组成,其中包括命令代码、参数和数据等信息。不同的SCSI命令具有不同的命令块格式,但通常具有以下格式:
Byte
0
1
2
3
4
5
6 ...
N+6
Name
Opcode
Flags
LUN
Length
Control
Data
...
Data
其中,各个字段的含义如下:
  • Opcode:命令操作码,指定要执行的操作。
  • Flags:命令标志,用于指定命令的一些属性,如是否使用DMA等。
  • LUN:逻辑单元号,用于指定要访问的SCSI设备上的逻辑单元。
  • Length:命令数据的长度。
  • Control:命令块控制字节,用于指定SCSI总线的控制信息。
  • Data:命令数据,即要传输的数据。
需要注意的是,不同的SCSI命令具有不同的命令块格式和参数,具体命令的格式和参数应该参考相应的SCSI命令规范。

SCSI设备的逻辑单元号查看

在Linux系统中,可以使用"lsscsi"命令来列出当前系统中所有的SCSI设备及其逻辑单元号。这个命令通常可以通过Linux发行版的包管理器进行安装。例如,在Ubuntu上可以使用以下命令安装:
sudo apt-get install lsscsi
安装完成后,可以使用以下命令列出所有的SCSI设备及其逻辑单元号:
lsscsi -g
在Windows系统中,可以使用设备管理器来查看所有已安装的SCSI设备及其逻辑单元号。具体方法是:
  1. 打开"设备管理器",可以通过按下"Windows键+X",然后选择"设备管理器"来打开。
  2. 在"设备管理器"中,找到"磁盘驱动器"或"磁盘卷",展开它们可以看到所有的SCSI设备及其逻辑单元号。
需要注意的是,在Windows系统中,逻辑单元号通常被称为"SCSI ID",并且其编号是从0开始的。

SCSI设备和sg设备

SCSI(Small Computer System Interface)是一种计算机总线标准,用于连接和通信不同类型的外部设备,例如硬盘、光驱和磁带机等。而sg(SCSI generic)设备是一种Linux特有的设备类型,用于向SCSI设备发送SCSI命令,并从SCSI设备接收响应。
与传统的SCSI设备不同,sg设备并不代表一个物理的SCSI设备,而是代表了一个能够向任何SCSI设备发送SCSI命令的虚拟设备。通过sg设备,可以使用Linux的标准文件I/O接口向SCSI设备发送SCSI命令,并从SCSI设备读取响应。这种方式可以使得开发人员更方便地编写与SCSI设备交互的软件。
因此,SCSI设备和sg设备的区别在于:
  • SCSI设备是指物理的SCSI设备,用于连接和通信不同类型的外部设备。
  • sg设备是一种Linux特有的设备类型,用于向SCSI设备发送SCSI命令,并从SCSI设备接收响应。sg设备并不代表一个物理的SCSI设备,而是代表了一个能够向任何SCSI设备发送SCSI命令的虚拟设备。
        在Linux系统中,sg设备是通过将物理的SCSI设备映射到一个虚拟的sg设备来实现的。具体来说,系统会为每一个SCSI设备分配一个唯一的SCSI ID(逻辑单元号),并将该SCSI ID映射到一个对应的sg设备文件。当向sg设备文件发送SCSI命令时,系统会将该命令传递给对应的SCSI设备,并从SCSI设备读取响应,并将响应返回给sg设备文件。
通常,sg设备文件的命名方式为"/dev/sgX",其中X表示sg设备的编号,从0开始递增。例如,/dev/sg0表示系统中的第一个sg设备,它对应着物理的第一个SCSI设备。
需要注意的是,由于sg设备只是一个虚拟的设备,因此不能用来访问普通的块设备或文件系统,而只能用于发送SCSI命令和接收SCSI响应。
        通常情况下,Linux系统中的块设备和文件系统是通过访问硬盘、SSD等存储设备来实现的。例如,一个文件系统可能被挂载在一个硬盘分区上,然后可以使用标准的文件I/O接口(例如open()、read()、write()等)来读写文件系统中的数据。
而sg设备则不是用于访问存储设备的,它的作用是允许用户向SCSI设备发送SCSI命令,以控制SCSI设备的行为,例如查询SCSI设备的状态、发送数据到SCSI设备、从SCSI设备读取数据等。通常情况下,这些SCSI命令不是通过标准的文件I/O接口来发送的,而是通过专门的API(例如ioctl())来发送的。因此,使用sg设备需要编写专门的代码来发送和接收SCSI命令,并且不能像访问文件系统一样使用标准的文件I/O接口。
需要注意的是,虽然sg设备不能用于访问普通的块设备或文件系统,但在某些特殊情况下,例如在处理RAID或磁带备份等任务时,可能会使用sg设备来访问存储设备。但这种情况下,访问存储设备的方式通常会是直接读取或写入硬盘块设备的原始数据,而不是通过文件系统来访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值