iso镜像使用location参数进行virt-install安装虚拟机¶
无法在 --cdrom
参数同时传递内核参数¶
我在 arch linux ARM KVM虚拟化 遇到了一个困境:
Ubuntu的WEB下载网站只提供 amd64 和 i386 安装路径,也就是以往 --location
参数无法使用,所以我下载了 ubuntu-22.04.1-live-server-arm64.iso
尝试使用 --cdrom
安装参数:
virt-install \
--network bridge:virbr0 \
--name a-b-data-1 \
--ram=6144 \
--vcpus=2 \
--boot uefi --cpu host-passthrough \
--os-type=ubuntu22.04 \
--disk path=/dev/vg-libvirt/a-b-data-1,sparse=false,format=raw,bus=virtio,cache=none,io=native \
--graphics none \
--cdrom=/var/lib/libvirt/images/ubuntu-22.04.1-live-server-arm64.iso \
--extra-args="console=tty0 console=ttyS0,115200"
此时会提示错误:
WARNING --os-type is deprecated and does nothing. Please stop using it.
ERROR Kernel arguments are only supported with location or kernel installs.
这里可以看到 只有 location 或者 kernel 安装才能使用内核参数
但是,如果不传递内核参数 --extra-args="console=tty0 console=ttyS0,115200"
,单纯使用 --cdrom
:
virt-install \
--network bridge:virbr0 \
--name a-b-data-1 \
--ram=6144 \
--vcpus=2 \
--boot uefi --cpu host-passthrough \
--os-type=ubuntu22.04 \
--disk path=/dev/vg-libvirt/a-b-data-1,sparse=false,format=raw,bus=virtio,cache=none,io=native \
--graphics none \
--cdrom=/var/lib/libvirt/images/ubuntu-22.04.1-live-server-arm64.iso
并没有像amd64版本那样自动提供字符终端,此时提示:
WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
我调整成 --graphics vnc
并安装了 virt-viewer虚拟机图形管理接口工具 连接到VNC终端,发现并没有进入安装过程,而是提示 Guest has not initialized the display (yet).
:

这使得我进退两难…
在 --location
参数中指定initrd和kernel¶
感谢 ADoyle (居然和我同时在阿里云工作过,可惜未曾认识) 提供的方法 virt-install Couldn’t find kernel for install tree :
安装
cdrtools
获得isoinfo
工具:pacman -S cdrtools
执行以下命令从iso文件中找到
initrd/vmlinuz
:
isoinfo -J -i /var/lib/libvirt/images/ubuntu-22.04.1-live-server-arm64.iso -l | grep -E '(initrd|vmlinuz)'
此时可以看到:
-r-xr-xr-x 1 0 0 105906566 Aug 9 2022 [ 2997 00] initrd
-r-xr-xr-x 1 0 0 15052925 Aug 9 2022 [ 506636 00] vmlinuz
其实不使用 isoinfo
工具也能找到启动内核,方法是将 iso 文件挂载到本地文件系统进行查找:
mkdir /var/lib/libvirt/images/ubuntu22.04-iso
mount -o loop /var/lib/libvirt/images/ubuntu-22.04.1-live-server-arm64.iso /var/lib/libvirt/images/ubuntu22.04-iso
cd /var/lib/libvirt/images/ubuntu22.04-iso
find . \( -name initrd* -o -name vmlinuz* \)
可以看到:
./casper/initrd
./casper/vmlinuz
一些发行版的惯例:
Distro Kernel path RAM disk path
Fedora /isolinux/vmlinuz /isolinux/initrd.img
RHEL5/CentOS5 /isolinux/vmlinuz /isolinux/initrd.img
openSUSE /boot/i386/loader/linux /boot/i386/loader/initrd
Mandriva /i586/isolinux/alt0/vmlinuz /i586/isolinux/alt0/all.rdz
Ubuntu(已验证) /casper/vmlinuz /casper/initrd
Debian /install/vmlinuz /isolinux/initrd.img
所以将安装命令修订成:
virt-install \
--network bridge:virbr0 \
--name a-b-data-1 \
--ram=6144 \
--vcpus=2 \
--boot uefi --cpu host-passthrough \
--disk path=/dev/vg-libvirt/a-b-data-1,sparse=false,format=raw,bus=virtio,cache=none,io=native \
--graphics none \
--location /var/lib/libvirt/images/ubuntu-22.04.1-live-server-arm64.iso,initrd=casper/initrd,kernel=casper/vmlinuz \
--extra-args="console=tty0 console=ttyS0,115200"
现在安装终端输出提示:
Starting install...
Retrieving 'vmlinuz' | 0 B 00:00:00 ...
Retrieving 'initrd' | 0 B 00:00:00 ...
Creating domain... | 0 B 00:00:00
Running text console command: virsh --connect qemu:///system console a-b-data-1
Connected to domain 'a-b-data-1'
Escape character is ^] (Ctrl + ])
QEMU ARM CPU功能¶
很不幸,虽然方法应该没有错误,并且观察 /var/log/libvirt/qemu/a-b-data-1.log
没有报错,但是安装的终端交互界面始终没有出现。我推断是 Ubuntu LTS 22.04 采用的内核比较保守,尚无法支持 apple silicon M1 的MacBook Pro。 在 arch linux ARM KVM虚拟化 我选择内核更为领先的 Fedora 来实践 移动云架构 但是依然没有解决启动问题,不论是 --graphics none
还是 --graphics vnc
都不能运行起来。
QEMU Arm CPU Features 提供了支持ARM处理器的功能,看起来不能像 x86 一样直接使用 --cpu host-passthrough