Amazon EC2:如何将现有PV AMI转换为HVM

时间:2014-06-20 15:26:16

标签: amazon-web-services amazon-ec2 ami

问题:

如何在不重建整个系统设置的情况下将新的AWS EC2类(r3,i2)与现有的AMI一起使用?

新的EC2类仅支持基于HVM的虚拟化,但我只有PVM AMI映像。

2 个答案:

答案 0 :(得分:75)

答案:

  1. 启动Ubuntu HVM linux,任何版本,新

  2. 使用我现有的AMI / PVM linux启动Ubuntu,并在其上安装grub包:apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. 停止PVM linux

  4. 在PVM linux上分离root(/ dev / sda1)分区

  5. 将PVM linux root分区附加到某处运行的HVM linux,例如:/ dev / sdf

  6. 在HVM linux上:mkdir -p /mnt/xvdf && mount /dev/xvdf /mnt/xvdf

  7. rsync -avzXA /boot/ /mnt/xvdf/boot/

  8. mount -o bind /dev /mnt/xvdf/dev && mount -o bind /dev/pts /mnt/xvdf/dev/pts && mount -o bind /proc /mnt/xvdf/proc && mount -o bind /sys /mnt/xvdf/sys

  9. chroot /mnt/xvdf

  10. grub-install --no-floppy --recheck --force /dev/xvdf

  11. update-grub2

  12. 退出chroot:CTRL + D

  13. 停止HVM Linux

  14. 分离/ dev / sda1原始根和分离/ dev / sdf PVM root

  15. 将PVM root作为/ dev / sda1

  16. 附加到HVM linux
  17. 启动HVM linux,voilà!

  18. 从正在运行的HVM linux创建一个新的AMI映像,它将被HVM虚拟化。

答案 1 :(得分:0)

@divyenduz的答案有效,但需要对现代(大约2019年)AWS EC2进行一些清理和澄清。重要的是,现代实例类对设备名称的翻译方式有所不同。

这是我修改过的步骤。

为清楚起见,节点为:

  • 您要升级到HVM的原始PVM节点是“ PVM01”
  • 要将PVM01的根磁盘迁移到的新HVM节点为“ HVM01”

操作之前:备份原始节点PVM01

  1. 在节点PVM01上安装必备组件

    • 在PVM01上安装grub软件包

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. 停止节点PVM01

    • 创建/ dev / sda1的快照
    • 或创建整个节点的AMI
  3. 在PVM01上创建原始根卷的快照,并从该快照创建新卷
    • 在PVM01上创建/ dev / sda1的快照
    • 从此快照创建卷
    • 相应地标记每个资源
      • 标签:名称;值:pvm01:/ dev / sda1:snapshot-for-conversion-to-hvm:2019-07-01
  4. create-instance:新的Ubuntu HVM实例“ HVM01”。任何实例类都应该起作用;但是,设备名称可能有所不同,请参见下面的注释
    • 我使用了仿生Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372和实例类C5.XLARGE
  5. 将PVM01根分区(上一步中的新卷)附加到新的HVM01 / dev / sdf

    • 注意:较旧的实例类(例如C3)会将卷名转换为/ dev / xvdf
    • 注意:较新的实例类(例如C5)会将卷名转换为/ dev / nvme1
      • 在较新的实例类上,根卷将为/ dev / nvme0-零
      • 在较新的实例类上,附加的辅助卷将为/ dev / nvme1-ONE
    • 记下附加的卷设备名称

    ssh PVM01 须藤fdisk -l <​​/ p>

  6. 在HVM01上:

    # For xvdf, e.g. on C3.XLARGE
    DEVNAME=xvdf1
    # For nvme, e.g. on C5.XLARGE
    DEVNAME=nvme1n1
    mkdir -p /mnt/${DEVNAME} && mount /dev/${DEVNAME} /mnt/${DEVNAME}
    rsync -avzXA /boot/ /mnt/${DEVNAME}/boot/
    mount -o bind /dev /mnt/${DEVNAME}/dev && mount -o bind /dev/pts /mnt/${DEVNAME}/dev/pts && mount -o bind /proc /mnt/${DEVNAME}/proc && mount -o bind /sys /mnt/${DEVNAME}/sys
    chroot /mnt/${DEVNAME}
    grub-install --no-floppy --recheck --force /dev/${DEVNAME}
    update-grub2
    
  7. 使用CTRL + D退出chroot

  8. 停止HVM01
  9. 分离两个卷
    • 分离/ dev / nvme0 PVM01根
      • 注意:这将是C3实例类上的/ dev / sda1
    • 分离/ dev / $ {DEVNAME}(上面脚本中的DEVNAME)
  10. 将PVM01根卷作为/ dev / sda1附加到HVM01
    • 再次,/ dev / sda1名称出现在控制台中;此名称将转换为/ dev / nvme0或/ dev / xvda1,具体取决于实例类的现代程度
  11. 启动HVM01
  12. 可选:从正在运行的HVM01创建一个新的AMI映像,它将被虚拟化HVM。