2014-03-25 138 views
0

这里是我的EBS卷附件EC2的代码。用ebs卷附上ec2

private static AttachVolumeResult attachEBSVolume(String volumeId, String instanceId, String device){ 
    AttachVolumeRequest attachVolReq = new AttachVolumeRequest(volumeId, instanceId, device); 
    return ec2.attachVolume(attachVolReq); 
} 

它的工作第一次很好,但是当我再次运行时它给出以下例外。 请告诉我如何解决它,并请告诉我参数中的deviceName(第3参数)参数是什么以及它的可能值是什么。由于

This is function call shown below 
attachEBSVolume(createRes.getVolume().getVolumeId(), "InstanceIDhere", "xvdg"); 

下面是例外起来::

AWS Error Code: InvalidParameterValue, AWS Error Message: Invalid value 'xvdg' for unixDevice. Attachment point xvdg is already in use. 

回答

0

您只能将一个EBS卷连接到一个EC2设备。有多个设备可用,例如xvdg,xvdh,/ dev/sdf。在代码中,您正在做的是您试图将不同的EBS卷附加到同一设备,这是AWS不允许的。所以您只能将一个EBS卷连接到一个设备。

您可以使用此功能

CreateVolumeResult createRes = makeEBSVolume(volSize, availabilityZone, "taghere"); 
createRes.getVolume().getVolumeId()  // to save the volume ID 

保存这个ID,你可以用你的EC2(实例ID)每次你需要时间附上这个ID后保存EBS卷的ID。

+1

每次打开我的ec2后,是否需要附上卷ID? –

+0

不,我认为你不需要每次都附上EC2。只有在您解除附加条件后,您才需要附加。 – farhangdon

+0

感谢它帮助。 –

1

您正在尝试不同的卷连接到相同的“xvdg”设备。

您应该使用不同的设备 - xvdh,xvdi,... xvdp。
然后在实例内部,您将看到它们为/ dev/xvdg,/ dev/xvdh等。

+0

我们可以只附加一个装置的音量吗?谢谢 –

+0

是的。这就像将硬盘添加到PC一样,您将在每个磁盘的/ dev中获取设备。每个磁盘上可以有多个设备,并且上面有多个分区,但反之亦然。 – Nikolay

+0

不,您可以将多个EBS卷附加到实例。但是每个卷的附件点(设备名称/ dev/xvd [a-z])必须是唯一的。这就好像您将物理磁盘驱动器连接到物理实例一样。一个EBS卷一次只能连接到一个设备。就像物理磁盘驱动器一样。 –

相关问题