作者:Chancel, 更新:2019 Aug 01, 字数:4941, 已阅:648
在已经习惯Linux的图形界面下,使用KVM体验良好,刚好Nas需要安装一个Windows7虚拟系统来使用迅雷、百度网盘等下载工具,但Nas并没有安装桌面系统,于是打算在Bash下纯手动敲命令行来创建虚拟机
本文是在Debian系的openmediavault上测试通过,大部分Debian发行版应该是完全一致的(Debian版本9.5) 其他Linux发行版可能有些许细微不同,请根据真实情况参考本文进行安装
检查虚拟化支持,有flags输出基本就支持虚拟化(除非是很老的机器否则一般都支持了)
egrep '(vmx|svm)' --color=always /proc/cpuinfo
安装环境
Tip:网上大部分资料提到的 libvirt-bin 在许多包管理器上都已经被拆分为libvirt-daemon-system和libvirt-clients了,根据情况安装这两个,libvirt-clients可以支持windows安装阶段的vnc访问
apt-get install kvm qemu-kvm bridge-utils virtinst libvirt-clients libvirt-daemon-system
建立桥接网络环境可能会导致网络断开,如果是ssh远程操作,请千万注意每一步的意义跟执行后果
创建桥接网卡
brctl addbr br0
建立与真实网卡的桥接,下面是我的网卡输出信息
root@chancel-ov:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 70:85:c2:82:20:27 brd ff:ff:ff:ff:ff:ff
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:bd:b3:99:14 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:85:c2:82:20:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.11.11/24 brd 192.168.11.255 scope global br0
valid_lft forever preferred_lft forever
可以看到 enp1s0是我的真实网卡(已经桥接了,所以看起来是没有IP地址的),建立br0与真实网卡的桥接
brctl addif br0 enp1s0
配置桥接网卡的IP获取模式,编辑 /etc/network/interfaces文件 如果要设置动态获取IP模式,注释掉真实网卡的所有配置,再输入虚拟网卡桥接到真实网卡的命令,如下面所示(我删掉了有关enp1s0的所有配置,可以选择注释掉)
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports enp1s0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
如果要设置成静态固定IP模式,可参考如下配置, 也要注释掉真实网卡的所有配置
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo br0
iface lo inet loopback
# Bridge setup
iface br0 inet static
bridge_ports eth0 eth1
address 192.168.1.2
broadcast 192.168.1.255
netmask 255.255.255.0
gateway 192.168.1.1
启用br0网卡
ifup br0
重启VNC监听设置要先关闭关联的虚拟机
编辑 /etc/libvirt/qemu.conf,配置好如下字段
vnc_listen = "0.0.0.0"
vnc_password = "XYZ12345" #密码任意设置
spice_listen = "0.0.0.0" #debian6 不需配置这个
配置完成后重启
systemctl restart libvirt-guests.service
首先要创建虚拟机需要使用的磁盘空间
qemu-img create -f qcow2 /opt/kvm/windows7.qcow2 32G
创建Windows7虚拟机
virt-install --name=windows7 --virt-type=kvm --hvm --ram=2048 --vcpus=2 --network bridge=br0,model=e1000 --graphics vnc,port=5900 --disk path=/opt/kvm/windows7/windows7.qcow2,bus=ide --os-type=windows --cdrom=/srv/dev-disk-by-id-ata-TOSHIBA_HDWD130_479AVK3AS-part1/systems/Windows/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso --debug
参数说明
使用 netstat -aptlen 查看是否有"0.0.0.0:5900"端口暴露出去,如果有,直接使用VNC进行连接并继续Windows的安装部署 部署完成之后会发现虚拟机可能没有网卡,更换桥接的驱动模式进行尝试
列出当前所有虚拟机
# Root用户
virsh list --all
# 普通用户
virsh --connect qemu:///system list --all
启动/关闭/销毁虚拟机
virsh start windows7
irsh shutdown windows7
virsh destroy windows7 && virsh undefine windows7
在最后面,我自己遇到了一个问题,虚拟机没有获取到IP,即使手动填了IP发现可以识别到网络但无法上网,但可以连接内网其他机器,而其他机器无法连接虚拟机的怪异现象,最后查询资料发现可能是开启了Firewalld的原因 尝试关闭Firewalld之后果然虚拟机就正常了 如果你是iptables的话,很幸运,使用如下指令开放设置
iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT
如果你是firewalld防火墙的话,使用如下指令可以尝试一下是否能启用dhcp自动获取
firewall-cmd --permanent --zone=public --remove-interface=enp0s3
firewall-cmd --permanent --zone=internal --add-interface=enp0s3
firewall-cmd --permanent --zone=internal --add-port=67/udp
firewall-cmd --permanent --zone=internal --add-port=68/udp
firewall-cmd --reload
debian,ubuntu 安装使用kvm虚拟机 - EdmundChen Debian 9 安装 KVM 虚拟机 - Herald Yu