Jus*_* W. 41 virtualbox amazon-ec2 packer ec2-ami vagrant
我想复制正在运行的EC2实例的磁盘映像(抓住AMI)并将其导入虚拟盒或最终使用Vagrant运行.我看到打包器(http://www.packer.io/)允许你创建AMI和相应的Vagrant盒子一起工作,但是我目前运行的实例已经运行了两年以上并且很难复制.
我想这个问题在devops社区很常见,但是我的在线研究还没有找到解决方案.有没有可以让你完成这项任务的工具?
Bil*_*Man 11
我只想注意@Drewness在对原始问题的第一个评论中回答了这个问题.我只是添加这个答案,使其更清晰,因为答案也链接到锚标签.该链接指向以下页面:如何将EC2 AMI转换为Vagrant的VMDK.
所以基本上你需要启用root 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>
Run Code Online (Sandbox Code Playgroud)
然后将正在运行的系统复制到本地磁盘映像:
$ 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
Run Code Online (Sandbox Code Playgroud)
之后,在新映像文件上准备文件系统:
$ 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
Run Code Online (Sandbox Code Playgroud)
现在您需要复制从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/
Run Code Online (Sandbox Code Playgroud)
并安装Grub:
$ cp /usr/lib/grub/x86_64-pc/stage* /mnt/loop/1/boot/grub/
Run Code Online (Sandbox Code Playgroud)
并卸载device(umount /dev/loop1
)并将原始磁盘映像转换为vmdk映像:
$ qemu-img convert -f raw -O vmdk vmdk-image.raw final.vmdk
Run Code Online (Sandbox Code Playgroud)
现在只需创建一个VirtualBox VM,并将vmdk映像作为主引导设备挂载.
不幸的是,在这一点上,我无法让Amazon Linux内核在VirtualBox中启动.
您应该导出实例.
有关更多详细信息,请查看:如何将VM从Amazon EC2导出到VMware On-Premise.
我个人通过在实例上安装VMWare转换器并将本地系统转换为VMDK来在Windows机器上完成此操作.然后我将VMDK发布到S3.
归档时间: |
|
查看次数: |
29064 次 |
最近记录: |