作者:E4b9a6, 创建:2024-01-07, 字数:4375, 已阅:396, 最后更新:2024-01-07
在Linux下,KVM的体验十分优秀
刚好Nas需要安装一个 Windows7 虚拟系统来使用迅雷、百度网盘等下载工具,于是打算在Bash下纯手动敲命令行来创建虚拟机
本文是在 Debian
系的 openmediavault
上测试通过,大部分Debian发行版操作步骤是差不多的
其他 Linux 发行版可能有些许细微不同,请根据真实情况参考本文进行安装
首先检查虚拟化支持,有flags输出支持虚拟化
grep '(vmx|svm)' --color=always /proc/cpuinfo
安装环境
sudo apt-get install kvm qemu-kvm bridge-utils virtinst libvirt-clients libvirt-daemon-system
网上大部分资料提到的 libvirt-bin 在许多包管理器上都已经被拆分为libvirt-daemon-system和libvirt-clients了,根据情况安装这两个,libvirt-clients可以支持windows安装阶段的vnc访问
上述程序说明
建立桥接网络环境可能会导致网络断开,如果不是特别熟练,不建议远程操作
首先创建桥接网卡
brctl addbr br0
使用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配置
# 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
无论采用哪一种配置,都要注释或删掉enp1s0
的配置
最后启用br0网卡
ifup br0
VNC是一种远程配置,用于安装系统时远程(类似于微软的远程桌面)
编辑/etc/libvirt/qemu.conf
,配置好如下字段
vnc_listen = "0.0.0.0"
vnc_password = "XYZ12345" #密码任意设置
spice_listen = "0.0.0.0" #debian6 不需配置这个
配置完成后重启虚拟机配置
sudo systemctl restart libvirt-guests.service
首先要创建虚拟机需要使用的磁盘空间
SUDO qemu-img create -f qcow2 windows7.qcow2 32G
接着创建Windows7虚拟机
# 创建一个名为windows7的虚拟机,操作系统类型为windows
# 使用KVM虚拟化技术,启用硬件虚拟化扩展,分配2048MB的内存给虚拟机
# 分配2个虚拟CPU给虚拟机
# 使用网络桥接模式,网络接口模型为e1000
# 创建一个名为windows7.qcow2的磁盘镜像文件,使用IDE总线连接
# 启用VNC图形界面访问,监听5900端口
# 使用cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso文件作为光盘镜像
sudo virt-install --name=windows7 --os-type=windows \
--virt-type=kvm --hvm --ram=2048 \
--vcpus=2 --network bridge=br0,model=e1000 \
--disk path=windows7.qcow2,bus=ide \
--graphics vnc,port=5900 \
--cdrom=cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso
创建完成后,使用sudo netstat -tlnp
查看一下5900端口是否正在监听,如有,则可用vnc客户端连接至5900端口
列出当前所有虚拟机
sudo virsh list --all
启动/关闭/销毁虚拟机
sudo virsh start windows7
sudo virsh shutdown windows7
sudo virsh destroy windows7 && virsh undefine windows7
最后,如果遇到动态IP获取下,虚拟机没有获取到IP,可能是防火墙问题
如果是iptables的话,开放如下
sudo iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT
如果是firewalld防火墙,开放如下
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