我正在编写一个python脚本,该脚本创建一个amazon卷,并使用boto将其附加到实例中。为此,我需要使用mkfs命令创建一个文件系统。所以,我写了这段代码:
with settings(host_string=instance.public_dns_name, user = "my_user", key_filename="my_pem", warn_only=True):
run('mkfs.ext4 /dev/xvdh')
run('mount -t ext4 /dev/xvdh /work')
它返回:
Could not stat /dev/xvdh --- No such file or directory
The device apparently does not exist; did you specify it correctly?
我尝试多种选择:
我SSHed到VM,并执行这些命令,它工作得很好!但没有用布料。
发布于 2014-02-23 01:59:56
虽然这可能不是一个直接的修复,但如果您所需要的只是实例上的一个更大的驱动,那么这是一个明确的选择。您可以使用Boto这样的方法来创建驱动器和实例(您可能已经有类似的了,我将其从代码中删除并清理,这样可能会有一些额外的设置)
Step1:使用块设备创建实例
def run_instances():
dev_sda1 = BlockDeviceType()
bdm = BlockDeviceMapping()
bdm['/dev/sda1'] = dev_sda1
reservation = ec2_conn.run_instances(
default_ami[ec2_conn.region.name],
min_count=count,
max_count=count,
**user_data=generate_userdata_base64(),**
key_name='yourkey',
security_groups=ec2_security_groups,
instance_type=instance_type,
**block_device_map=bdm,**
placement=placement
)
当然,这些文档有更多的信息:http://boto.readthedocs.org/en/latest/ref/ec2.html#module-boto.ec2.blockdevicemapping
Step2:准备设备
使用resize2fs而不是创建卷,前面的块映射设备将把普通的实例设备替换为EBS卷或块存储,并将默认的AMI数据加载到它上,然后只需要扩展分区而不是创建新的分区。
我喜欢创建一个base64用户数据脚本,这只是因为当您第一次启动实例时(当您使用fab时,为什么不全部执行它),执行一些基本初始化任务就更容易了。
def generate_userdata_base64():
script = '#!/bin/bash\n\n'
script += 'resize2fs /dev/sda1\n'
script += 'yum update -y\n'
return base64.b64encode(script)
您还可以添加其他任何东西,比如要安装或启动的基本守护进程,添加的用户等等。我希望这是有用的。
https://stackoverflow.com/questions/21962774
复制相似问题