Kvm-Virtualization

無法在 Amazon Linux 2 KVM 映像上訪問控制台或 SSH

  • April 14, 2020

我正在嘗試在 CentOS 7 主機上的本地環境中創建執行 Amazon Linux 2 的 KVM 來賓實例。我正在通過 SSH 進行此操作(例如,我的本地機器 -> SSH 到 CentOS 主機)。

我知道我的管理程序設置有效,因為使用以下命令,我可以創建一個具有 SSH 訪問權限的 CentOS 7 來賓完全沒有問題:

OS_IMG=CentOS-7-x86_64-GenericCloud.qcow2
DIR=/home/libvirt
SCRIPTS=$DIR/scripts
BOOT=$DIR/boot
IMG=$DIR/images
VM=centos-vm-test

# +++ Downloading image OS image
cd $BOOT
wget http://cloud.centos.org/centos/7/images/$OS_IMG

# +++ Creating meta/user data
cd $IMG/$VM
echo -e "instance-id: $VM\nlocal-hostname: $VM" > meta-data
cp $SCRIPTS/user-data user-data
cp $BOOT/$OS_IMG $VM.qcow2

# +++ Creating disk
export LIBGUESTFS_BACKEND=direct
qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 40G
virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
mv $VM.new.image $VM.qcow2

# +++ Creating CD-ROM containing cloud init data
mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

# +++ Creating VM"
virt-install --import --name $VM \
   --memory 4096 --vcpus 2 --cpu host \
   --disk $VM.qcow2,format=qcow2,bus=virtio \
   --disk $VM-cidata.iso,device=cdrom \
   --network bridge=virbr0,model=virtio \
   --os-type=linux \
   --os-variant=centos7.0 \
   --noautoconsole

在幾秒鐘內,我可以執行virsh net-dhcp-leases並查看可以通過 SSH 訪問的 IP 地址。

我嘗試使用 Amazon Linux 2 複製此過程,使用此處找到的圖像:https ://cdn.amazonlinux.com/os-images/2.0.20200304.0/kvm/

對於user-data,我已經嘗試了我的 CentOS 文件(很長,包括很多runcmd行)和推薦的基本內容在這裡找到:https ://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-2-虛擬機.html。使用 2 個不同的文件時,我沒有看到任何區別。

然而,這似乎不起作用,我不知道如何進一步進行。

  • 我無法執行virsh console myvmname,因為它只是卡住了Escape character is ^](輸入鍵什麼都不做)。在 CentOS 客戶機上,我可以執行virsh console myvmname,只需按一下返回鍵,就可以按預期連接
  • 如果我執行virsh net-dhcp-leases default,則沒有租約 - 所以我沒有可以嘗試 SSH 連接的 IP 地址
  • 登錄/var/log/libvirt/qemu顯示沒有錯;失敗的 AL2 日誌看起來與工作中的 CentOS 來賓日誌相同。

我還嘗試完全按照之前亞馬遜連結上的建議複製該過程,包括使用genisoimage文件seed.iso等,但這似乎沒有任何區別。

我如何才能訪問此 VM,或者至少嘗試找出問題所在?引導日誌將是理想的。

我在這裡偶然發現了修復:https ://github.com/giovtorres/kvm-install-vm/blob/master/kvm-install-vm#L630

基本上,我需要使用qemu-img resize而不是qemu-img create

if [[ $al2 == "Y" ]]; then
   qemu-img resize $VM.qcow2 40G &>> ${VM}.log

   echo "+++ Creating CD-ROM containing cloud init data"
   genisoimage -output $VM-cidata.iso \
               -volid cidata \
               -joliet -r user-data meta-data &>> ${VM}.log
else
   export LIBGUESTFS_BACKEND=direct
   qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 40G
   virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
   mv $VM.new.image $VM.qcow2

   echo "+++ Creating CD-ROM containing cloud init data"
   mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data
fi

引用自:https://serverfault.com/questions/1012213