我启动了EC2竞价型实例并取消选中"删除终止" EBS根卷的选项。我选择了Ubuntu 14.04 64位HVM AMI。
在某些时候,由于最高价格导致实例终止,并且EBS数量按预期落后。现在,最终当Spot Instance重新启动时,它会创建一个全新的EBS根卷。旧的EBS根卷仍然在那里。
实际上,我通过手动终止竞价型实例并启动一个新实例来模拟上述事件以进行测试,但我认为结果在实际使用中是相同的。
现在,如何将旧的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实例的随需应变价格,而无需重新构建整个应用程序部署,并且没有预留实例的承诺。
我错过了什么?
答案 0 :(得分:2)
答案是将pivot_root
调用放在/sbin/init
内的初始(临时)EBS根卷上。
以下是一些脚本,可以自动启动新的竞价型实例并修改第一个(短暂的)EBS卷上的/sbin/init
以从第二个(持久性)EBS卷链式加载系统: