明天在进行iscsi实验时,发觉同一个iscsi设备在初始化后会出现设备名称不一样的情况,该情况发生在
1.两个机器挂在同意iscsi设备,并且在每位机器上的设备名称不一致(使用相同脚本的将不可使用)
2.单个机器上假如降低了c盘,但是若果降低时iscsi未挂在(启动次序可能造成),都会出现设备名称改变
为了解决设备名称固定,可以使用udev工具,下边是转载相关资料
相同名称的设备文件在不同的系统中可能对应的是不同的c盘。以下展示了一个实例,挂载到本地服务器的设备名称都是/dev/sdd,但对应的却不是同一个iSCSIc盘。
节点1通过执行fdisk-l查看到的/dev/sdd设备文件大小情况如下:
Disk/dev/sdd:5502MB,5502926848bytes
170heads,62sectors/track,1019cylinders
Units=cylindersof10540*512=5396480bytes
节点1/dev/sdd设备文件对应的LUN大小为5502MB。
节点2通过执行fdisk-l查看到的/dev/sdd设备文件大小情况如下:
Disk/dev/sdd:1073MB,1073741824bytes
34heads,61sectors/track,1011cylinders
Units=cylindersof2074*512=1061888bytes
节点2/dev/sdd设备文件对应的LUN大小为1073MB。其实,两个节点/dev/sdd对应的并不是同一个设备。
假如在环境中使用/dev/sd*的设备文件来管理和使用储存,而相同名称的设备文件对应的iSCSIc盘却是不同的,这样才会造成操作的失败。诸如,在第一个节点将分区/dev/sdd1格式化成OCFS2挂载到某个节点,在第二个节点执行同样的挂载命令都会失败,由于第二个节点的/dev/sdd1分区和第一个节点并不是同一个分区,虽然挂载成功也不是相同的共享储存。
Linux平台为了解决这个问题,使两个节点的设备文件都能互相对应linux软件下载,须要使用udev动态设备文件管理工具。它是一个默认安装并在系统启动时最先加载的工具,使用它能配置相应的设备加载规则,udev通过定义的规则来世成相应的设备文件。在指定规则下才能使用c盘惟一标示的属性作为生成设备文件名称的一部份,才能在不同的节点保证相同名称的设备文件指向相同的iSCSIc盘。
下边举例说明udev的配置方式。
udev的配置主目录是/etc/udev,包含以下文件和目录:
qudev.conf文件。这是udev输出日志的配置文件,默认的配置是:udev_log=“err”,udev_log还可以被配置为info或debug。通常默认即可,假如更改为info或debug将有大量的日志信息被输出。
qrules.d目录。此目录是最重要的配置目录linux 查看scsi设备,上面包含的都是配置的udev加载规则,udev会依据配置的规则来世成相应的设备文件。所有的规则文件都必须以“.rules”作为扩充名。
qscripts目录。此目录保存着加载规则须要执行的脚本。
在/etc/udev/rules.d目录下创建55-openiscsi.rules规则文件,将以下内容保存到文件中:
#/etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*",BUS=="scsi",PROGRAM="/etc/udev/scripts/iscsidev.
sh%b",SYMLINK+="iscsi/%c/part%n"
以上规则的含意是:为设备名以“sd”开头、设备的总线类型为scsi的设备创建链接文件。PROGRAM参数包含的是一条命令,SYMLINK中的%c代表的是PROGRAM命令的输出结果,SYMLINK参数表示链接文件储存的位置以及文件名,链接文件储存在/dev/iscsi/
目录,文件名是part,因为所有的设备文件都储存在/dev/目录下,所以在这个设置上面没有指定/dev目录。
下边是PROGRAM手指定的iscsidev.sh脚本。
在/etc/udev/scripts目录中创建iscsidev.sh脚本,保存以下内容linux 查看scsi设备,并添加此脚本的执行权限:
#!/bin/sh
#FILE:/etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[-e/sys/class/iscsi_host]||exit1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=$(cat${file})
#Thisisnotanopen-scsidrive
if[-z"${target_name}"];then
exit1
fi
echo"${target_name##*.}"
以上脚本的含意是将表2-6中的iSCSITargetIQN的最后一个小数点以后的名称提取下来,作为udev创建链接文件的目录。因为iSCSITarget的名称是惟一的,通过这些方法能够使所有节点通过udev新创建的链接文件指向相同的iSCSIc盘。
相应的配置工作结束以后,须要重启服务器链接文件能够生成。虽然,配置udev和在生产环境中安装多路径软件的疗效是相同的,都是生成相应设备的链接文件,通过对链接文件的访问实现对设备的访问。重启服务器以后生成如下的文件结构。
节点1执行结果:
[root@rhel1iscsi]#pwd
/dev/iscsi
[root@rhel1iscsi]#tree
|--dbfile1
|`--part->../../sda
|--dbfile2
|`--part->../../sdd
|--fra1
|`--part->../../sdb
|--ocrvdisk1
|`--part->../../sdf
|--ocrvdisk2
|`--part->../../sdc
`--ocrvdisk3
`--part->../../sde
6directories,6files
节点2执行结果:
[root@rhel2iscsi]#pwd
/dev/iscsi
[root@rhel2iscsi]#tree
|--dbfile1
|`--part->../../sdf
|--dbfile2
|`--part->../../sdc
|--fra1
|`--part->../../sda
|--ocrvdisk1
|`--part->../../sde
|--ocrvdisk2
|`--part->../../sdb
`--ocrvdisk3
`--part->../../sdd
6directories,6files
里面的执行结果dbfile1、dbfile2、fra1、ocrvdisk1、ocrvdisk2、ocrvdisk3表示的是目录红联linux论坛,目录下边的part才是链接文件,链接文件对应的sd*就是链接对象。两个节点相同路径的链接文件对应的设备文件名不是完全相同的,但它们对应的共享c盘确是完全一致的,不同节点对相同链接文件的访问才能确保访问的是相同的共享储存。
链接文件是新生成的,并没有改动原有的以“sd”开头的设备文件,所以不同节点的/dev目录下以“sd”开头的设备文件仍然不能正确地对应iSCSIc盘