Linux服务器\Ubuntu 命令行 安装KVM virt-install创建虚拟机
服务器安装KVM
参考文档 Ubuntu/KVM/Installation.
安装前准备
- 检查CPU是否支持硬件虚拟化;
egrep -c '(vmx|svm)' /proc/cpuinfo
//返回0代表CPU不支持虚拟化
//返回1或者大于1代表支持虚拟化的CPU的数量
- 如果cpu不支持虚拟化,查找别的资料先启动cpu虚拟化;
- 查看服务器内核 是否具备KVM / CPU是否支持KVM;
kvm-ok
正常的返回:
INFO: /dev/kvm exists
KVM acceleration can be used
如果是这样:
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
虚拟机也可以运行,但是没有kvm插件会很慢
- 尽量使用64位的内核
egrep -c ' lm ' /proc/cpuinfo
//如果是0代表你的cpu不是64位的
//如果≥1则相当于是64位
uname -m
返回x86_64和amd64代表现在是64位的内核在运行
如果是 i386, i486, i586 或 i686,那就是32位内核在运行
Ubuntu服务器安装KVM
- 安装必要的包;
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- 将用户添加到组
sudo adduser `id -un` libvirtd
sudo adduser `id -un` kvm
检查是否加入成功:
groups
返回:
adm dialout cdrom floppy audio dip video plugdev fuse lpadmin admin sambashare kvm libvirtd
- 检查是否安装成功
virsh list --all
出现: 说明安装成功
Id Name State
----------------------------------
- 出现问题看 Ubuntu/KVM/Installation.
KVM创建虚拟机
新的参考文档 创建KVM虚拟机.
x86创建ubuntu虚拟机
采用 libvirt LVM卷管理存储池先创建LVM卷
virsh vol-create-as images_lvm ubuntu20.04 6G
LVM卷知识请自行查阅 libvirt LVM卷管理存储池.
获知 images_lvm需要检查当前存储卷
virsh pool-list --all
出现:
Name State Autostart
------------------------------------
boot-scratch active yes
images active yes
这里面的name作为创建LVM卷里的images_lvm如:
virsh vol-create-as images ubuntu20.04 6G
然后在 virt-install安装命令中指定LVM卷作为虚拟磁盘
virt-install \
--network bridge:virbr0 \
--name ubuntu20.04 \
--ram=2048 \
--vcpus=2 \
--boot uefi --cpu host-passthrough \
--os-type=ubuntu20.04 \
--disk path=/dev/vg-libvirt/ubuntu20.04,sparse=false,format=raw,bus=virtio,cache=none,io=native \
--graphics none \
--location=http://mirrors.163.com/ubuntu/dists/focal/main/installer-amd64/ \
--extra-args="console=tty0 console=ttyS0,115200"
所有的大坑!!!!都在virt-install命令中 !!!! 具体参数含义自行查阅
说明
使用 osinfo-query os 可以查询出 --os-variant 所有支持的参数,这样可以精确指定操作系统版本以便优化运行参数。
–graphics none 表示不使用VNC来访问VM的控制台,而是使用VM串口的字符控制台。
–location 指定通过网络安装 ,如果使用本地iso安装,则使用 --cdrom /var/lib/libvirt/images/ubuntu-18.04.2-live-server-amd64.iso
只有通过网络安装才可以使用 --extra-args=“console=tty0 console=ttyS0,115200” 以便能够通过串口控制台安装。也就是说,如果使用 iso镜像安装,则不能传递内核参数,否则提示报错:
ERROR Kernel arguments are only supported with location or kernel installs.
这里如果采用iso镜像安装,那你算是掉到大坑了:),而我直接在坑里打滚@w@
说下这么做的后果吧,iso镜像安装只要删掉–extra-args="console=tty0 console=ttyS0,115200这一参数就可以正常创建了,但是代价是,你没有办法连接到这台虚拟机,virsh console vm无效,也不会有正常的安装界面,虽然有说可以VNC远程连接到的,但是我试了几次不太行(对网络配置知识不太了解
要模拟UEFI,需要安装 ovmf 软件包,并使用参数 --boot uefi
root分区采用EXT4文件系统,占据整个磁盘
软件包只选择 OpenSSH server 以便保持最小化安装,后续clone出的镜像再按需安装
virt-install命令安装之后,运行正常会host出现guest的安装界面,开始选你的国家位置时区什么的唯一需要注意的是有一布会让你选想要安装的软件,上排全是图形界面什么的,拉到最下面空格勾选OpenSSH server,这一步一旦错过,会导致后续不能ssh到新创建的虚拟机,基本就废啦
如果不小心忘记勾选了,那么你的想法一定是destroy这台vm,再undefine释放它,挺对的,但是不全对,一定一定记得把和他一起的LVM卷也删除重建,不然卷里会保留上次失败的虚拟机信息,然后和新的虚拟机打架,具体表现为新的虚拟机安装完成会进入神秘的小黑盒空间退不出来
上述安装是通过 virsh console 连接到虚拟机的串口控制台实现的,安装完成后,需要 detach 断开串口控制台: CTRL+Shift+] ,这就可以返回host主机的控制台。
连接到新建的虚拟机
从这一步开始,参考新的文档 Ubuntu虚拟机控制台.
Host主机 /var/lib/libvirt/dnsmasq/virbr0.status 提供了当前dnsmasq分配的IP地址情况。所以上述通过arp解析方法只适合在少数虚拟机时候使用,直接检查这个状态文件可以看到类似:
[
{
"ip-address": "192.168.122.186",
"mac-address": "52:54:00:8a:45:89",
"hostname": "ubuntu18-04",
"client-id": "ff:32:39:f9:b5:00:02:00:00:ab:11:1a:49:39:51:4b:f1:45:b4",
"expiry-time": 1551337558
}
]
然后通过: 登录到新建的虚拟机,user为安装时起的用户名
ssh user@192.168.122.186
然后执行:
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service
检查 /etc/default/grub 可以看到配置最后有:
GRUB_CMDLINE_LINUX=""
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --stop=1"
对比了一下正常的Fedora 35虚拟机,Fedora 35虚拟机配置:
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="console=ttyS0,115200"
模仿Fedora配置修订Ubuntu的 /etc/fault/grub 配置:
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="console=ttyS0,115200"
这里应该有部分不一样,不过不用管,本来就有的不用删,没有的给他加上
然后更新grub:
sudo update-grub
重启系统以后就可以正确在 virsh console 控制台看到终端输出
KVM复制虚拟机
从这一步开始,参考新的文档 复制KVM虚拟机.
virt-clone --original ubuntu18.04 --name devstack --auto-clone
克隆时,原虚拟机必须处于关机状态shut off
复制之后卷会自动创建,使用下列命令查看
sudo virsh vol-list images_lvm
初始化虚拟机副本
sudo virt-sysprep -d test --hostname ubuntu-test --root-password password:for_example