CentOS 7 上使用 KVM,关联 virtualize
- 参考
- How to install KVM on CentOS 7 / RHEL 7 Headless Server
- Linux Hypervisor Setup (libvirt/qemu/kvm)
- Virtualization using KVM + QEMU + libvirt
- qemu:///system vs qemu:///session
- Install Windows 10 on Pop!OS - Raphael
- Performance Tweaks
- 10 Easy Steps To Install Windows 10 on Linux KVM – KVM Windows
-
[Solution How To Extend Windows Storage in KVM ?](https://getlabsdone.com/how-to-extend-windows-storage-in-kvm/) - Virtualization Best Practices
虽说是suse的文档,道理是相通的。
-
检查是否支持虚拟化,不支持的话,重启去BIOS里面设置下
1 2 3
lscpu | grep Virtualization Virtualization: VT-x
-
安装 KVM
1
yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
Start the libvirtd service:
1 2
systemctl enable libvirtd systemctl start libvirtd
Verify kvm installation
1 2
# Make sure KVM module loaded lsmod | grep -i kvm
-
权限设置
这一步在centos上使用root倒不需要,在 debian 系上用的。- 添加用户到
kvm
和libvirt
用户组1 2
sudo adduser foo kvm sudo adduser foo libvirt
- libvirt.conf
1 2 3
$ mkdir ~/.config/libvirt $ sudo cp -rv /etc/libvirt/libvirt.conf ~/.config/libvirt/ $ sudo chown foo: ~/.config/libvirt/libvirt.conf
修改 libvirt.conf
1
uri_default = "qemu:///system"
-
qemu.conf
修改
/etc/libvirt/qemu.conf
, 设置user
为自己,group
为libvirt
1 2
user = "foo" group = "libvirt"
- 重启
libvirt
服务1
sudo systemctl start libvirtd
- 添加用户到
-
Configure bridged networking
By default dhcpd based network bridge configured by libvirtd.
brctl show
1 2
bridge name bridge id STP enabled interfaces virbr0 8000.525500b8fe2c yes virbr0-nic
virsh net-list
1 2 3
Name State Autostart Persistent ---------------------------------------------------------- default active yes yes
All VMs (guest machine) only have network access to other VMs on the same server. A private network 192.168.122.0/24 created
1
virsh net-dumpxml default
If you want your VMs avilable to other servers on your LAN, setup a a network bridge on the server that connected to the your LAN. Update your nic config file such as ifcfg-enp3s0 or em1:
编辑
/etc/sysconfig/network-scripts/enp3s0
,添加BRIDGE=br0
编辑
/etc/sysconfig/network-scripts/ifcfg-br0
,添加:1 2 3 4 5 6 7 8
DEVICE="br0" # I am getting ip from DHCP server # BOOTPROTO="dhcp" IPV6INIT="yes" IPV6_AUTOCONF="yes" ONBOOT="yes" TYPE="Bridge" DELAY="0"
Restart the networking service (warning ssh command will disconnect, it is better to reboot
1
systemctl restart NetworkManager
Verify it with brctl command:
brctl show
1 2 3
bridge name bridge id STP enabled interfaces br0 8000.e0d55e4b60d1 no enp0s31f6 virbr0 8000.525500b8fe2c yes virbr0-nic
-
======================================================
-
创建VM(以创建centos 7为例)
- 下载iso
1 2 3 4 5 6
cd /var/lib/libvirt/boot/ wget https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso # Verify ISO images: wget https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/sha256sum.txt sha256sum --ignore-missing -c sha256sum.txt
- Create CentOS 7.x VM
下例创建 CentOS 7.x VM with 2GB RAM, 2 CPU core, 1 nics and 40GB disk space1 2 3 4 5 6 7 8 9 10
virt-install \ --virt-type=kvm \ --name centos7 \ --ram 2048 \ --vcpus=1 \ --os-variant=centos7.0 \ --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-2009.iso \ --network=bridge=br0,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
- 看下 vnc 设置端口,例如,端口是 5901
1 2
virsh dumpxml centos7 | grep vnc <graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
- 在工作电脑上设置一个到虚拟机的隧道
1
ssh vivek@server1.cyberciti.biz -L 5901:127.0.0.1:5901
- 在工作电脑上打开 vnc viewer
连接地址: localhost:5900 - vnc连上后,就会看到centos的安装UI界面,按照提示安装。
- centos安装完成后,重启完成,vnc可以连接上去,操作命令行登录,安装openssh后,使用ssh。
-
qcow2 磁盘文件是逐步增长的,安装centos完成后,
/var/lib/libvirt/images/centos7-1.qcow2
的大小约 1.7G - 配置下网卡
虚拟机创建好,在virt-manager
图形界面下,可以看到有一个虚拟网卡:- Network source: Bridge br0: Host devices enp0s31f6
- Device model: virtio
但此时网卡默认不会启动,修改下
/etc/sysconfig/network-scripts/
中ONBOOT=yes
,
然后重启虚拟机,虚拟网卡启动后,通过host 的 bridge 进入 host 所在的 LAN。 -
查询、启动、关闭虚拟机 ==============================================
- 列出所有虚拟机
~~~sh
# virsh list –all
Id Name State
—————————————————-- centos7-1 shut off
~~~
- centos7-1 shut off
- 使用
virsh start
启动虚拟机1 2 3 4 5 6
virsh start centos7-1 virsh list --all Id Name State ---------------------------------------------------- 1 centos7-1 running
- 使用
virsh shutdown
关闭虚拟机1
virsh shutdown centos7-1
- 使用 virt-manager 安装 Windows 10 ==============================================
- New VM
- Choose how you would like to install the operating system:
勾选 Local install media(ISO image or CDROM) - 选择 windows 10 iso 文件
- 勾选 Automatically detect operating system based on install media
识别出来: OS type : Windows , Version : Microsoft Windows 10 - 设置 Memory: 8192M (8G)
- 设置CPU数目
- 设置硬盘大小: 默认 40G
- 设置虚拟机Name
- 勾选 Customize configuration before install
- Network selection: 这里选bridge 模式: Bridge br0: Host device enp0s31f6
-
点击 Finish,完成创建。
- 继续,安装之前的配置
- 修改虚拟硬盘的性能
- 选中 “IDE Disk 1”,修改 disk storage type 为 virtio (默认是IDE)
- 点 Apply
- 选中 “VirtIO Disk 1”
Performance Options
Cache mode: none
IO mode: Hypervisor default
- 设置windows iso 的 CDROM
- source path 点击connect,选中windows 10 的安装iso
- Disk bus,还是选IDE,虽然慢点,兼容性好
- 设置kvm的windows驱动 CDROM
- Add Hardware,选择
virtio-win-0.1.229.iso
,Disk bus,还是选IDE,SATA的话,后面windows installer 找不到。
- Add Hardware,选择
-
选中“Boot Options”,设置下启动顺序
-
选中 “CPU”, 勾选 “Manually set CPU topology”
Sockets: 1
Cores 和 Threads 自己看物理CPU性能判断吧。 - 选中 “Display Spice” ,不用改,保持默认
Type: Spice server
Listen type: Address
Address: Hypervisor default
Port: 勾选 Auto
TLS Port: 勾选 Auto -
选中 “Video QXL”,不用改,保持默认
Model: QXL” - 配置好后,不要x掉这个配置窗口!! 点击窗口左上角“Begin Installation”
- 按照提示安装,弹出“选择要安装的驱动程序”
提示:缺少计算机所需的介质驱动程序。 - 点击“Load drivers”,浏览文件系统,在
virtio-win-0.1.229.iso
的盘下面找到驱动
硬盘驱动,amd64/w10
目录下
网卡驱动,NetKVM
目录下,我没装这个驱动,也正常的。
显卡驱动,qxldod
目录下,我没装这个驱动,也正常的。 - 接下来和不同安装 Windows 10 过程一样,直到安装完成,进入windows10
- 安装 VirtIO guest tools ,会提高虚拟机Spice的性能和集成度。
包括qxl video driver and the SPICE guest agent (for copy and paste, automatic resolution switching, …) - 进入
virtio-win-0.1.229.iso
挂载的盘符,运行根目录下的wirtio-win-guest-tools
- 一路next,直到装好。
设置VM自动启动
设置自动启动
1 | virsh autostart vmName |
关闭自动启动
1 | virsh autostart VMNameHere --disable |
关闭VM
1 | virsh shutdown your-vm-name |
克隆VM
1 2 3 4 | virt-clone \ --original ubuntu18.04 \ --name cloned-ubuntu \ --file /var/lib/libvirt/images/cu.qcow2 |
目录说明
虚拟机image默认目录: /var/lib/libvirt/images
系统iso光盘文件目录: /var/lib/libvirt/isos
虚拟机的配置xml: /etc/libvirt/qemu
CPU型号信息: /usr/share/libvirt/cpu_map.xml
保存VM当前状态,host重启后也能恢复
保存VM当前状态: virsh managedsave <domain-name>
恢复: virsh start <domain-name>
保存的状态文件位置: /var/lib/libvirt/qemu/save/<domain-name>.save
-
执行
managedsave
的时候报错:blocked by non-migratable device 0000:00:06.0/ich9_ahci
1
error: internal error: unable to execute QEMU command 'migrate': State blocked by non-migratable device '0000:00:06.0/ich9_ahci'
据 proxmox 论坛的帖子 说: qemu 代码在 sata disk 的保存还是存在问题,不要缓存包含sata设备的VM。
解决方法: 删除 SATA 类型的硬盘,同时也要删除 SATA Controller
KVM 中一般使用 VirtIO 类型的硬盘,不用 SATA 也没啥关系。
硬盘格式
img 格式,转换为 qcow2
1 | qemu-img convert -f raw -O qcow2 image.img image.qcow2 |