我正在尝试在本地环境中的 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-virtual-machine.html。使用这两个不同的文件时我没有发现任何区别。
但这似乎不起作用,我不知道该如何继续。
- 我无法运行
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
文件一起使用等,但这似乎没有什么区别。
我如何才能访问该虚拟机,或者至少尝试找出问题所在?启动日志是理想的选择。
答案1
我偶然发现了这里的修复方法: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