Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509129
  • 博文数量: 80
  • 博客积分: 1475
  • 博客等级: 上尉
  • 技术积分: 1047
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-01 22:58
文章分类

全部博文(80)

文章存档

2012年(3)

2010年(77)

我的朋友

分类: 服务器与存储

2010-05-04 08:30:13

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

  1. 当内核程序查找到一个硬件设备时,它通常将这种硬件类型的下一个主设备号/从设备号对分配给这个设备。因此,在启动时,找到的第一个SCSI设备将被分配主设备号8,从设备号0,在/dev中的引用是/dev/sda;而第二个SCSI设备分配的主设备号是8,从设备号是1,被引用做/dev/sdb。如果用户重新布置了SCSI拓扑结构,例如在系统中添加了一台SCSI设备,则下次及其重启时探测SCSI设备的顺序可能会发生改变,从而导致前面两个设备分配到的次设备号和设备名也发生变化。
  2. 同样的情况会发生在支持设备热插拔的系统中,即在计算机不断电的情况下移除再添加设备。假设系统有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查询,存储设备必须实现这一命令。

阅读(2052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~