实例操作系统无法找到附加卷

问题描述:

我一直试图找出这2天没有成功。 让我知道你是否面临类似的问题以及如何解决它。或者任何指针都会有帮助。实例操作系统无法找到附加卷

这就是我们所做的。

  1. 创建虚拟实例。
  2. 创建空白卷。
  3. 从快照创建卷。
  4. 将空白卷附加到实例。
  5. 将卷从快照附加到实例。
  6. 其他IP地址,安全组的东西。

所有这些都在单独的线程中完成,但添加了依赖关系。防爆。 4取决于2(4-> 2)。 2-> 1。 5-> 3-> 1。

的问题是,有时:

  1. 一个器件不会出现在设备列表中。 Openstack显示两个附件。
  2. 这两个设备都不出现在设备列表中。 Openstack显示两个附件。
  3. 两者都出现,但指定设备的磁盘已切换!防爆。我们在/ dev/vdb上附加了1GB磁盘,在/ dev/vdc上附加了10GB磁盘。但是当我们执行fdisk -l/dev/vdc时,我们得到1G,/ dev/vdb显示10G。
  4. 工程!!!

我检查了代码,所有组件都在做他们应该做的事情。这让我怀疑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

什么可能我会丢失?任何指针/建议都会有帮助。

+0

您可以分享您用于附加卷的命令吗?你让Openstack分配设备还是你指定? – Dave 2014-08-27 13:21:26

+0

嗨Dave,在原文中更新了您的问题答案 – 2014-08-28 10:55:03

+0

从您所说的话,我无法发现任何明显的问题。我对jclouds并不太熟悉,但我唯一的建议是直接用nova客户端尝试它,看看问题是在操作系统中,还是在你使用的客户端库中。我在我的部署(与RDO packstack一起安装的icehouse)上尝试了同样的事情,但无法复制该问题。 – Dave 2014-08-28 20:21:39

只是为了记录。 同时连接卷不起作用。分配给附加卷的设备名称取决于首先附加哪个设备名称。尽管我们可能会指定名称,但它可能不会被底层驱动程序所尊敬。

最后,我们没有将卷的顺序附件连接到顺序,现在一切都按预期工作。