Debian 11 命令行安装kvm以及各种虚拟机
验证是否支持kvm
1  | egrep -c '(svm|vmx)' /proc/cpuinfo  | 
结果不为0即可。
安装kvm
1  | apt-get install qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils  | 
设置网络
NAT网络
1  | virsh net-list --all  | 
查看default网络信息
1  | $ sudo virsh net-info default  | 
从输出中可以看到它桥接自网卡virbr0。
查看virbr0的信息:
1  | $ brctl show virbr0  | 
通过brctl可以查看所有桥接网卡信息:
1  | $ sudo brctl show  | 
Bridge网络
配置过程如下:
- 首先备份网络配置,以便出错时恢复:
 
1  | cp /etc/network/interfaces /etc/network/interfaces.bakup  | 
- 编辑网络配置,将eth0映射到br0,这里假设你电脑的物理网卡名称为eth0,注意不要随意修改网卡名称,如果你的网卡配置文件中auto后面的那个就是你的网卡名,只需要将下面的eth0换成你自己的网卡名就可以了:
 
1  | vi /etc/network/interfaces  | 
假如原有的网卡是eth0,且通过dhcp自动获取ip(即电脑连接路由器自动上网),注释或删除掉其他所有eth0相关的设置,其他内容不变,在文件最后添加如下内容:
1  | auto br0  | 
如果原有是手动配置的静态ip,则修改配置类似如下:
1  | auto br0  | 
带ipv6
1  | auto br0  | 
ip信息换成你自己的IP信息就可以了,关于注释中的那2句,从国外网站看到的,由于我是DHCP,不清楚是否有用,没有测试。
发现上面的内容中其实就是添加了四句内容,其中bridge_ports很明显后面跟的是你的物理网卡,也就是要桥接的网卡,如果你有多个网卡想要桥接,可以以逗号分隔多个网卡名。
- 重启网络:
 
1  | systemctl restart networking  | 
如果是ubuntu14.04及之前系统,或者debian中不是以systemd管理,则使用命令:
1  | /etc/init.d/networking restart  | 
如果该命令也失败,或不能运行,就直接重启系统试试。
现在通过brctl命令查看网络桥接情况,里面会多一个br0:
1  | $ sudo brctl show  | 
各种虚拟机的创建
- centos
 
镜像下载地址:
http://mirrors.aliyun.com/centos-vault/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
http://ftp.iij.ad.jp/pub/linux/centos-vault/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
命令:
1  | mkdir /home/vhost && cd /home/vhost  | 
- debian
 
镜像下载地址:
https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-12.0.0-amd64-DVD-1.iso
命令:
1  | mkdir /home/vhost && cd /home/vhost  | 
- windows
 
镜像下载地址:
Google Drive:
https://drive.google.com/drive/folders/1uLcbELSSrNZbh2lz-1rdZu9TE0QrlZKK?usp=sharing
命令:
1  | virt-install \  | 
无需virtio镜像。
- truenas-scale
 
镜像下载地址:
https://www.truenas.com/download-truenas-scale/
命令:
1  | virt-install \  | 
- 群晖
 
N5105未成功。
引导镜像及安装文件下载地址:
https://pan.gxnas.com:1443/GXNAS网盘-OneDrive/黑群晖
命令:
1  | qemu-img convert -f raw -O qcow2 synoboot.img syno-ds918-qcow2.img  | 
KVM虚拟机常用管理命令
KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/,该目录下存放了所有创建过的虚拟机配置文件。
查看正在运行的虚拟主机列表:
1  | virsh list  | 
查看所有虚拟机列表:
1  | virsh list --all  | 
查看虚拟机信息:
1  | virsh dominfo centos7  | 
启动虚拟机:
1  | virsh start centos7  | 
关闭虚拟机:
1  | virsh shutdown centos7  | 
暂停/挂起虚拟主机:
1  | virsh suspend centos7  | 
恢复暂停状态的虚拟机:
1  | virsh resume centos7  | 
软重启(安全重启,相当于在虚拟机内部点击重启选项)虚拟机:
1  | virsh reboot centos7  | 
硬重启虚拟机(不安全,有可能数据丢失,相当于强制按主机上的重启按钮):
1  | virsh reset centos7  | 
设置虚拟机随着宿主主机开机自动启动:
1  | virsh autostart centos7  | 
开机自动启动的虚拟机配置文件会自动在目录/etc/libvirt/qemu/autostart/目录下生成。
用开机自动启动:
1  | virsh autostart --disable centos7  | 
移除虚拟机定义,即从虚拟机列表中移除虚拟机:
1  | virsh undefine centos7  | 
该命令只是删除/etc/libvirt/qemu/目录下名为centos7.xml的配置文件,并不会删除虚拟机磁盘文件
通过虚拟机配置文件重新定义虚拟机:
1  | virsh define centos7.xml  | 
强制关闭虚拟机电源:
1  | virsh destroy centos7  | 
编辑虚拟机配置文件:
1  | virsh edit centos7  | 
该命令会调用本地编辑器编辑虚拟机配置文件,虽然也可以手动使用vim去编辑/etc/libvirt/qemu/centos7.xml下的虚拟机配置文件,但不建议,最好还是通过virsh edit调用编辑器来编辑虚拟机配置文件
查看virsh的所有命令或指定的命令:
1  | virsh --help  | 
查看当前主机上hypervisor的连接路径:
1  | virsh uri  | 
创建虚拟机硬盘(格式为qcow2,该格式创建后不会立即占用10G空间,而是在使用中动态增长;也可以是raw格式,会立即分配空间。大小为10G):
1  | qemu-img create -f qcow2 test.qcow2 10G  | 
调整容量大小
1  | qemu-img resize /home/vhost/win10-ltsc.qcow2 +5G  | 
查看磁盘信息:
1  | qemu-img info test.img  | 
qcow2格式文件的快照管理命令:
1  | 创建快照:qemu-img snapshot -c <标签> test.qcow2  | 
进入virsh管理程序:
1  | virsh  | 
出现virsh提示符后,你就可以使用任何virsh命令了。
上面的命令对应的非root管理用户命令,即没有将当前用户组加入到管理组,且没有root权限的用户,可以通过加入–connect qemu:///system的方式实现虚拟机的管理,如创建和移除虚拟机的命令:
1  | $ virsh --connect qemu:///system create centos7.xml  | 
感觉还是设置好用户组之后直接使用virsh管理KVM虚拟机更加方便
KVM虚拟机克隆
即可以使用virt-clone命令来进行虚拟机的克隆,也可以通过手动拷贝磁盘文件及原虚拟机的配置文件来完成克隆,注意如果使用拷贝的方式需要手动修改克隆后的虚拟机的host名称、mac信息以及配置文件中的uuid和名称,否则会冲突,当然克隆生成的虚拟机中的hostname也是一样的,同样建议修改国,但virt-clone会自动随机生成uuid、mac等信息。
通过virt-clone命令克隆命令如下,克隆虚拟机时需要确保被克隆的虚拟机处于关闭或者挂起状态。
1  | virt-clone --original=vm-to-clone \  | 
–original后面需要是被克隆的虚拟机名,–name后面是你克隆后的虚拟机名,–file后面是克隆虚拟机的磁盘映像需要存放的位置,可以使用-o,-n,-f来简写,当原虚拟机有多个硬盘文件时,后面需要跟多个–file。注意virt-clone无法指定静态网络参数
virt-clone还可以指定uuid,mac等信息,省略的信息表示由virt自动生成。
virt-clone后面也可以只接–original参数,然后再接个–auto-clone参数,就是由virt-clone自动进行克隆:
自动克隆之后的输出如下:1
2
3
4
5Original name : MyVM
Generated clone name : MyVM-clone
Original disk path : /home/user/foobar.img
Generated disk path : /home/user/foobar-clone.img
也可以通过man virt-clone查看更详细的参数,
如果需要手动克隆,其实就是复制一份导出的原虚拟机配置文件到xml,将修改其中需要修改的内容,然后复制一份原虚拟机的磁盘映像文件,并在xml文件中修改相应文件,再使用virsh define定义新虚拟机的配置文件即可。
其实vrit-clone的克隆也就是复制一份原虚拟机的磁盘及配置文件,然后会在克隆时修改配置文件中的mac地址,其他原虚拟机中的所有内容都不会变化,因为virt-clone并不会修改虚拟机内容.如果想创建一个不包含个人信息及网络配置的虚拟机镜像,则需要使用virt-sysprep进行虚拟机部署镜像制作。
直通pci设备
1  | virsh nodedev-detach pci_0000_05_00_0  | 
