实例OS无法找到附加卷

时间:2014-08-27 11:57:49

标签: openstack jclouds openstack-cinder

我一直在努力解决这个问题,因为2天没有成功。 如果您遇到类似问题以及如何解决问题,请与我们联系。或者任何指针都会有所帮助。

以下是我们的工作。

  1. 创建虚拟实例。
  2. 创建空白卷。
  3. 从快照创建卷。
  4. 将空白卷附加到实例。
  5. 将卷从快照附加到实例。
  6. 其他IP地址,安全组内容。
  7. 所有这些都是在单独的线程中完成的,但添加了依赖项。防爆。 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. 作品!!!
    5. 我检查了代码,所有组件都在做他们应该做的事情。这让我怀疑openstack本身! (我知道......那有点奇怪。)

      我正在使用icehouse和RDO packstack设置。

      [更新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

      我能错过什么?任何指针/建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

仅供记录。 同时附加卷不起作用。分配给附加卷的设备名称取决于首先附加的设备名称。即使我们可以指定名称,也可能不会被底层驱动程序尊重。

最后,我们废弃了卷的并行连接到顺序,现在一切都按预期工作。