首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将亚马逊EC2 AMI转换为虚拟或流浪箱

将亚马逊EC2 AMI转换为虚拟或流浪箱
EN

Stack Overflow用户
提问于 2014-02-21 06:22:15
回答 2查看 30.3K关注 0票数 44

我想复制一个正在运行的EC2实例的磁盘镜像(抓取AMI)并将其导入到虚拟机器中,或者最终使用Vagrant运行它。我看到打包器(http://www.packer.io/)允许你创建AMI和相应的Vagrant盒子一起工作,但是我目前运行的实例已经运行了两年多,很难复制。

我想这个问题在devops社区中很常见,但是在我的在线研究中还没有找到解决方案。有没有什么工具可以让你完成这项任务?

EN

回答 2

Stack Overflow用户

发布于 2015-01-06 21:00:05

我只想指出,@Drewness在对原始问题的第一个评论中回答了这个问题。我添加这个答案是为了让它更清楚,因为答案也是链接到锚标签中的。该链接指向以下页面:How to convert EC2 AMI to VMDK for Vagrant

因此,基本上您需要启用根SSH访问,例如

代码语言:javascript
复制
$ sudo perl -i -pe 's/#PermitRootLogin .*/PermitRootLogin without-password/' /etc/ssh/sshd_config
$ sudo perl -i -pe 's/.*(ssh-rsa .*)/\1/' /root/.ssh/authorized_keys
$ sudo /etc/init.d/sshd reload # optional command<br>

然后将正在运行的系统复制到本地磁盘镜像:

代码语言:javascript
复制
$ ssh -i ~/.ec2/your_key root@ec2-XX-XX-XX-X.compute-1.amazonaws.com 'dd if=/dev/xvda1 bs=1M | gzip' | gunzip | dd of=./ec2-image.raw

之后,在新的镜像文件上准备一个文件系统:

代码语言:javascript
复制
$ dd if=/dev/zero of=vmdk-image.raw bs=1M count=10240 # create a 10gb image file
$ losetup -fv vmdk-image.raw # mount as loopback device
$ cfdisk /dev/loop0 # create a bootable partition, write, and quit
$ losetup -fv -o 32256 vmdk-image.raw # mount the partition with an offset
$ fdisk -l -u /dev/loop0 # get the size of the partition
$ mkfs.ext4 -b 4096 /dev/loop1 $(((20971519 - 63)*512/4096)) # format using the END number

现在,您需要将EC2镜像中的所有内容复制到空镜像中:

代码语言:javascript
复制
$ losetup -fv ec2-image.raw
$ mkdir -p /mnt/loop/1 /mnt/loop/2 # create mount points
$ mount -t ext4 /dev/loop1 /mnt/loop/1 # mount vmdk-image
$ mount -t ext4 /dev/loop2 /mnt/loop/2 # mount ami-image
$ cp -a /mnt/loop/2/* /mnt/loop/1/

并安装Grub:

代码语言:javascript
复制
$ cp /usr/lib/grub/x86_64-pc/stage* /mnt/loop/1/boot/grub/

卸载设备(umount /dev/loop1)并将原始磁盘映像转换为vmdk映像:

代码语言:javascript
复制
$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk

现在只需使用作为主引导设备挂载的VirtualBox映像创建一个vmdk虚拟机。

不幸的是,在这一点上,我无法在VirtualBox中引导Amazon Linux内核。

票数 11
EN

Stack Overflow用户

发布于 2014-03-13 20:04:53

你应该使用export the instance

有关详细信息,请查看:How to export a VM from Amazon EC2 to VMware On-Premise

就我个人而言,我在Windows上通过在实例上安装VMWare转换器并将本地系统转换为VMDK来完成此操作。然后我把VMDK发布到了S3上。

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

https://stackoverflow.com/questions/21920993

复制
相关文章

相似问题

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