幾天過去了,我仍然無法使用運行 Ubuntu 16 的 EC2 連接到我的新 HVM 執行個體。嘗試過的每一種方法,我都能達到停止我的新C5 實例、分離所有捲並將新更新的源卷附加為的程度/dev/sda1
,但是當我連接到該實例時,我總是最終超時。亞馬遜的狀態檢查也失敗,因為它表示該實例無法存取。但是啟動時系統日誌沒有顯示任何問題。
我已經嘗試過做所有事情這個帖子。我試過了這個帖子以及。我看過其他網站,並給了這和這嘗試一下。我甚至嘗試了 ec2 命令列工具方法,並從 ec2 控制台轉換 AMI(在線),但是我要么無法使用轉換後的 AMI 啟動 C5 實例,要么該實例將停止並失敗(在以下情況下)通過命令行轉換)。
我真正能想到的唯一可能導致此問題的原因是 C5 實例上分區的命名約定。我見過的每一個指南都使用xvda/xvdf/xvdg
.我可能是錯的,但我沒有這些分割區或磁碟,而是有nvme0n1
、nvme0n1p1
、(新的 HVM 根)、nvme1n1
和nvme1n1p1
。當我嘗試 HVM/來源/目標磁碟方法時,我有nvme0n1/nvme0n1p1
,nvme1n1
(目標 - 一切都應該結束的地方)和nvme2n1/nvme2n1p1
(來源 - 一切都來自 m3 上的地方)。我發現這篇關於 NVME 的亞馬遜帖子所以我認為這不應該是一個問題,因為我只是在使用時使用正確的磁碟/分割區/mnt/
,即。我打電話mkdir -p /mnt/target && mount /dev/nvme1n1 /mnt/target
而不是mkdir -p /mnt/target && mount /dev/xvdf /mnt/target
,但到目前為止沒有任何效果。當我附加target
as時,我的實例就變得無法存取/dev/sda1
。
那麼,在使用名為 的磁碟執行這些操作時,我是否遺漏了一些東西nvme*
?我可以提供任何其他資訊或調試內容來幫助理解該問題嗎?
答案1
我意識到這個問題不太常見,但為了以防萬一,我希望我的結果可以幫助將來的某人(也許下次我嘗試這樣做時甚至可以幫助我)。我要感謝 Amazon 支援部門的 Steve E. 幫助我遷移執行個體 <3
無論如何,將我的 Ubuntu 16.04 M3 (PV) 實例遷移到 Ubuntu 16.04 C5 (HVM) 實例時出現了 2 個問題。第一個問題是新的 C5 執行個體確實使用新的命名約定,因此其他將 PV 遷移到 HVM 的教學課程的工作方式並不完全相同。另一個問題是我的 M3 (PV) 實例已升級到 Ubuntu。實際上,在過去一年左右的時間裡,我已經從 Ubuntu 12 -> Ubuntu 14 -> Ubuntu 16 過渡了。這導致了無法產生雲端網路檔案的問題,因此無法存取我的實例。
無論如何,若要使用新的 nvme 命名約定將 Ubuntu 16.04 PV 實例移轉到 HVM 實例,請執行下列操作:
先決條件摘要:
在開始之前,請確保在您的 PV 實例上安裝以下內容:
$ sudo apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists $ sudo apt-get install linux-aws
- 停止 PV 實例 &建立快照其根體積,恢復此快照作為來源相同可用區上的新 EBS 磁碟區(建立快照後立即啟動 PV 執行個體)
- 啟動新的 C5 HVM 實例(目標)在來源執行個體的相同可用區上選擇 Ubuntu Server 16.04 LTS (HVM)(將此新執行個體 EBS 根磁碟區大小保持為 8GB,因為此根磁碟區僅暫時使用)
- 實例啟動後,附加卷您在步驟 1 中還原為
/dev/sdf
(在 Ubuntu 系統上,名稱為)(這是 PV 實例的根磁碟區nvme1n1
)。 - 建立新的(空白)EBS 卷(與「來源」PV 根磁碟區大小相同)並附加到 HVM 執行個體
/dev/sdg
(在 Ubuntu 系統上,名稱為nvme2n1
)
移民:
登入執行個體後,使用sudo su
root 使用者身分執行所有指令。
顯示您的交易量
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 8G 0 disk └─nvme0n1p1 259:1 0 8G 0 part / nvme1n1 259:2 0 100G 0 disk nvme2n1 259:3 0 100G 0 disk
nvme0n1
是您剛剛建立的 HVM 根(只是為了這次啟動)nvme1n1
是恢復的 PV 根(將轉換為 HVM)nvme2n1
是空白磁碟區(將從 PV 根接收轉換為nvme1n1
)nvme2n1
在(nvme2n1p1
將要建立)上建立一個新分區# parted /dev/nvme2n1 --script 'mklabel msdos mkpart primary 1M -1s print quit' # partprobe /dev/nvme2n1 # udevadm settle
檢查“來源”磁碟區並最小化原始檔案系統的大小以加快該過程。我們不想在下一步複製可用磁碟空間。
# e2fsck -f /dev/nvme1n1 ; resize2fs -M /dev/nvme1n1
將「來源」磁碟區複製到「目標」卷
# dd if=/dev/nvme1n1 of=/dev/nvme2n1p1 bs=$(blockdev --getbsz /dev/nvme1n1) conv=sparse count=$(dumpe2fs /dev/nvme1n1 | grep "Block count:" | cut -d : -f2 | tr -d "\\ ")
將“目標”音量調整為最大:
# e2fsck -f /dev/nvme2n1p1 && resize2fs /dev/nvme2n1p1
準備目標卷:
# mount /dev/nvme2n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
chroot
到新卷# chroot /mnt/
重新安裝grub在 chrooted 卷上:
# grub-install --recheck /dev/nvme2n1 # update-grub
退出
chroot
# exit
關閉實例
# shutdown -h now
轉換後,您現在需要執行以下操作:
分離您先前在 HVM 實例上擁有的 3 個磁碟區。將您在控制台上建立的最後一個磁碟區(空白)附加到 HVM 執行個體上
/dev/sda1
(先前已附加為)。/dev/nvme2n1
啟動 HVM 實例。
新的 HVM 執行個體現在應該會成功啟動,並且將是舊來源 PV 執行個體的精確副本(如果您使用了正確的來源磁碟區)。一旦確認一切正常,就可以終止來源實例。
更新網路配置(可選)
現在,上述步驟適用於這裡的大多數人。但是,我的實例狀態仍未達到。原因是因為我在我的實例上升級了 Ubuntu,而不是從新映像開始。這使得eth0
配置處於啟動狀態,沒有50-cloud-init.cfg
設定檔。
如果您已經擁有該文件/etc/network/interfaces.d/50-cloud-init.cfg
,那麼您可以繼續更新該文件,而不是建立新文件。也假設所有命令都通過 運行sudo su
。
關閉實例,分離卷,然後輸入與先前相同的配置。將 8GB 磁碟區附加為
/dev/sda1/
,並將最終目標磁碟區附加為/dev/sdf/
。啟動實例並登入。Mount
/dev/sdf
,現在應該nvme1n1p1
透過執行以下操作:# mount /dev/nvme1n1p1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
建立或更新文件:
/etc/network/interfaces.d/50-cloud-init.cfg
具有以下內容:
# This file is generated from information provided by # the datasource. Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} auto lo iface lo inet loopback auto ens5 iface ens5 inet dhcp
退出
chroot
(exit
),關閉實例 (shutdown -h now
)。請依照之前的步驟 9 進行操作!
你應該完成了!
答案2
謝謝,網路配置的提示在升級情況下有效(Ubuntu 14.04 PV 到 Ubuntu 18.04 PV)。將升級後的 Ubuntu 18.04 PV 轉換為 Ubuntu 18.04 HVM,並對網路配置進行了輕微調整。使用以下配置建立了新的 /etc/netplan/50-cloud-init.config
network:
version: 2
ethernets:
all-en:
match:
name: "en*"
dhcp4: true
all-eth:
match:
name: "eth*"
dhcp4: true