kvm linux 虚拟化技术_linux虚拟化技术和kvm - CSDN
  • Linux KVM 虚拟化技术

    千次阅读 2018-09-21 18:56:32
    KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:  ① 、它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。  ②、它...

    一  、 KVM 介绍 ;

    KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:
     ① 、它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
     ②、它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
     ③ 、它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
     ④ 、它需要支持虚拟化扩展的 CPU。
     ⑥ 、它是完全开源的 

     

    二 、KVM 架构 ;

     KVM 的架构非常简单,KVM 就是一个内核模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux 进程,通过对这个进程的管理就可以完成对虚拟机的管理。

    KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案,KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。

     但是,KVM 本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。

    Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。
    KVM:运行在内核空间,提供 CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。
    QEMU:修改过的被 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

     

    注意 :KVM  公司使用场景 ;

    一般是底层采用 KVM 上层采用 OpenStack ,通过OpenStack 来管理 KVM 的  ;

     

    三 、 KVM 的功能列表  ;
    KVM 所支持的功能包括:
     ① 、支持 CPU 和 memory 超分(Overcommit)
     ② 、支持半虚拟化 I/O (virtio)
     ③ 、支持热插拔 (cpu,块设备、网络设备等)
     ④ 、支持对称多处理(Symmetric Multi-Processing,缩写为 SMP )
     ⑤ 、支持实时迁移(Live Migration)
     ⑥ 、支持 PCI 设备直接分配和 单根 I/O 虚拟化 (SR-IOV)
     ⑦ 、支持 内核同页合并 (KSM )
     ⑧ 、支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )

     

    四 、 安装部署 KVM  ;

    安装之前需要确保开启了  BIOS  此功能 ;

    4.1 、确保把 disable  改成 enable 

    4.2 、  配置内存不要少于3G ,配置虚拟机支持KVM虚拟化  ;

     

    4.3  、  基础环境检查 ;

    [root@kvm ~]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    [root@kvm ~]# uname -r
    3.10.0-693.el7.x86_64
    [root@kvm ~]# getenforce 
    Disabled
    [root@kvm ~]# systemctl status firewalld.service 
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:firewalld(1)
    [root@kvm ~]# hostname -I
    10.0.0.200 172.16.1.200 
    [root@kvm ~]# 
     

    4.4 、KVM 检查,其实KVM已经内置到了centos7 的内核中 ;

    [root@kvm ~]# lsmod |grep kvm
    kvm_intel             170086  0 
    kvm                   566340  1 kvm_intel
    irqbypass              13503  1 kvm
    [root@kvm ~]# 
     

    [root@kvm ~]# grep -Eo '(vmx|svm)' /proc/cpuinfo
    vmx                                                  ---->>  这里需要保证 必须要有一个 vmx 一个vmx 表示一个 cpu  也就是一核的 两个表示是两核
    [root@kvm ~]# 

     

    五 、安装管理kvm 的命令 ;

    [root@kvm ~]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install 

    查看已经安装的软件包 ;

    [root@kvm ~]# rpm -qa|grep -E 'qemu|libvirt|virt'

    virt-what-1.13-6.el7.x86_64

    libvirt-daemon-driver-storage-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-config-network-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-nodedev-2.0.0-10.el7_3.9.x86_64

    libvirt-2.0.0-10.el7_3.9.x86_64

    ipxe-roms-qemu-20160127-5.git6366fa7a.el7.noarch

    qemu-kvm-common-1.5.3-126.el7_3.10.x86_64

    libvirt-client-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-network-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-nwfilter-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-qemu-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-lxc-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-interface-2.0.0-10.el7_3.9.x86_64

    libvirt-glib-0.2.3-1.el7.x86_64

    virt-manager-common-1.4.0-2.el7.noarch

    qemu-kvm-1.5.3-126.el7_3.10.x86_64

    virt-manager-1.4.0-2.el7.noarch

    qemu-img-1.5.3-126.el7_3.10.x86_64

    libvirt-daemon-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-config-nwfilter-2.0.0-10.el7_3.9.x86_64

    libvirt-daemon-driver-secret-2.0.0-10.el7_3.9.x86_64

    libvirt-python-2.0.0-2.el7.x86_64

    virt-install-1.4.0-2.el7.noarch

    qemu-kvm-tools-1.5.3-126.el7_3.10.x86_64

    [root@localhost ~]#

     

    ===========================================================

    安装包详解;

    python-virtinst-0.600.0-29.el6.noarch          # 一套Python的虚拟机安装工具

    gpxe-roms-qemu-0.9.7-6.14.el6.noarch       # 虚拟机iPXE的启动固件,支持虚拟机从网络启动

    virt-manager-0.9.0-29.el6.x86_64                # 基于Libvirt的图像化虚拟机管理软件,需要图形界面操作系统

    qemu-img-0.12.1.2-2.479.el6.x86_64           # 用于操作虚拟机硬盘镜像的创建、查看和格式转化

    libvirt-python-0.10.2-54.el6.x86_64              # libvirt为Python提供的API

    qemu-kvm-0.12.1.2-2.479.el6.x86_64          # KVM在用户空间运行的程序

    qemu-kvm-tools-0.12.1.2-2.479.el6.x86_64

    libvirt-0.10.2-54.el6.x86_64                         # 用于管理虚拟机,它提供了一套虚拟机操作API

    libvirt-client-0.10.2-54.el6.x86_64           # Libvirt的客户端,最重要的功能之一就是就在宿主机关机时可以通知虚拟机也关机,使虚拟机系统                                                                      正常关机,而不是被强制关机,造成数据丢失

    virt-top-1.0.4-3.15.el6.x86_64             # 类似于top命令,查看虚拟机的资源使用情况

    virt-what-1.11-1.2.el6.x86_64              # 在虚拟机内部执行,查看虚拟机运行的虚拟化平台

    virt-viewer-0.5.6-8.el6.x86_64             # 显示虚拟机的控制台console

     

    5.1  、 启动  libvirtd 服务  ; 

    [root@kvm ~]# systemctl start libvirtd.service                --->>  启动 libvirtd 服务会出现 3 4 网卡信息 
    [root@kvm ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:ed:fb:50 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:feed:fb50/64 scope link 
           valid_lft forever preferred_lft forever
    3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
        link/ether 52:54:00:86:12:85 brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
           valid_lft forever preferred_lft forever
    4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
        link/ether 52:54:00:86:12:85 brd ff:ff:ff:ff:ff:ff

    [root@kvm ~]# 

    [root@kvm ~]# systemctl status libvirtd.service              --->>  查看服务状态   ;
    ● libvirtd.service - Virtualization daemon
       Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2018-09-21 21:29:26 CST; 1min 23s ago        -->>  这里是绿色的表示启动成功 ;
         Docs: man:libvirtd(8)
               https://libvirt.org
     Main PID: 18713 (libvirtd)
       CGroup: /system.slice/libvirtd.service
               ├─18713 /usr/sbin/libvirtd
               ├─18834 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dh...
               └─18835 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dh...

     

    六  、  开始创建虚拟机  ;

    6.1 、创建虚拟硬盘,以后的数据放在哪里  ;

    [root@kvm ~]# mkdir -p /application/kvm_data
    [root@kvm ~]# cd /application/kvm_data
    [root@kvm kvm_data]# qemu-img create -f qcow2 /application/kvm_data/moban.qcow2 10G
    [root@kvm kvm_data]# ll -h
    total 196K
    -rw-r--r-- 1 root root 193K Sep 21 21:35 moban.qcow2
     

    create          --->>  创建  ;
    -f                 --->> 指定磁盘格式  ;
    moban.qcow2       --->>  虚拟磁盘文件名称     大小为 10G   ;


    6.2  、查看虚拟磁盘的详细信息 ;

    [root@kvm kvm_data]# qemu-img info moban.qcow2 
    image: moban.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)            ---->>   实际大小 
    disk size: 196K                                                 ---->>  使用中的大小
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    [root@kvm kvm_data]# 

     

    6.3   安装虚拟机( 挂载光盘 ) ;

     

    6.4  、创建 挂目录 ;

    [root@kvm kvm_data]# mkdir -p /application/tools
    [root@kvm kvm_data]# cd /application/tools
    [root@kvm kvm_data]#  dd if=/dev/sr0 of=/application/tools/CentOS7_2.iso        --- >> 挂载镜像
    [root@kvm tools]# ll -h
    total 4.1G
    -rw-r--r-- 1 root root 4.1G Sep 21 22:00 CentOS7_2.iso
    [root@kvm tools]# 
     

    安装 KVM 图形界面 ;(注意 ; 这里需要一个  VNC 的远程连接软件 )

    virt-install --virt-type=kvm --name=c72-moban --vcpus=1 -r 1024 -c /application/tools/CentOS7_2.iso --network network=default --graphics vnc,listen=0.0.0.0--noautoconsole --os-type=linux --os-variant=rhel7 --disk 
    path=/application/kvm_data/moban.qcow2,size=10,format=qcow2

    参数注解 ;

    --virt-type=kvm              --->>  指定 kvm 的虚拟化来安装虚拟机  ;

    --name=c72-moban       --->>  指定虚拟机的名称  ;

    --vcpus=1                      --->>  指定cpu 的核数

    -r 1024                         --->>  指定的是内存 1024  1G 这里最少给1G 少于1G 是看不到图形的 ;

    -c                                  --->> 指定了安装镜像的路径  ;

    network                         --->> 指定了网络类型   

    graphics                        --->> 指定图形化安装 指定了使用 vnc  ; 

    --os-type=linux              --->>  指定linux 系统  ;

    --os-variant=rhel7          --->> 指定系统是红帽 7 

    --disk path                      --->> 指定了磁盘的系统文件 ;

    安装第2台虚拟机需要改动的2 个地方  ;

     

     

    [root@kvm kvm_data]# virt-install --virt-type=kvm --name=c72-moban --vcpus=1 -r 1024 -c /application/tools/CentOS7_2.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/application/kvm_data/moban.qcow2,size=10,format=qcow2

     

    Starting install...                                             ------->>  执行以上命令结束之后,到 vnc 界面点击确认确保是可以看到安装页面的表示成功 ;
    Domain installation still in progress. You can reconnect to 
    the console to complete the installation process.
    [root@kvm kvm_data]# 
     

    之后就是安装系统的界面  。。。。。。。。。。。。。。。。。

     

    VNC  的端口是 5900 

     

     

    七  、  命令行中查看和管理虚拟机的命令 ;

    [root@kvm kvm_data]# virsh list --all               ---->>  查看正在运行的虚拟机,虚拟机列表
     Id    Name                           State
    ----------------------------------------------------
     1     c72-moban                      running
     

    生成kvm虚拟机: virt-install

    查看在运行的虚拟机: virsh list

    查看所有虚拟机: virsh list --all

    查看kvm虚拟机配置文件: virsh dumpxml name

    启动kvm虚拟机: virsh start name

    正常关机:virsh shutdown name

    非正常关机(相当于物理机直接拔掉电源):virsh destroy name

    删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)

    根据配置文件定义虚拟机:virsh define file-name.xml

    挂起,终止: virsh suspend name

    恢复挂起状态:  virsh resume name

     

    这两个文件最好长备份一下  ;

    KVM  虚拟机在宿主机就是一个进程 

    当启动第一个虚拟机是用的默认的端口 5900 , 第二个是 5901  依次类推,所以在启动第二台的时候需要加上端口号 

    磁盘文件格式 ;

     

    八 、虚拟机克隆  ;

    8.1    确保虚拟机是关闭状态 

    [root@kvm kvm_data]# virsh shutdown c72-moban    --->>  关闭c72-moban 虚拟机

    [root@kvm kvm_data]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     c72-moban                      shut off

     

    8.2  、 克隆 

    [root@kvm kvm_data]# ls
    moban.qcow2
    [root@kvm kvm_data]# cp moban.qcow2 clone.qcow2
    [root@kvm kvm_data]# ll -h
    total 2.1G
    -rw-r--r-- 1 root root 1.1G Sep 22 02:25 clone.qcow2
    -rw-r--r-- 1 root root 1.1G Sep 22 02:11 moban.qcow2
    [root@kvm kvm_data]# pwd
    /application/kvm_data
    [root@kvm kvm_data]# 

    root@kvm kvm_data]# virsh dumpxml c72-moban >/tmp/moban.xml       --->>  导出模板文件 ;

    [root@kvm kvm_data]# cp /tmp/moban.xml{,.ori}         --->>  备份模板文件 ;

     

    修改配置文件 ;

    uuid  和 mac   随便改几个数字即可,只要保证不一样就行 ;

     

    现在娱有了 虚拟机的新的磁盘文件,需要导入了 ;

    [root@kvm tmp]# virsh define moban.xml           --->>  导入文件 
    Domain c72-clone defined from moban.xml

    [root@kvm tmp]# 

     

    [root@kvm tmp]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     c72-clone                      shut off
     -     c72-moban                      shut off

     

    [root@kvm tmp]# virsh start c72-clone            --->>   启动这个虚拟机 
    Domain c72-clone started

    [root@kvm tmp]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     2     c72-clone                      running
     -     c72-moban                      shut off

    [root@kvm tmp]# 
     

     

    展开全文
  • KVM虚拟化技术

    千次阅读 2019-05-21 21:45:05
    KVM虚拟化 什么是虚拟化虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。 为什么要用虚拟化? 充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。 场景1:同一...

    KVM虚拟化

    什么是虚拟化?

    虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。
    

    为什么要用虚拟化?

    充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。
    
    场景1:同一台物理机运行多个php版本 php5.3(openssl,gd)  php5.5  php7.2
    场景2:机房的迁移,解决了硬件和系统的依赖
    场景3:openstacks环境,软件发布方式
    场景4:开发环境和测试环境,使用虚拟化
    场景5:业务的快速部署  
    
    虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖
    

    KVM虚拟化管理软件的安装

    安装软件

    yum install -y libvirt virt-install qemu-kvm
    
    libvirt        # 虚拟机管理软件
    virt-install   # 虚拟机的安装工具和克隆工具
    qemu-kvm       # 管理虚拟机的虚拟磁盘
    

    启动服务

    systemctl start libvirtd.service
    systemctl enable libvirtd.service
    

    启动一个kvm虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    --virt-type               # 指定虚拟化类型
    --os-type                 # 指定系统类型
    --os-variant              # 指定系统版本
    --name                    # 指定虚拟机的名称
    --memory                  # 指定虚拟机内存
    --vcpus                   # 指定虚拟机CPU
    --disk                    # 指定虚拟机磁盘文件路径及名称、磁盘文件类型、磁盘空间
    --cdrom                   # 指定虚拟机安装的镜像
    --network                 # 指定网络
    --graphics                # 
    --noautocondole           # 不加改参数创建虚拟机的时候会夯住
    

    raw和qcow2的区别

    raw:裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输
    qcow2:cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输
    

    KVM虚拟机的日常管理

    查看虚拟机列表

    virsh list
    virsh list --all
    

    开启虚拟机

    virsh start centos7     # 最后跟的是KVM虚拟机的名称
    

    关闭虚拟机

    virsh shutdown centos7  # 正常关闭
    virsh destroy centos7   # 拔电源
    

    查看虚拟机配置

    virsh dumpxml centos7
    virsh dumpxml centos7 > centos7-off.xml
    

    删除虚拟机

    # 删除虚拟机之前先关闭虚拟机
    virsh undefine centos7
    

    导入虚拟机

    virsh define centos7-off.xml
    

    修改虚拟机配置

    # 自带语法检查
    virsh edit centos7
    

    虚拟机重命名

    virsh domrename centos7 centos-7
    

    挂起虚拟机

    virsh suspend centos-7
    

    恢复虚拟机

    virsh resume centos-7
    

    查询vnc端口号

    virsh vncdisplay centos-7
    

    KVM虚拟机开机启动

    # KVM虚拟机开机启动前提是libvirtd开机启动。
    systemctl enable libvirtd
    # KVM开启自启
    virsh autostart centos-7
    

    KVM虚拟机console登录

    # 首先在虚拟机的内执行以下命令
    grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    # 重启KVM虚拟机,在KVM虚拟机内执行,重启后真正的虚拟机会关机
    reboot
    # 开启KVM虚拟机并使用console连接虚拟机
    virsh start centos-7
    virsh console centos-7
    

    KVM虚拟机磁盘格式转换

    qemu-img convert -f raw -O qcow2 /data/centos7.raw /data/centos7.qcow2
    

    qemu-img命令管理

    # 查看虚拟机磁盘文件信息
    qemu-img info centos-7.raw
    # 创建虚拟硬盘
    qemu-img create -f qcow2 test.qcow2 10G
    # 调整虚拟磁盘容量
    qemu-img resize test.qcow2 +10G
    # 转换磁盘格式
    qemu-img convert -f raw -O qcow2 old.raw new.qcow2
                      原格式  新格式  原文件  新文件
    

    创建KVM虚拟机快照

    # 创建快照
    virsh snapshot-create centos7
    virsh snapshot-create-as centos7 --name install_ok
    # 查看快照
    virsh snapshot-list centos7
    # 还原快照
    virsh snapshot-revert centos7 --snapshowname centos7
    # 删除快照
    virsh snapshot-delete centos7  --snapshotname centos7
    

    raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中.

    KVM虚拟机克隆

    完整克隆

    virt-clone --auto-clone -o web01 -n web02
    

    链接克隆

    # a.生成虚拟机磁盘文件
    qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
    # b.生成虚拟机配置文件
    virsh dumpxml web01 > web02.xml
    # 修改配置文件
    ## 修改名字
    ## 删除uuid
    ## 磁盘文件地址
    ## 删除mac地址
    # c.导入虚拟机
    virsh define web02.xml
    

    KVM虚拟机的桥接模式

    创建桥接网卡

    virsh iface-bridge eth0 br0
    

    取消桥接网卡

    virsh iface-unbridge br0
    

    创建KVM桥接网络的虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    热添加技术

    KVM虚拟机在线热添加硬盘

    # 临时添加
    virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2
    # 永久添加
    virsh attach-disk web04 --source /data/web04-add.qcow2 --target vdb --subdriver qcow2 --config
    

    给KVM虚拟机添加新的硬盘

    # 创建一个新的硬盘
    qemu-img create -f qcow2 /data/new.qcow2 10G
    # 附加新硬盘
    virsh attach-disk web04 --source /data/new.qcow2 --target vdb --subdriver qcow2
    # 虚拟机中
    ## 格式化硬盘
    mkfs.xfs /dev/vdb
    ## 挂载硬盘
    mount /dev/vdb /mnt
    

    给KVM虚拟机硬盘扩容

    # 虚拟机中
    ## 卸载硬盘
    umount /mnt
    # 物理机中
    ## 剥离硬盘
    virsh detach-disk web04 --target vdb
    ## 扩容
    qemu-img resize /data/new.qcow2 +10G
    ## 再插上硬盘
    virsh attach-disk wbe04 --source /data/new.qcow2 --target vdb --subdriver qcow2
    # 虚拟机中
    ## 挂载硬盘
    mount /dev/vdb /mnt
    ## 重新加载
    xfs_growfs /mnt
    ## 查看挂载
    df -h
    

    根磁盘扩容

    # a.在宿主机上关闭虚拟机并调整虚拟机磁盘大小
    qemu-img resize oldboy.qcow2 +10G
    # b.虚拟机中fdisk重新调整分区
    fdisk /dev/vda
    # c.重启机器,执行xfs_growfs /dev/vda1
    xfs_growfs /dev/vda1
    ## 注:ext4文件系统需要用:resize2fs /dev/vda1
    

    KVM虚拟机在线热添加网卡

    # 添加网卡
    virsh attach-interface web04 --type bridge --source br0 --model virtio
    virsh attach-interface web04 --type bridge --source br0 --model virtio --config
    # 删除网卡
    virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
    

    KVM虚拟机在线热添加内存

    # 创建新的虚拟机,指定最大的内存值
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 临时添加内存
    virsh setmem web04 1024M 
    # 永久添加内存
    virsh setmem web04 1024M --config
    

    KVM虚拟机在线热添加cpu

    # 创建新的虚拟机,指定最大的cpu个数
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 临时添加cpu
    virsh setvcpus web04 4
    # 永久添加cpu
    virsh setvcpus web04 4 --config
    

    KVM虚拟机热迁移

    冷迁移kvm虚拟机:配置文件,磁盘文件
    热迁移kvm虚拟机:配置文件,nfs共享
    

    KVM虚拟机实现热迁移

    1:两边的环境(桥接网卡)
    2:实现共享存储(nfs)
    3:虚拟机桥接网络
    4:在线热迁移

    # 1.修改宿主机的主机名和hosts文件
    hostnamectl set-hostanme KVM01
    hostnamectl set-hostanme KVM02
    echo "10.0.0.11 KVM01" >>/etc/hosts
    echo "10.0.0.12 KVM02" >>/etc/hosts
    # 2.创建nfs服务器
    ## 具体部署nfs服务这里不详细解释
    systemctl restart rpcbind
    systemctl restart nfs
    # 3.宿主机挂载nfs
    mount -t nfs 10.0.0.13:/data/ /opt
    # 4.创建一个KVM虚拟机
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name oldbi --memory 1024,maxmemory=2048 --vcpus 1,maxvcpus=10  --disk /opt/oldbi.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    # 5.热迁移
    virsh migrate --live --verbose oldbi qemu+ssh://10.0.0.12/system --unsafe
    
    展开全文
  • KVM 虚拟化架构和实现原理

    万次阅读 2016-08-15 08:42:30
    KVM虚拟化实现KVM虚拟化架构KVM是嵌入在Linux操作系统标准内核中的一个虚拟化模块,它能够将一个Linux标准内核转换成为一个VMM,嵌有KVM模块的Linux标准内核可以支持通过kvm tools来进行加载的GuestOS。...

    目录

    KVM虚拟化架构

    这里写图片描述

    KVM是嵌入在Linux操作系统标准内核中的一个虚拟化模块,它能够将一个Linux标准内核转换成为一个VMM,嵌有KVM模块的Linux标准内核可以支持通过kvm tools来进行加载的GuestOS。所以在这样的操作系统平台下,计算机物理硬件层上直接就是VMM虚拟化层,而没有独立出来的HostOS操作系统层。在这样的环境中HostOS就是一个VMM。

    每个由KVM创建的GuestOS都是HostOS(或VMM)上的一个单个进程。而在GuestOS上的User-space中运行的Applications可以理解为就是进程中的线程。

    需要注意的是:KVM只是虚拟化解决方案的一部分,想要实现全虚拟化,还需要其他的条件:
    1. CPU处理器提供的虚拟化支持(VT-x 硬件辅助虚拟化,可以为GuestOS创建虚拟化处理器,本质是对寄存器的隔离模拟和对指令集的划分)。
    2. 内存可以通过kvm虚拟化成独立的虚拟化地址(/dev/kvm)
    3. I/O虚拟化(QEMU)

    ==> KVM虚拟化 = KVM内核模块 + /dev/kvm + QEMU

    /dev/kvm

    Linux操作系统标准内核中的KVM内核模块生成了一个名为/dev/kvm的设备,有了/dev/kvm设备,使得GuestOS的地址空间(内存地址、磁盘地址)能够独立于标准内核或其他任何GuestOS的地址空间。Linux操作系统目录结构包含的/dev目录树下的设备对于所有User-space进程或线程(无论是在GuestOS上,还是在VMM上)来说都是通用的,但是每个打开/dev/kvm设备的不同的进程或线程,所能使用的都是唯一且各不相同的地址映射(为了支持GuestOS间的隔离)。

    KVM内核模块通过/dev/kvm设备提供了内存虚拟化,给予GuestOS与内核或者其他GuestOS相对独立的地址空间。每个GuestOS都有自己的地址空间,并且这些地址空间是在实例化GuestOS时创建映射的。映射给GuestOS的物理内存实际上是映射给这个GuestOS在VMM中相应进程的虚拟内存。
    有两种支持Guest地址到Host(VMM)地址的转换方法:

    • 应用LinuxOS维护的一组影子页表(shadow page table)
    • CPU也可以通过在访问未经映射的内存位置时使用VMM(主机内核)来支持内存转换进程。

    所以总的来说,/dev/kvm设备的作用就是:将不同的GuestOS之间的地址隔离,或将GuestOS和HostOS(VMM)之间的地址隔离

    QEMU

    QEMU是一个I/O虚拟化解决方案,能够对一个完整的计算机物理层环境进行虚拟化(EG. 磁盘、图形适配器、网络设备)。

    在GuestOS中生成的所有I/O请求都会被QEMU中途截获,并重新发送到QEMU进程模拟的User Mode中。

    Openstack、KVM、QEMU 的关系

    KVM 用来模拟 CPU 的运行,但缺少了对 Network 和 I/O 的支持。QEMU-KVM 是一个完整的模拟器,它基于 KVM 上,提供了完整的 Network 和 I/O 支持。其中 Openstack 为了跨 VM 性,所以不会直接控制 QEMU-KVM,而是通过 libvit 的库去间接控制 QEMU-KVM 。

    KVM的虚拟化实现

    这里写图片描述

    KVM内核模块为Linux标准内核引入了一种除现有的Kernel ModeUser Mode之外的新进程模式。这种新模式就称为Guest Mode模式,顾名思义,它用来执行GuestOS的代码。
    Linux标准内核的执行模式可以针对不同的运行内容和目的进行定义。Guest Mode的存在就是为了执行GuestOS的代码,但是只针对那些非I/O的代码。I/O代码还需要QEMU来作为支持。

    GuestOS可以在两种模式下运行:

    • 在Guest Mode中运行的GuestOS可以支持标准的内核。
    • 在User Mode下运行的GuestOS则支持自己的内核和User-space(Applications)。

    相同的是,GuestOS只能够在User Mode下执行I/O操作,而且这是单独使用QEMU-KVM进行管理的。

    展开全文
  • 虚拟化技术 仿真虚拟化 -- 对系统硬件没有要求,性能最低 半虚拟化 -- 虚拟机可以使用真机物理硬件,性能高,需要修改内核 全虚拟化 -- 直接使用物理硬件,性能高 vmware 支持仿真虚拟化 xen ...

    一、虚拟化产品介绍

    虚拟化产品对比介绍

    • vmware
    • KVM  rhel6_x64
    • xen [ kernel-xen ] rhel5 

    虚拟化技术

    • 仿真虚拟化     -- 对系统硬件没有要求,性能最低
    • 半虚拟化         -- 虚拟机可以使用真机物理硬件,性能高,需要修改内核
    • 全虚拟化         -- 直接使用物理硬件,性能高

    vmware 支持仿真虚拟化

    • xen  RHEL5 自带 xen ,安装时需要安装内核, rpm -ivh  kernel-xen-xxx.rpm
    • kvm   全虚拟化  RHEL6 自带 kvm 

    KVM 概述:

    KVM 即 Kernel-based  Virtual Machine   基于内核的虚拟机

    KVM, 是一个开源系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各个主要发行版中,它使用Linux 自身的调度器进行管理,所以相对于Xen ,其核心代码很少。 KVM 目前已成为学术界的主流 VMM(虚拟机监控器)之一,KVM 的虚拟化需要硬件支持 (如 Inter VT 技术或者AMD V技术),是基于硬件的完全虚拟化。而 Xen 早期则是基于软件模拟的 Para-Virtualization .

    KVM :是指基于 Linux 内核的虚拟机 (Kernel-based Virtual Machine).是第一个整合到 Linux 内核的虚拟化技术,在 KVM模型中,每一个虚拟机都是一个由Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。

    一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。

    Xen  : 需要升级内核,只能支持和物理机系统一样的操作系统。  xen 虚拟机上 ,可以运行 windows ?                                              Kvm :支持 Linux 以外的其他系统,比如:windows 

    QEMU   ??

    • QEMU :是一套由 Fabrice Bellard 所编写的以 GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛,QEMU具有高速度和跨平台的特性,QEMU能模拟至真实电脑的速度。
    • QEMU 能模拟整个电脑系统,包括中央处理器以及其他周边设备。
    • QEMU 和 vmware 一样,都是仿真虚拟化技术,效率比较低,QEMU 也是一种虚拟化技术。

    注:只有 64 位centos6以上的系统支持 KVM,centos 32位系统不支持KVM。从 centos7开始,就没有 32 位系统了。

    查看 CPU 是否支持全虚拟化技术 且是64位

    Intel:cat /proc/cpuinfo | grep --color vmx
    AMD :cat /proc/cpuinfo | grep --color svm

    看看 flag 有没有上面的 vmx 戒者是 svm,有的话就是支持全虚拟化技术 

    开启 BIOS 虚拟化支持,查找 TV 改为:enable BIOS中也要打开,默认很多机器没有打开

    安装虚拟机出现 intel vt -x 处亍禁用状态打丌开 处理方式


     

    展开全文
  • KVM虚拟化技术实践

    万次阅读 2017-02-01 16:06:45
    今天分享的文章是关于云计算中的kvm虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),...
  • KVM,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM 目前已成为学术界的主流 VMM(虚拟机监控器)之...
  • 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----...
  • KVM虚拟化技术__实战与原理解析 + Linux KVM虚拟化架构实战指南(带书签)
  • Linux虚拟化KVM介绍及环境搭建(1)

    千次阅读 2019-01-13 10:06:25
    KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个...
  • Linux KVM虚拟化架构实战指南 完整版带书签 完整版带书签 完整版带书签
  •  现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。  准确来说,KVMLinux的一个模块。可以用modprobe去...
  • KVM,虚拟化KVM,虚拟化KVM,虚拟化KVM,虚拟化KVM,虚拟化KVM,虚拟化KVM,虚拟化
  • 资源名称:Linux KVM虚拟化架构实战指南资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
  • KVM虚拟化使用基础 1、 对于物理机来说,需要在BIOS里,开启硬件虚拟化支持 对于虚拟机来说,需要在虚拟机设置里,开启硬件虚拟化支持(VT-x/AMD-V) 2、 开启虚拟化支持后,使用下列命令检查硬件虚拟化是否启用(MAC...
  • kvm虚拟化之cpu虚拟化

    万次阅读 2019-12-02 10:43:07
    (文章来自作者维护的社区微信公众号【虚拟化云计算...vt-x是intel的CPU硬件虚拟化技术,但是在操作系统内部查看cpu的flag时,是否支持硬件虚拟化的的判断标准是是否有vmx,vmx是什么,它和虚拟化有什么关系,本文将...
  • 虚拟化技术KVM,搭建KVM(详细)

    万次阅读 多人点赞 2017-10-21 21:24:12
    首先说一下,KVM是基于硬件辅助的开源全虚拟化解决方案 一、KVM(基于内核的虚拟机)【刚开始是一家以色列的公司开发的,后来红帽觉得KVM很有前景,就把KVM收购了】。 二、KVM包含了一个内核加载模块,是一个.ko...
  • 本节书摘来自异步社区《Linux KVM虚拟化架构实战指南》一书中的第1章,第1.2节,作者:何坤源著,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 KVM虚拟化介绍 Kernel-based Virtual Machine(基于内核的...
  • KVM虚拟化

    万次阅读 多人点赞 2019-06-11 18:33:27
    kvm虚拟化1. 虚拟化介绍2. kvm介绍3. kvm部署3.1 kvm安装3.2 kvm web管理界面安装 1. 虚拟化介绍 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、...
  • Linux上的虚拟化技术

    万次阅读 2017-08-06 18:03:34
    另外介绍了一些其它的虚拟化技术, 比如Linux上操作系统级的虚拟化技术.  虚拟化把事物从一种形式改变为另一种形式. 计算机的虚拟化使单个计算机看起来像多个计算机或完全不同的计算机.  虚拟化技术也可以使多台...
  • KVM(Kernel Virtual Machine) , 作为开源的内核虚拟机,越来越受到 IBM,Redhat,HP,Intel 等各大公司的大力支持,基于 KVM 的开源虚拟化生态系统也日益完善。而实现 KVM 虚拟化,使客户机高效地、安全地使用宿主机...
1 2 3 4 5 ... 20
收藏数 17,384
精华内容 6,953
关键字:

kvm linux 虚拟化技术