IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Linux下用KVM虚拟Windows7

    chancel发表于 2024-06-14 00:00:00
    love 0
    <![CDATA[

    在Linux下,KVM的体验十分优秀

    刚好Nas需要安装一个Windows7虚拟系统来使用迅雷、百度网盘等下载工具,于是打算在Bash下纯手动敲命令行来创建虚拟机

    本文是在Debian系的openmediavault上测试通过,大部分Debian发行版操作步骤是差不多的

    其他Linux发行版可能有些许细微不同,请根据真实情况参考本文进行安装

    1. 准备工作

    1.1. 程序安装

    首先检查虚拟化支持,有flags输出支持虚拟化

    Bash
    egrep '(vmx|svm)' --color=always /proc/cpuinfo
    

    安装环境

    Bash
    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访问

    上述程序说明

    • kvm:KVM核心
    • qemu-kvm:KVM的设备模拟,由开源虚拟化软件QEMU中的管理工具演变而来
    • bridge-utils:桥接网卡的集成管理工具
    • libvirt-clients/libvirt-daemon-system:虚拟机命令行管理工具
    • virtinst:虚拟机创建工具

    1.2. 桥接网络

    建立桥接网络环境可能会导致网络断开,如果不是特别熟练,不建议远程操作

    首先创建桥接网卡

    Bash
    brctl addbr br0
    

    使用ip a查看机器实际网络接口,如下

    Bash
    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与真实网卡的桥接

    Bash
    brctl addif br0 enp1s0
    

    配置桥接网卡的IP获取模式,编辑 /etc/network/interfaces 文件

    动态获取IP配置

    TEXT
    # 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配置

    TEXT
    # 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网卡

    Bash
    ifup br0
    

    1.3. VNC监听配置

    VNC是一种远程配置,用于安装系统时远程(类似于微软的远程桌面)

    编辑/etc/libvirt/qemu.conf,配置好如下字段

    Bash
    vnc_listen = "0.0.0.0"
    vnc_password = "XYZ12345" #密码任意设置
    spice_listen = "0.0.0.0" #debian6 不需配置这个
    

    配置完成后重启虚拟机配置

    TEXT
    sudo systemctl restart libvirt-guests.service
    

    2. 创建虚拟机

    首先要创建虚拟机需要使用的磁盘空间

    Bash
    SUDO qemu-img create -f qcow2 windows7.qcow2 32G
    

    接着创建Windows7虚拟机

    Bash
    # 创建一个名为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端口

    2.1. 虚拟机管理

    列出当前所有虚拟机

    Bash
    sudo virsh list --all
    

    启动/关闭/销毁虚拟机

    Bash
    sudo virsh start windows7
    sudo virsh shutdown windows7
    sudo virsh destroy windows7 && virsh undefine windows7
    

    最后,如果遇到动态IP获取下,虚拟机没有获取到IP,可能是防火墙问题

    如果是iptables的话,开放如下

    Bash
    sudo iptables -A INPUT -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    

    如果是firewalld防火墙,开放如下

    Bash
    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
    



沪ICP备19023445号-2号
友情链接