linux查看scsi设备id号,scsi_id查询

实现multipath最基本的一点是要确定:哪一个“/dev”项对应哪一个设备。这个问题和Linux Persistent Device Name要解决的下面两个问题如出一辙:

当内核程序查找到一个硬件设备时,它通常将这种硬件类型的下一个主设备号/从设备号对分配给这个设备。因此,在启动时,找到的

第一个SCSI设备将被分配

主设备号8,从设备号0,在/dev中的引用是/dev/sda;而第二个SCSI设备分配的主设备号是8,从设备号是1,被引用做/dev/sdb。如

果用户重新布置了SCSI拓扑结构,例如在系统中添加了一台SCSI设备,则下次及其重启时探测SCSI设备的顺序可能会发生改变,从而导致前面两个设备

分配到的次设备号和设备名也发生变化。

同样的情况会发生在支持设备热插拔的系统中,即在计算机不断电的情况下移除再添加设

备。假设系统有3个SCSI设备,sda、sdb和sdc。当热移除

sdb后,系统只剩下sda和sdc,然后在系统中热插入这个SCSI设备的时候,设备名就变成了sdd。但是在某些情况下,需要保证重新加入这个设备

后,设备名保持为sdb。

所有这些问题的本质在于,如何获得设备对应的唯一ID。同udev一样,multipath实现也使用scsi_id实用程序来确定唯一的设备ID。scsi_id通过SCSI INQUIRY vital product data(VPD)页面0x80或0x83(通过SG_IO ioctl接口直接被发送到设备的SCSI命令)查询SCSI设备,并利用返回的数据生成相对于其它支持页面0x80或0x83唯一的值。要支持scsi_id查询,存储设备必须实现这一命令。

/sbin/scsi_id -g -s /sys/block/sda

udevtest /sys/block/sda

udevinfo -a -p /sys/class/net/eth0

类似AIX上的

lsdev

lsattr  -El L2cache0

prtconf

### 回答1: SCSI_host结构体是一种用于控制SCSI设备的接口,包括以下几个成员:host_lock:用于保护该结构体的锁,避免冲突的发生;host_no:用于标识主机的编;hostt:用于指向SCSI_Host_Template结构体;shost_data:指向一个用户自定义的数据结构体,用于用户自定义信息;host_queuedata:指向一个用户自定义的数据结构体,用于控制命令队列;host_cmd_pool:指向用于存储SCSI命令的内存池;host_cmd_pool_lock:用于保护内存池的锁;host_busy:标识主机是否正在运行任务;host_done:标识主机完成了任务;host_failed:标识主机处理任务失败。 ### 回答2: SCSI(Small Computer System Interface)是一种计算机外部设备的接口标准,用于连接硬盘驱动器、光盘驱动器和磁带驱动器等。而在Linux内核中,scsi_host结构体用于管理SCSI主机适配器。下面详细解析一下scsi_host结构体的各个成员含义。 1. shost_dev:指向scsi_host结构体所代表的SCSI主机适配器对应的设备描述符dev,用于唯一标识该适配器。 2. host_no:存储SCSI主机适配器的编,用于区分不同的SCSI主机适配器。 3. shost_gendev:存储该SCSI主机适配器对应的总线设备的指针,表示SCSI总线上的一个设备。 4. transportt:指向SCSI传输层的指针,包括了与该SCSI主机适配器相关的传输函数,用于与低级设备进行通信。 5. transportt_users:表示当前正在使用该SCSI主机适配器的传输层的数量。 6. host_failed:表示SCSI主机适配器是否失效的标志位,如果该标志位为真,则该适配器被认为无法正常工作。 7. max_lun:存储该SCSI主机适配器支持的最大逻辑单元(LUN)数量。 8. max_channel:存储该SCSI主机适配器支持的最大通道数量。 9. max_cmd_len:存储该SCSI主机适配器支持的最大命令长度。 10. max_id:存储该SCSI主机适配器支持的最大设备标识符(ID)数量。 11. unique_id:存储该SCSI主机适配器的唯一标识符。 12. hostt:指向SCSI主机类型的指针,用于指定该适配器支持的主机类型。 13. hostdata:指向该SCSI主机适配器的私有数据的指针,用于存储适配器特定的数据。 14. host_lock:用于保护该SCSI主机适配器的互斥锁。 15. host_eh_prot_lock:用于保护该SCSI主机适配器的错误处理器(error handler),同时限制了对该适配器的访问。 16. host_failed_lock:用于保护用于标识SCSI主机适配器失败的标志位的互斥锁。 上述是对scsi_host结构体各个成员的简要解析,这些成员对于管理和控制SCSI主机适配器起着重要的作用。 ### 回答3: SCSI是一种计算机总线标准,用于连接计算机和外部设备,例如硬盘驱动器、磁带机等。在Linux内核中,SCSI主机(SCSI Host)结构体(scsi_host)是用于表示一个SCSI总线控制器的数据结构。下面是对scsi_host结构体各个成员含义的详细解析: 1. shost_lock:用于保护SCSI主机数据结构的自旋锁。自旋锁的作用是在访问SCSI主机数据结构时进行互斥。 2. host_busy:表示主机是否处于忙碌状态。当主机正在执行某些操作(例如初始化、重置)时,该标志会被设置为忙碌状态。 3. work_q:用于将工作项(Work Item)添加到SCSI主机的工作队列中。SCSI主机可以在后台处理这些工作项。 4. hostt_priv:指向特定于主机类型的私有数据结构。每种主机类型都可能有自己的私有数据。 5. host_attrs:表示主机支持的设备属性。它们与主机设备的功能和特性相关。 6. sg_tablesize:表示主机支持的scatter-gather表的大小。scatter-gather(SG)是一种数据传输机制,用于通过多个缓冲区传输数据。 7. this_id:表示主机的SCSI设备ID。每个SCSI设备都有一个唯一的ID。 8. max_id:表示主机支持的最大SCSI设备ID。最小的ID是0,最大的ID是max_id。 9. can_queue:表示主机支持的最大命令队列长度。该值表示主机可以同时处理的命令数量。 10. max_channel:表示主机支持的最大通道数。通道是SCSI总线上的逻辑单元,每个通道可以连接多个设备。 11. cmd_per_lun:表示每个SCSI逻辑单元(LUN)的命令队列长度。LUN是在设备上执行SCSI命令的逻辑单位。 12. max_cmd_len:表示主机支持的最大命令长度。SCSI命令的长度可以根据设备类型而不同。 13. dma_channel:表示主机使用的DMA通道。DMA(直接内存访问)是一种数据传输技术,可以无需CPU的干预而直接访问内存。 14. irq:表示主机使用的中断请求(IRQ)线。中断用于通知CPU发生了一个事件,例如数据传输完成。 15. hostdata:指向一个指针,该指针指向主机私有数据的指针。这个成员可以被主机驱动程序使用来保存和访问主机相关的数据。 总之,scsi_host结构体的各个成员含义分别表示了SCSI主机的一些基本属性,如主机类型、支持的设备属性、支持的命令队列长度和通道数量等。这些成员用于管理和控制SCSI总线上的设备以及执行SCSI命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值