实例操作系统无法找到附加卷
问题描述:
我一直试图找出这2天没有成功。 让我知道你是否面临类似的问题以及如何解决它。或者任何指针都会有帮助。实例操作系统无法找到附加卷
这就是我们所做的。
- 创建虚拟实例。
- 创建空白卷。
- 从快照创建卷。
- 将空白卷附加到实例。
- 将卷从快照附加到实例。
- 其他IP地址,安全组的东西。
所有这些都在单独的线程中完成,但添加了依赖关系。防爆。 4取决于2(4-> 2)。 2-> 1。 5-> 3-> 1。
的问题是,有时:
- 一个器件不会出现在设备列表中。 Openstack显示两个附件。
- 这两个设备都不出现在设备列表中。 Openstack显示两个附件。
- 两者都出现,但指定设备的磁盘已切换!防爆。我们在/ dev/vdb上附加了1GB磁盘,在/ dev/vdc上附加了10GB磁盘。但是当我们执行fdisk -l/dev/vdc时,我们得到1G,/ dev/vdb显示10G。
- 工程!!!
我检查了代码,所有组件都在做他们应该做的事情。这让我怀疑OpenStack本身! (我知道...这有点奇怪。)
我使用冰箱和RDO packstack安装allinone。
[更新1]
我使用JClouds的API附加卷。另外,我指定了设备名称(/ dev/xvdb,/ dev/xvdc)。然而,我正在通话后检查响应中的设备名称并使用它们。
NovaAPI nova = ContextBuilder
.newBuilder("openstack-nova")
.endpoint(endpoint)
.credentials(getIdentity(), getPassword())
.modules(modules).buildApi(NovaApi.class);
VolumeAttachmentApi attachment = nova.getVolumeAttachmentExtensionForZone(CONSTANT_REGION).get();
VolumeAttachment attachment.attachVolumeToServerAsDevice(volumeIdExisting, instanceId, deviceDevXVDB);
[更新2] 我创建了一个示例程序来隔离该问题。本示例程序执行以下操作:
/-> 2 -> 3 >\
1 -> -> 6 -> -> x
\-> 4 -> 5 >/
基本上主线程创建实例并启动两个线程。一个线程创建空白卷(10GB)并将其附加。另一个从快照(1GB)创建卷并将其附加。然后主线程创建IP并附加它并等待两个线程完成。
观察结果很奇怪。每一次,附加卷响应都会将空卷连接到/ dev/vdc,并将快照中的卷连接到/ dev/vdb。
但是,当我在实例检查
fdisk -l /dev/vdb
回报10GB和
fdisk -l /dev/vdc
返回1GB
什么可能我会丢失?任何指针/建议都会有帮助。
答
只是为了记录。 同时连接卷不起作用。分配给附加卷的设备名称取决于首先附加哪个设备名称。尽管我们可能会指定名称,但它可能不会被底层驱动程序所尊敬。
最后,我们没有将卷的顺序附件连接到顺序,现在一切都按预期工作。
您可以分享您用于附加卷的命令吗?你让Openstack分配设备还是你指定? – Dave 2014-08-27 13:21:26
嗨Dave,在原文中更新了您的问题答案 – 2014-08-28 10:55:03
从您所说的话,我无法发现任何明显的问题。我对jclouds并不太熟悉,但我唯一的建议是直接用nova客户端尝试它,看看问题是在操作系统中,还是在你使用的客户端库中。我在我的部署(与RDO packstack一起安装的icehouse)上尝试了同样的事情,但无法复制该问题。 – Dave 2014-08-28 20:21:39