linux - AWS EC2 : How to remount previous EBS volume using pivot_root?

标签 linux amazon-web-services amazon-ec2 ubuntu-14.04

我启动了 EC2 Spot 实例,并取消选中 EBS 根卷的“终止时删除”选项。我选择了 Ubuntu 14.04 64 位 HVM AMI。

在某个时候,实例由于最高价格而被终止,并且 EBS 卷仍按预期进行。现在,最终当 Spot 实例重新启动时,它会创建一个全新的 EBS 根卷。旧的 EBS 根卷仍然在那里。

实际上,出于测试目的,我通过手动终止 Spot 实例并启动新实例来模拟上述事件,但我认为实际使用中的结果是相同的。

现在,如何将旧的 EBS 卷重新挂载为当前根卷?

我尝试了 http://linux.die.net/man/8/pivot_root 中的示例,进行一些修改以避免明显的错误:

# manually attach old EBS to /dev/sdf in the AWS console, then do:
sudo su -
mkdir /new-root
mkdir /new-root/old-root
mount /dev/xvdf1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root

终端在 exec chroot 命令处挂起,并且实例将不接受新的 ssh 连接。

我真的很想让它发挥作用,因为它提供了一种方便的机制,可以节省开发、测试和面向批处理的 EC2 实例的按需价格的费用,而无需重新构建整个应用程序部署,并且无需预留实例的 promise 。

我错过了什么?

最佳答案

答案是将 pivot_root 调用置于初始(临时)EBS 根卷上的 /sbin/init 内。

以下脚本可自动执行启动新 Spot 实例并修改第一个(临时)EBS 卷上的 /sbin/init 的过程,以从第二个(持久)EBS 卷上链式加载系统)EBS体积:

https://github.com/atramos/ec2-spotter

关于linux - AWS EC2 : How to remount previous EBS volume using pivot_root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32108767/

相关文章:

c - pthread_create 中的多个参数

amazon-web-services - 通过查询 DynamoDB 最大 1MB 可以获得的最佳性能是多少?

amazon-web-services - AWS Lambda 无权执行权限中列出的操作

linux - 从 udev 启动的脚本不再具有 DISPLAY 访问权限?

Linux - 当优先级较高的任务繁忙时,不会安排优先级较低的线程

amazon-web-services - AWS Beanstalk - 创建新环境时向 Lambda 发送 SNS 通知

azure - 是否可以在云上部署分布式系统?

iis - 如何在没有域名的情况下访问 AWS EC2 上的站点

amazon-web-services - 此 Auto Scaling 组的服务相关角色尚未可供使用

php - 生成的 Postgresql 进程可以由 spawner PHP 脚本控制吗?