Cinder错误解决方案
很多初学者在进行OpenStack Havana 安装过程中进行设置Cinder时,进行重启服务service iscsitarget start
service open-iscsi start
经常出现 “modules iscsi_trgt not found”这样的错误,很多情况下是因为 /lib/modules/3.1.0-32-generic/kernel/iscsi文件中缺少iscsi_trgt.ko文件。所以接下来要通过以下办法来解决这个错误。
Target端的配置
下载iscsitarget
进入终端,输入#wget http://sourceforge.net/projects/iscsitarget/files/
创建iscsi_trgt.ko文件
输入#ls
,会发现在当前目录下出现 branchs tags trunks三个文件夹然后#cd trunks
进入trunks文件目录,输入 以下两条命令#sudo make
#sudo make install
查看当前目录,会发现文件中iscsi_trgt.ko已经创建。
该包会将iscsitarget需要的内核模块,用户层工具,服务启动脚本,配置文件,man手册等安装到系统中
包括:
iscsi_trgt.ko 内核模块 |
配置/etc/ietd.conf
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun 0 Path=/dev/sda1,Type=fileio
Alias lun0
大致说明:
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz 表示该ISCSI Target 的命名,命名在同一子网内应该是唯一的,标准命名方式为:
“Target “+ target名字 (格式如下: iqn.yyyy-mm.[:identifier] )
“Lun 0 Path=/dev/sda1”表示块设备号为0,映射的磁盘为/dev/sda1。
本次配置中 Type 的设定为”fileio”,我主要用来对一个磁盘进行存储共享。
当然也可以针对需要设置为: “file” or “LVM”。
除此之外还有很多其他参数可以设置,具体参考:
启动iscsitarget
/etc/init.d/iscsi-target start |
iscsi_trgt.ko复制到内核
在iscsi_trgt.ko所在文件夹中执行以下命令#mkdir /lib/modules/`uname -r`/kernel/iscsi
#find / -name “iscsi_trgt.ko”
#cp iscsi_trgt.ko /lib/modules/`uname -r`/kernel/iscsi
#depmod -aq
这样重新启动服务,就不会出现上述错误了。
inititor端配置
软件包
源码包是open-iscsi,经过rpm包封装后,名字是iscsi-initiator-utils。
安装文件
/etc/iscsi/iscsid.conf |
连接target
首先要保证iscsid守护进程启动,否测iscsiadm的一系列操作都会失败:
/etc/init.d/iscsid start
发现target:
iscsiadm -m discovery -t sendtargets -p :
默认情况下是3260,除非你有特殊的设置。
与target建立连接:
iscsiadm -m node -T -p : –login
此处target-name为上一步发现target时的获得的
此时通过fdisk -l就可以看到映射过来的磁盘,该磁盘可以像使用本地磁盘一样进行格式化,分区等操作。
可以通过以下命令实验:
fdisk /dev/sdc |
target和initiator间使用CHAP验证。
CHAP验证有两种,一种是针对discovery的,即如果不符合验证的用户名和密码,则initiator端便无法通过”-m discovery”发现指定主机上的任何一个target。
命令会返回验证失败,如下:
$ iscsiadm -m discovery -t sendtargets -p 192.168.29.224
iscsiadm: Login failed to authenticate with target
iscsiadm: discovery login to 192.168.29.224 rejected: initiator error (02/01), non-retryable, giving up
另一种是针对node login的,即果不符合验证的用户名和密码,则initiator端编无法通过–login登录指定主机上的某一个target。
命令会返回验证失败,如下:
$ iscsiadm -m discovery -t sendtargets -p 192.168.29.224 #成功discover指定主机上的target
192.168.29.224:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
$ iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -p 192.168.29.224 --login #无法通过验证,登录失败
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.29.224,3260]
iscsiadm: Could not login to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.29.224,3260]:
iscsiadm: initiator reported error (15 - already exists)
initiator端配置/etc/iscsi/iscsid.conf
添加如下选项:
# 以下三个是针对discovery的。 |
target端针对discovery配置/etc/ietd.conf
在全局参数处(定义第一个target之前),添加如下一行:
IncomingUser iqn.1994-05.com.fedora:ba72af8aaf5 1234567890ab
IncomingUser 和 OutgoingUser 表示ISCSI 客户端的用户名和密码,用户名和密码都可以为空,默认为allow权限,密码最长可为12个字符。
此处iqn.1994-05.com.fedora:ba72af8aaf5是initiator的名字(也可以是别的字符串),1234567890ab是initiator的密码,名字和密码必须和initiator上/etc/iscsi/iscsid.conf
中的用户名密码一致。如果不一致,则initiator执行”-m discovery” 是就会失败。
针对login配置/etc/ietd.conf,既然是针对login的,那么添加IncomingUser是就应该添加的指定的target上。如下:
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz |
然后重启iscsitarget
/etc/init.d/iscsi-target stop
/etc/init.d/iscsi-target start
参考文档:OpenStack Havana 安装指南