我正在编写一个python脚本,用于创建亚马逊卷并使用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?
我尝试了多种选择:
我通过SSH连接到VM并执行了这些命令,它运行正常!但没有使用面料。
答案 0 :(得分:1)
虽然这可能不是一个直接的解决方案,但如果你需要的只是一个更大的驱动器,它是一个明确的选择。你可以用Boto做这样的事情来创建驱动器和实例(你可能已经有类似的了,我把它从我的代码中取出并清理干净,因此可能会有一些额外的设置)
步骤1:使用块设备创建实例
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
第2步:准备设备
使用 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)
你可以添加任何其他东西,比如安装或启动基本守护进程,添加用户等等。我希望这很有用。