Amazon ec2 将Amazon EC2 AMI转换为虚拟或漫游框

Amazon ec2 将Amazon EC2 AMI转换为虚拟或漫游框,amazon-ec2,virtualbox,vagrant,ec2-ami,packer,Amazon Ec2,Virtualbox,Vagrant,Ec2 Ami,Packer,我想复制一个正在运行的EC2实例的磁盘映像(抓取AMI)并将其导入虚拟盒,或者最终使用Vagrant运行它。我看到packer()允许您创建AMI和相应的Vagrant框来协同工作,但是我目前运行的实例已经运行了两年多,很难复制 我想这个问题在devops社区中很常见,但是在我的在线研究中没有找到解决方案。有什么工具可以让你完成这项任务吗?你应该 有关详细信息,请检查: 就我个人而言,我在Windows机箱上通过在实例上安装VMWare converter并将本地系统转换为VMDK实现了这一点。

我想复制一个正在运行的EC2实例的磁盘映像(抓取AMI)并将其导入虚拟盒,或者最终使用Vagrant运行它。我看到packer()允许您创建AMI和相应的Vagrant框来协同工作,但是我目前运行的实例已经运行了两年多,很难复制

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

你应该

有关详细信息,请检查:


就我个人而言,我在Windows机箱上通过在实例上安装VMWare converter并将本地系统转换为VMDK实现了这一点。然后我把VMDK贴到S3上。

我只想指出,在对原始问题的第一次评论中,我回答了这个问题。我添加这个答案只是为了让它更清楚,因为答案也是锚定标签中的链接。链接指向以下页面:

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

$ 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>
之后,在新映像文件上准备一个文件系统:

$ 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映像复制到空映像:

$ 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:

$ cp /usr/lib/grub/x86_64-pc/stage* /mnt/loop/1/boot/grub/
然后卸载设备(
umount/dev/loop1
),并将原始磁盘映像转换为vmdk映像:

$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk
现在,只需创建一个VirtualBox VM,并将vmdk映像作为主引导设备安装

不幸的是,此时我无法让Amazon Linux内核在VirtualBox中启动


如果可能的话,我正在寻找一个易于重复/自动化的过程。对于未来的读者,也许只有在您最初导入的情况下,才可以尝试导出,不是吗?“如果以前使用VM导入将虚拟机导入Amazon EC2…”如果实例有多个磁盘,则导出也不可用!它在QEMU内部启动。。。我完全复制了/dev/xvda。。不是xvda1(分区)。它在qemu中启动时没有任何问题。
$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk