分离 ec2 实例的根卷

Posted

技术标签:

【中文标题】分离 ec2 实例的根卷【英文标题】:Detach root volume of ec2 instance 【发布时间】:2017-09-28 04:14:31 【问题描述】:

我正在使用一个 Spot 实例来做一些工作并保存数据,我正在重新安装一个以前存在的卷作为我当前实例的根卷。因此,实例启动的根卷不再使用,我想将其删除以节省成本。

我已经卸载了以前的根卷,并尝试使用和不使用 --force 参数将其从 cli 中分离出来,并且都以失败告终,并出现此错误:

An error occurred (IncorrectState) when calling the DetachVolume operation: Unable to detach root volume 

我意识到这是因为 aws 将初始根安装在 xv/s da1 中,而 aws 阻止我将其分离。

我可以遵循任何步骤来分离卸载的根卷吗?

【问题讨论】:

【参考方案1】:

不,没有。分离根卷需要停止实例,并且无法停止 Spot 实例。

为了保留数据,我将重新挂载以前存在的卷作为当前实例的根卷。

这并不是真正正确的做法。 Spot 实例本质上是短暂的,重复使用根卷不是预期的操作。

使用 Elastic File System(如果您所在地区可用)是实现此目的的理想选择。 EFS 文件系统可以挂载到您需要的任何层次结构中,例如/srv/data,这些文件系统也可以同时挂载到多个实例。

也可以使用 S3,但您的代码必须考虑到这一点。

或者,如果您想移动卷,请将您的工作保存在不是根卷的 EBS 卷上。

【讨论】:

感谢您的回答。但是我必须重用根卷,我正在构建一些库,构建时间超过 45 分钟,我不想每次都重建它们,我开始做一些事情。我必须在标准 /usr/lib 等位置安装一些库才能构建 lib。我想如果我继续使用相同的 ami 并在单独的文件系统中构建 lib,它可能会工作。 不,不...按照您想要的方式构建机器,制作机器的自定义 AMI,并从自定义 AMI 启动您未来的 Spot 实例。每次 Spot 机器启动时,您的所有库都会在自定义根卷的新克隆副本上。 我怎么没想到。 :) 我可以从我存储的数据中创建一个 AMI 吗?所以每次,我想关闭实例,创建一个 AMI,它将存储所有数据 + 库,然后从该 AMI 启动一个新实例?那可能吗 ? aws 是否会为创建 AMI 收费。再次感谢您的帮助。 每次从 AMI 启动时,您创建 AMI 时计算机 EBS 卷上的所有内容都将存在。 AMI 是免费的,但您需要为支持它们的快照支付 EBS 快照存储费用。 请记住,如果您删除 AMI 也可以删除快照。每个 EBS 卷都会有一个快照。

以上是关于分离 ec2 实例的根卷的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 boto3 指定 core-os ec2 实例的根卷大小?

AWS ec2 根卷增加:在 aws ubuntu 实例上扩展弹性根卷不起作用

aws相关知识

从快照重建现有的 EC2 实例?

如何通过 CloudFormation 设置 EC2 实例根卷的标签

如何使用 Terraform 为 Elastic Beanstalk 中的 EC2 实例设置 EBS 根卷以持久保存