
是否可以從現有的半虛擬 (PV) AMI 建立硬體虛擬機器 (HVM) AMI。
我最初的想法是啟動一個新的 PV 實例並使用命令ec2-create-image
建立新映像,同時指定 HVM 作為虛擬化類型。但是,ec2-create-image
沒有命令列參數來指定虛擬化類型。
有其他方法可以做到這一點嗎?
答案1
更新
AWS 已在 EC2 API 中啟用此功能。它可以作為--virtualization-type
選項使用aws ec2 register-image
在基於 Boto 的新 awscli 中。
原答案
是的!不幸的是,沒有直接的方法可以做到這一點。此外,某些 PV 實例可能需要修改核心和引導程式。
- 從現有 PV AMI 建立磁碟區。如果是您自己的 PV AMI,您可以從快照建立一個磁碟區。如果是第 3 方 AMI,您將需要啟動執行個體並拍攝快照。
- 使用任何 AMI 啟動 HVM 執行個體。
- 停止該 HVM 實例。
- 從這個實例分離根卷。
- 將 PV 磁碟區作為根磁碟區(/dev/sda1 或 /dev/sda,如果已分割)附加到 HVM 實例。
ec2-create-image
在 HVM 實例上運行。- 使用新的 HVM AMI 啟動其他執行個體。
如果這不起作用,那麼在步驟 5 之前,您需要將該磁碟區附加到正在執行的實例,設定 chroot,並為您的發行版安裝核心和引導程式。您可能還想清除日誌和任何 cloud-init 快取。
答案2
就我而言,我必須手動進行轉換,因為我使用建立的實例aws ec2 register-image
無法啟動。我的解決方案是基於這個帖子於AWS EC2 論壇。
準備
確保所有磁碟區都位於同一可用區。
透過 SSH 連接到您想要從中遷移的 PV 電腦並套用所有更新,然後登出。
前往 AWS 主控台並選擇建立 PV 系統的相同基礎 AMI(在我的範例中為 Amazon 64 位元 Linux AMI)來啟動新的 HVM 執行個體。
透過 SSH 連接到這個新實例並套用所有更新,然後登出。
前往 AWS 控制台並停止 PV 執行個體。拍攝根設備的快照並
SOURCE VOLUME
從此快照建立新磁碟區 ( )。停止 HVM 實例。拍攝新執行個體上根裝置的快照,並
TARGET VOLUME
根據該快照建立新磁碟區 ( )。再次啟動 HVM(新)實例。使用 AWS 主控台:
- 作為附加
SOURCE VOLUME
到新實例/dev/xvdf
。 - 作為附加
TARGET VOLUME
到新實例/dev/xvdg
。
轉換過程
透過 SSH 連線到新實例並取得 root 存取權限:
sudo su
掛載來源驅動器和目標驅動器。
mkdir -p /mnt/source && mount /dev/xvdf /mnt/source mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
就我而言,設備是
/dev/xvdf
(來源)和/dev/xvdg1
(目標)。這些可能會根據分區數量和附加分區的位置在您的配置中變更(請參閱準備中的步驟 6)。用於ls -al /dev/xvd*
查看驅動器。備份
/lib/modules/*
(如果PV ami的核心與新的HVM機器不同。此模組被AWS的某些服務使用。)刪除除
/boot
目標磁碟區之外的所有內容:cd /mnt/target && ls | grep -v boot | xargs rm -Rf
/boot
在來源磁碟區上刪除:rm -Rf /mnt/source/boot
將來源磁碟區的資料複製到目標磁碟區並保留所有屬性:
rsync -aAXHPv /mnt/source/ /mnt/target
編輯
/mnt/target/etc/fstab
分區/
,以便它引用TARGET VOLUME
在步驟 (8) 中安裝到其最終位置時的 。使用標籤或簡單地使用一些東西:/dev/xvda1 / ext4 defaults,barrier=0 1 1
然後恢復/lib/modules/
在步驟 3 中備份的內容。
使用 AWS 主控台停止系統並分離所有磁碟區。將
TARGET VOLUME
作為 附加到新實例上/dev/xvda
。請務必記下原根設備的安裝位置。大多數情況下,應該是
/dev/xvda
。啟動您的 HVM 實例。現在它應該是您的光伏系統的精確複製品。如果一切正常,您現在可以刪除您的 PV 實例以及
SOURCE VOLUME
.
答案3
總而言之:
ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1
詳細步驟:
進一步回答基於傑夫·斯特倫克的回應簡化步驟並提供有關 ec2 註冊映像的更多詳細資訊:
使用 PV 映像建立實例。進行/更新您想要的任何更改。
從上面的實例建立圖像。
在 EC2 控制台的 EC2 > 彈性區塊儲存 > 快照下找到上述 AMI 使用的快照 ID。
或者如果您有 ec2 api 工具設定:
ec2-描述-圖像 ami-id_of_above_created_ami
並找到 ami 的快照 ID
.. 進一步步驟的假設:您的 ec2 金鑰和 api 工具已設定並可供使用:
使用上述快照註冊新的 HVM AMI:範例:
ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --虛擬化類型 hvm -s snap-b44feb18 --root-裝置名稱 /dev/sda111
在哪裡
- -d 是 AMI 描述
- -n 是 AMI 名稱
- -s 是步驟 3 中的快照 ID。
- -a 是架構
- --virtualization-type 是製作 hvm 所必需的
- --sriov 用於啟用增強網絡,儘管它可能是多餘的,但不確定。
了解更多:
答案4
在嘗試了本文中的所有建議後,但沒有一個對我有用,我發現了一個關於該主題的優秀部落格文章,位於https://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm。
該程序的要素(詳細資訊)是:
安裝
grub
在要遷移的PV實例(來源實例)上。為來源實例(來源卷,SV)上的根卷建立預防性快照。
建立將遷移磁碟區的臨時 HVM 執行個體。
- 我使用了 Amazon Linux 實例
建立目標磁碟區 (DV),並將其和 SV 附加到臨時實例。
DV 至少應與 SV 一樣大。
將 SV 附加為
/dev/{sd,xvd}f
,將 DV 附加為/dev/{sd,xvd}g
。對 DV 進行分區:
parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdg
udevadm settle
將 SV 的 FS 調整為最小尺寸,並將
dd
其鏡像到 DV 上。清理來源磁碟區的 FS:
e2fsck -f /dev/xvdf
最小化相同:
resize2fs -M /dev/xvdf
觀察 resize2fs 的輸出(例如
Resizing the file system on /dev/xvdf to 269020 (4k) blocks
)並記下它以供下一步使用。將 SV 複製到 DV:
dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>
在新分割區擴充 FS:
resize2fs /dev/xvdg1
安裝
grub
到 DV 的引導區塊中在DV上臨時建立設備檔案:
mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
安裝 grub 檔:
rm -f /mnt/boot/grub/*stage*
cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/
rm -f /mnt/boot/grub/device.map
- 在 chroot 環境中安裝 grub:
cat << ARNIE | chroot /mnt grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
ARNIE
對目標磁碟區進行一些其他細微變更後,請捕捉該磁碟區並從中建立 AMI。
整理臨時設備文件:
rm -f /mnt/dev/xvdg /mnt/dev/xvdg1
在 中
/mnt/boot/grub/grub.conf
,更改root (hd0)
為root (hd0,0)
,添加(或替換console=*
)console=ttyS0
到內核行,如有必要,在內核行中替換root=*
為root=LABEL=/
在 中
/mnt/etc/fstab
,確保根 FS 的行包含標籤的引用,例如
LABEL=/ / ext4 defaults,noatime 1 1
將新的根 FS 標記為
e2label /dev/xvdg1 /
從臨時實例中卸載 DV,從臨時實例中分離 SV 和 DV。
拍攝 DV,然後從該快照建立 AMI 映像。
從該 HMI 啟動 HVM 實例。那是您遷移的實例。