前面一段时间已经完成了nova-volume从essex到folsom的升级和从nova-volume到cinder的迁移,虽然在升级过程中看上去没什么问题,但是在迁移到cinder时, 原来在essex版nova-volume下创建的卷就有问题了(folsom版下创建的卷能平稳的迁移的到cinder无任何问题),主要表现在以下几个方面:
1.实例中无法访问已经挂载的卷;
2.实例挂载的卷可以卸载,但是再挂载到某个实例的时候报错;
3.通过horizon或nova命令重启实例的时候会因为报卷方面的错误而启动失败(类似:Cannot reboot instance: cannot read header '/dev/disk/by-path/ip-10.61.2.15:3260-iscsi-iqn.2010-10.org.openstack:volume-0000002a-lun-1': Input/output error)。
问题原因
出现这些问题的根本原因是在folsom版的nova-volume和cinder中的volume采用了uuid替换了essex版中表示volume的整形id。在升级nova的时候, 基本上已经把所有的与volume id相关的内容替换成uuid了,但是仍然有两个地方被忽略了:
一是nova数据库中block_device_mapping中的connection_info字段没有更新;
二是做为volume实际存储后端的相应的lvm中的逻辑卷的命名没有更新。
在folsom版的nova-volume中这还没有什么问题,因此它会生成新旧两个版本的tgt配置文件:
[root@store3 ~]# ll /var/lib/nova/vol