首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mkfs不使用织物

mkfs不使用织物
EN

Stack Overflow用户
提问于 2014-02-23 00:57:59
回答 1查看 334关注 0票数 0

我正在编写一个python脚本,该脚本创建一个amazon卷,并使用boto将其附加到实例中。为此,我需要使用mkfs命令创建一个文件系统。所以,我写了这段代码:

代码语言:javascript
运行
复制
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')

它返回:

代码语言:javascript
运行
复制
Could not stat /dev/xvdh --- No such file or directory
The device apparently does not exist; did you specify it correctly?

我尝试多种选择:

  • 使用sudo而不是运行
  • 在run命令中使用pty=False和/或shell=False

我SSHed到VM,并执行这些命令,它工作得很好!但没有用布料。

EN

回答 1

Stack Overflow用户

发布于 2014-02-23 01:59:56

虽然这可能不是一个直接的修复,但如果您所需要的只是实例上的一个更大的驱动,那么这是一个明确的选择。您可以使用Boto这样的方法来创建驱动器和实例(您可能已经有类似的了,我将其从代码中删除并清理,这样可能会有一些额外的设置)

Step1:使用块设备创建实例

代码语言:javascript
运行
复制
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时,为什么不全部执行它),执行一些基本初始化任务就更容易了。

代码语言:javascript
运行
复制
def generate_userdata_base64():
    script = '#!/bin/bash\n\n'
    script += 'resize2fs /dev/sda1\n'
    script += 'yum update -y\n'
    return base64.b64encode(script)

您还可以添加其他任何东西,比如要安装或启动的基本守护进程,添加的用户等等。我希望这是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21962774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档