我正在努力使用ubuntu 最小图像创建 libvirt/KVM VM。我启动了 VM-Manager 向导,选择“导入现有磁盘映像”,将其指向下载的映像并确保网络适配器使用 virtio 驱动程序。我为 VM 分配了 2 个虚拟核心和 4GB RAM。所有其他设置都保留为默认值。不幸的是,VM 在启动时冻结,紧接着显示 BIOS 信息和“从硬盘启动...”消息。我尝试了 16.04 和 18.04 映像。对于 16.04,会显示附加消息“错误:没有这样的设备:root”。
任何关于如何使其工作的提示都将不胜感激:)
我的主机正在运行 ubuntu-16.04,有 2 个 CPU 核心(4 个带超线程的虚拟核心)和 16GB RAM。
答案1
最小镜像是云镜像的一个子类型,因此需要使用紫外线工具正如解释的那样这个答案。然而,有几个关键细节缺失:
--source
1)要下载最少的图像,必须在选项中指定特殊的URL uvt-simplestreams-libvirt
:
uvt-simplestreams-libvirt sync --source https://cloud-images.ubuntu.com/minimal/daily/ release=bionic arch=amd64
上述 URL 使用每日构建的最小映像,其中已应用所有更新。如果出于某种原因,您想从未更新的 vanilla 版本映像开始,则可以使用https://cloud-images.ubuntu.com/minimal/releases/
。
2)如果您下载了其他图像(例如从默认源下载),则可能需要label
在创建最小虚拟机时指定适当的过滤器:
uvt-kvm create --memory 4096 --cpu 2 myminimalvm release=bionic arch=amd64 "label=minimal daily"
--ssh-public-key-file
根据您的 ssh 设置,您可能还需要/想要使用选项。
如果您在上一步中使用了release
而不是image,则请相应地调整过滤器。daily
label
3)创建虚拟机后,你应该确保Cloudinit 工具已完成其工作:
uvt-kvm wait --insecure myminimalvm
--ssh-private-key-file
(您可能还需要根据您的 ssh 设置使用选项)
此时,VM 已准备就绪:)您现在可以使用标准 libvirt 工具(包括 virt 管理器 GUI)来操作它(启动/停止、暂停/恢复等)。
但请注意,如果你打开它的控制台,你将只看到 BIOS 启动信息(如问题中所述),因为最小图像不会输出任何事物在控制台上,也不启动登录服务。您只能通过 ssh 访问它们:要么使用
uvt-kvm ssh --insecure myminimalvm # again, --ssh-private-key-file may be needed
或者在您确定虚拟机的 IP 后直接使用 ssh(使用 virt manager,或者,uvt-kvm ip myminimalvm
并且它通常在 的输出中uvt-kvm wait
):
ssh [email protected]
答案2
准备
看看硬件是否支持硬件虚拟化...
$ egrep -c '(vmx|svm)' /proc/cpuinfo
2 // A result of '0' means no. '1' or higher means yes
...然后重新启动进入 BIOS 并将其打开。
创建第一个虚拟机:
一旦开启虚拟化,从零到完全运行只需三个命令。主机是 Ubuntu 18.04。客户机也将是 18.04,但那只是因为我缺乏想象力。
1) 安装 KVM、qemu、virt-manager 和您需要的所有其他工具。它们都是单个包的依赖项:
$ sudo apt install uvtool
2) 下载 Ubuntu 18.04 的云镜像。云镜像是无头的 - 只有外壳。下载需要几分钟(大约 350 MB),所以不要惊慌:
$ uvt-simplestreams-libvirt sync release=bionic arch=amd64
3)创建并启动虚拟机客户机“test1”
$ uvt-kvm create test1 release=bionic
从主机启动、停止、暂停和恢复 VM GUEST
$ virsh list // Check status
Id Name State
----------------------------------------------------
1 test1 running
$ virsh suspend test1
Domain test1 suspended
$ virsh resume test1
Domain test1 resumed
$ virsh shutdown test1
Domain test1 is being shutdown
$ virsh list --all // Use --all to show inactive VMs
Id Name State
----------------------------------------------------
- test1 shut off
$ virsh start test1
Domain test1 started
$ virsh list
Id Name State
----------------------------------------------------
2 test1 running
登录至访客
host$ uvt-kvm ssh test1