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


82

题:

如何在现有AMI上使用新的AWS EC2类(r3,i2),而不重新创建整个系统设置?

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


3
刚在CentOS上尝试过此操作,但在ins tep 10中出现以下错误:/ dev / xvdf没有任何对应的BIOS驱动器。
Tobias 2014年

除了@ROMANARMY所说的以外,我认为答案分为正确的答案。然后,您可以接受它,这样问题就不会显示为未回答。请参阅stackoverflow.com/help/self-answer
2014年

@Tobias Zander您曾经在CentOS上使用它吗?
dhempler

1
@ dennis.hempler我们没有花太多时间,而是创建了新实例
Tobias

Answers:


77

回答:

  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上分离根(/ dev / sda1)分区

  5. 将PVM linux根分区附加到某处正在运行的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根目录

  15. 以/ dev / sda1将PVM根目录附加到HVM linux

  16. 启动HVM linux,瞧!

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


完美运行...一旦我在与PVM卷完全相同的可用区上创建了HVM实例。
cloudurfin 2014年

2
运行grub-install时出现以下警告:warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-bios-setup: error: will not proceed with blocklists.然后,一切看起来不错,但是它无法启动,或者给我任何提示,为什么它无法启动。
Paulo Neves

3
这对我来说非常有效,非常感谢!我确实收到了Paulo Neves在上面报告的可怕的grub警告,但是无论如何我的新实例启动正常。
GaryO 2015年

我有一个AMI Linux PVM实例,并且正在尝试将其迁移到新的HVM AMI Linux实例。我尝试应用您的解决方案,但仍处于第10步。请问有人能详细说明如何针对新的AMI Linux实例而不是Ubuntu进行此操作吗?谢谢!
tolgamorf

1
使用较新的实例类型(例如C5)时,实例不可访问。xvd*在这些实例上没有,只有nvme*命名约定。xvd用正确的代替nvme不起作用。:(
Alex

2

@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:快照转换为hvm:2019-07-01
      • 等等
  4. create-instance:新的Ubuntu HVM实例“ HVM01”。任何实例类都应该起作用;但是,设备名称可能有所不同,请参见下面的注释
    • 我使用了Bionic 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

  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。

这个解决方案对我有用。记住DEVNAMEchroot命令后重新创建变量。
贾斯汀·李
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.