• 搜索
  • 夜间模式
    ©2015-2025  Ethan's Blog Theme by OneBlog
    搜索
    标签
    # Amule # Gargoyle # LUCI # VIM # Python # Nginx # 反代 # Ansible # Apache # LNMP
  • 首页>
  • Linux>
  • 正文
  • CentOS下的KVM虚拟机

    2018年10月24日 45 阅读 0 评论 3525 字


    我有一台破旧的笔记本,说烂也不烂,配置还行,Intel I5 2代的CPU,8G内存,装了个CentOS跑各种服务,365天不停机服务(不折腾的情况下)。最近想要在上面安装KVM,装个Win Server 2012做windows装机服务器,为此还特地重装了系统。

    虚拟化支持


    首先确认机器是否支持虚拟化,其实现在的CPU基本都支持

    lscpu | grep Virtualization
    Virtualization:        VT-x #代表支持Intel的VT技术

    安装KVM程序


    yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
    systemctl enable libvirtd
    systemctl start libvirtd

    确认模块是否加载


    lsmod | grep -i kvm

    有输出kvm的内容即可,我用VMware测试的时候,需要重启一次虚拟机。

    配置网络桥接


    brctl show
    virsh net-list

    这个命令对我来说没什么用,virsh net-dumpxml default可以看到默认出给创建了一个私有网络,只能虚拟机间通信。
    正常情况下是创建一个虚拟网卡br0,然后将物理网卡桥接到这个虚拟网卡br0,然后在创建虚拟机的时候将网卡桥接到br0上面,这样虚拟机的网卡和br0都能获取到和宿主机之前同样的一个网段。
    动态获取IP的虚拟网卡br0配置如下:

    DEVICE="br0"
    BOOTPROTO="dhcp"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    ONBOOT="yes"
    TYPE="Bridge"
    DELAY="0"

    然后修改物理网卡配置

    vim /etc/sysconfig/network-scripts/ifcfg-enp5s0

    在最后面加一条BRIDGE=br0
    然后重启系统,用ifconfig看看,有br0接口。然后用brctl show查看,是桥接到物理网卡上面的

    br0             8000.5404a6abbfef       no              enp5s0

    创建虚拟机

    以windows server 2012 R2为例

    virt-install \
    --virt-type=kvm \
    --name windows \
    --ram 2048 \
    --vcpus=1 \
    --os-variant=windows \
    --cdrom=/home/Data/OS/cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso  \
    --disk /home/Data/OS/virtio-win-0.1.126_amd64.vfd,device=floppy \
    --network bridge=br0,model=virtio \
    --graphics vnc \
    --disk path=/home/Data/kvm/win2k12r2.qcow2,size=30,bus=scsi,format=qcow2

    参数解释:

    --name 指定虚拟机的名称
    --ram 指定Virtual Machine
    --disk的内存量path = xxx,size = xxx
    'path ='⇒指定虚拟机
    size ='⇒指定虚拟机的磁盘数量
    --vcpus 指定虚拟CPU
    --os-type 指定GuestOS 的类型
    --os-variant 指定GuestOS的类型 - 可能确认列表中使用以下命令osinfo-query os
    --network 指定虚拟机的网络类型
    --graphics 指定图形的类型。如果设置为“无”,则意味着非图形。
    --console 指定控制台类型
    --location 指定安装的位置,其中from
    --extra-args 指定在内核中设置的参数

    为什么会有--disk /home/Data/OS/virtio-win-0.1.126_amd64.vfd,device=floppy这条命令?是因为KVM创建windows虚拟机是找不到磁盘的,要额外加上驱动,以软驱的方式加载,方便在安装系统的时候可以手动选择加载驱动下载地址 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
    装完后移除镜像和软驱,编辑/etc/libvirt/qemu/目录下的虚拟机同名xml文件,找到如下内容<disk type='file' device='floppy'>和<disk type='file' device='cdrom'>并移除!
    2018-10-24_221256.png
    然后重启虚拟机就不会有镜像文件和软驱加载进来了。

    一些常用的命令


    virsh list --all #列出所有虚拟机
    virsh dominfo vmName #获取虚拟机信息
    virsh shutdown/start VM #关闭/开启虚拟机
    virsh autostart VM #设置虚拟机随KVM自动启动
    virsh reboot VM #安全软重启
    virsh reset VM #重置虚拟机

    删除虚拟机

    virsh shutdown VM
    virsh undefine VM
    virsh pool-destroy VM

    记得命令完成后删除对应的磁盘文件

    可能遇到的问题

    • 装机过程中,因为是命令行,怎么继续安装?当然是用VNC,但是可能会出现连接被拒绝的情况,为什么?因为VNC设置了默认只允许本地连接,需要修改如下内容/etc/libvirt/qemu.conf

      #vnc_listen = "0.0.0.0"

      去掉#,重启libvirt即可。

    • 怎么查看VNC端口?
      使用以下命令即可查看,然后使用vnc viewer连接即可,需要提前在Server端开启防火墙端口

      virsh dumpxml windows | grep vnc

    参考文章1
    参考文章2
    参考文章3
    参考文章4

    本文著作权归作者 [ Ethan ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    — END —
    Copyright©2015-2025  All Rights Reserved.  Load:0.008 s
    Theme by OneBlog V3.6.3
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。