kvm虚拟化技术_kvm虚拟化技术之使用qemu-kvm创建和管理虚拟机 - CSDN
  • 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虚拟化技术实践

    2017-02-01 16:06:45
    今天分享的文章是关于云计算中的kvm虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),...

    [版权申明:本文系作者原创,转载请注明出处]
    文章出处:http://blog.csdn.net/sdksdk0/article/details/54809159
    作者:朱培 ID:sdksdk0

    今天分享的文章是关于云计算中的kvm(虚拟化技术),通过本文你可以知道的是kvm是干什么的,如何使用kvm,如何通过java操作xml从而生成生成虚拟机。

    一、虚拟化简介

    系统虚拟化是将底层物理设备与上层操作系统、软件分离的一
    种去耦合技术,在一台物理机器上逻辑的划分出多台机器。
    • 虚拟化的目标是实现IT资源利用效率和灵活性的最大化

    在一台物理主机上虚拟出多个虚拟计算机(虚拟机,Virtual
    Machine,VM),其上能同时运行多个独立的操作系统,这
    些客户操作系统(Guest OS)通过虚拟机管理器(Virtual
    Machine Monitor,VMM,也称作Hypervisor)访问实际
    的物理资源。

    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。
    • 它是完全开源的。

    二、使用虚拟化的原因

    为什么我们要使用虚拟化技术。当公司的服务器越来越多,我们需要充分利用资源,也需要统一运维管理。
    主要原因可以总结如下:

    1. 打破“一台服务器对应一套应用”的模
      式,将物理服务器进行整合,提升利用
    2. 服务器和相关IT硬件更少,节省了机房空
      间,也减少了散热和电力需求
    3. 具备灵活数据备份和应用迁移机制,保
      障服务永不中断
    4. 资源动态调配和模板化部署,应用系统
      快速上线,及时响应业务变化。

    这里写图片描述

    虚拟化分为3类

    1. 全虚拟化
    2. 半虚拟化
    3. 硬件辅助的虚拟化

    无虚拟化

    1. – CPU一般设为四个Ring
    2. – Kernel Mode一般跑在Ring 0上
    3. – User Mode一般跑在Ring 3上
    4. – 对于一个普通的传统的Linux系统没有问题

    • 虚拟化

    1. – 在Guest机器和Host机器中间加一层Hypervisor
    2. – Host机器看它像跑在自己上面的程序
    3. – Guest机器看它像自己所运行的硬件
    4. – 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0。

    三、常见的虚拟化技术

    例如很常见的VMWare、VirtualBox、Citrix Xen、kvm等。桌面虚拟化 将原本在本地电脑安装的桌面系统统一在后端数据中心进
    行部署和管理; 用户可以通过任何设备,在任何地点,任何时间访问属于
    自己的桌面系统环境。还有服务器虚拟化。包括全虚拟化(Full-Virtulization):
    无需修改操作系统,VM ESXi、Linux KVM
    • 半虚拟化(Para-Virtulization):
    集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作
    系统,
    MS Hyper-V、 Ctrix Xen、IBM PowerVM
    • 操作系统层虚拟化
    开发、测试环境,VM Workstation、VM Server

    四、kvm环境配置

    下面介绍的操作流程是在centos6.6系统中演示。首先把防火墙关掉:

      Service iptables stop
        Chkconfig iptables off

    如果你的是centos7关闭防火墙:

        systemctl stop firewalld.service 
        systemctl disable firewalld.service

    1、进行cpu检测,

        egrep -c '(vmx|svm)' /proc/cpuinfo

    命令结果大于0表示cpu支持虚拟化。如果是等于0,就需要手动勾选虚拟化引擎。

    这里写图片描述

    如果linux的系统是在VMware Workstation上的,需要将cpu设置为支持硬件虚拟化。需要在设置中把处理器核数里面的虚拟化引擎(虚拟化Intel VT-X/EPT…)这个选项勾上。

    这里写图片描述

    2、kvm安装

    安装命令kvm:

        yum  install qemu-kvm

    • 安装虚拟化管理工具:

      yum install virt-manager libvirt libvirt-python python-virtinst  bridge-utils

    • libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以
    由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,
    vmware,XEN,Hyper-v, LXC 等 Hypervisor。
    • Virsh:基于 libvirt 的 命令行工具 (CLI)
    • Virt-Manager:基于 libvirt 的 GUI 工具

    3、kvm内核模块

    将kvm嵌入到内核:

        modprobe kvm
        modprobe kvm-intel

    然后使用命令查看是否已经嵌入成功,

        lsmod | grep kvm

    如果显示下面的结果则代表嵌入成功。

    [root@controller ~]# lsmod | grep kvm
    kvm_intel 55496 0
    kvm 337900 1 kvm_intel
    [root@controller ~]#

    4、启动libvirt

        service libvirtd restart
        chkconfig libvirtd on

    5、资源准备

    新建kvmtest目录。我们就是这个目录下进行kvm测试。

     mkdir  /kvmtest

    然后将已经下载好的 CentOS-6.8-x86_64-minimal.iso上传到这个/kvmtest目录下。这里需要说明一下,我的系统是centos6.6的,然后对于6.6或者6.8的迷你版系统兼容更好,否则我们在后面创建电脑之后可能会发生无法启动的问题。对于其他版本开机时可能会遇到 “no filename or root path specified”的错误。

    6、创建安装盘

      qemu-img create -f qcow2 /kvmtest/centos-6.8.qcow2 
        10G

    7、创建虚拟机

     virt-install --virt-type kvm --name centos-6.8 --ram 1024 \
        --vcpus 1 \
        --cdrom=/kvmtest/CentOS-6.8-x86_64-minimal.iso \
        --disk /kvmtest/centos-6.8.qcow2,format=qcow2 \
        --network network=default \
        --graphics vnc,listen=0.0.0.0 --noautoconsole \
        --os-type=linux --os-variant=rhel6

    以下是各参数代表的意思:

    1. -n NAME
      指定虚拟机的名称
    2. -r MEMORY
      指定虚拟机的内存用量
    3. -u UUID
      指定虚拟机的唯一通用标识符
      (Universally Unique Identifier,UUID)。
      省略这个参数时,virt-install 将会自动产生
    4. –vcpus=VCPUS
      指定虚拟机的虚拟 CPU (Virtual CPU,VCPU) 数量
      -f DISKFILE
      指定虚拟磁盘的文件路径名称
      -s DISKSIZE
      用来指定虚拟磁盘的大小,这个参数需配合-f 使用。
      DISKSIZE为虚拟磁盘的大小,单位是GB
      -m MAC
      指定虚拟机的网络卡之硬件地址。
      这个参数可以省略,省略时virt-install 将自动产生
      -p 以半虚拟化的方式建立虚拟机
      -l LOCATION 指定安装来源

    8、创建完成之后我们就可以使用命令来查看虚拟机了。

        virsh  list --all

    因为我这边创建了3台,所以可以看到有3台虚拟机。

    这里写图片描述

    shut off代表的是关机中的意思。你可以参照下面的命令来查看虚拟机的信息。

    例如我这里需要开启一台,命令就是

    virsh start centos-6.8
    

    virsh list # 显示本地活动虚拟机
    • virsh start openSuse # 启动名字为ubuntu的非活动虚拟机
    • virsh create ubuntu.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活
    动主机)
    • virsh suspend openSuse # 暂停虚拟机
    • virsh resume ubuntu # 启动暂停的虚拟机
    • virsh shutdown ubuntu # 正常关闭虚拟机
    • virsh destroy ubuntu # 强制关闭虚拟机
    • virsh dominfo openSuse # 显示虚拟机的基本信息
    • virsh dumpxml openSuse # 显示虚拟机的当前配置文件
    • virsh setmem ubuntu 51200 # 给不活动虚拟机设置内存大小
    • virsh setvcpus ubuntu 4 # 给不活动虚拟机设置cpu个数
    • virsh edit ubuntu # 编辑配置文件(一般用在刚定义完VM)

    9、客户端连接。
    我们可以使用命令

    netstat -natp
    

    来查看启动的进程。我们可以看到5900端口的进程是/qemu-kvm。

    这里写图片描述

    启动一台是5900,那么启动两台就是5900和5901,依次类推。
    我们可以在window系统中使用vnc-4_1_3-x86_win32_viewer.exe来连接。

    输入ip地址和端口号进行连接,例如的我的是192.168.44.146
    这里写图片描述

    然后就和平常的linux系统的安装流程来操作就行。安装好之后就可以连接进来操作即可。root 123456

    这里写图片描述

    在这里把电源模块安装好。
    电源管理:
    yum install acpid

    yum install tcpdump

    五、kvm的xml文件

    我们需要知其然也要知其所以然。那么我们是怎样做到在VMware Workstation虚拟出来的centos6.6系统中再其中虚拟化出来一台centos6.8系统。
    使用ifconfig命令可以查看IP网络配置。

    我们进入到/etc/libvirt/qemu目录下。我们可以看到有centos-6.8.xml文件。

    这里写图片描述

    在这个xml文件可以看到里面有虚拟机名字配置,磁盘大小配置等。那么这样我们就可以看出来了,原来这样一个centos6.8只需要一个xml文件就可以搞定,是不是我们可以复制一份这个xml文件就可以生成一个虚拟机了呢?答案是肯定了,激动人心的时候到了,那么我们就复制一份珍贵xml文件,然后改改名字呗。

    cp  centos-6.8.xml centos-6.8.01.xml
    

    然后vi新的这个centos-6.8.01.xml文件,将其虚拟机名字改为centos-6.8.01,这样我们就有了一台新的虚拟机了。

    那么我们如何启动我们刚才新的这台机器了。使用下面的命令:

    virsh define 模板文件路径

    例如我的是:

    virsh define  /etc/libvirt/qemu/centos-6.8.02.xml
    

    如果我们不想要了可以使用下面的命令移除虚拟机(virsh undefine 虚拟机名)

    virsh undefine centos-6.8  
    

    六、通过JAVA编程控制KVM

    在上一个章节中我们知道了一个kvm虚拟机我们可以使用xml文件来控制,那么我们自然也可以用java程序来写xml文件,从而生成虚拟机。如果你使用过阿里云或者腾讯云等云服务器的话你就知道,上面可以自定义选择cpu核数内存磁盘什么的,不就类似操作不同的参数,从而生成不同的xml文件,最后生成云服务器了。现在对于阿里腾讯等这些云服务器又增加的想法没,嘿嘿嘿!

    在Libvirt中有使用java操作kvm的API。

    我们知道在我的centos6.6中安装了qume-kvm,那么我们想要从其他地方(例如windos中)想要远程访问怎么办呢?所以我们需要对linux服务器做相应的设置,把端口打开,这样才能让其他的来访问我这个kvm,从而进行操作。

    1、启用tcp的端口。修改配置文件

    vi  /etc/sysconfig/libvirtd
    

    然后打开里面的如下内容,把“#”去掉

    LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
    LIBVIRTD_ARGS="--listen"
    

    然后再下面的文件中修改:

    vi /etc/libvirt/libvirtd.conf

    listen_tls = 0
    listen_tcp = 1
    tcp_port = “16509”
    listen_addr = “0.0.0.0”
    auth_tcp = “none”连接测试:
    在window中安装Libvirt,然后打开virsh-launcher.bat

     virsh -c qemu+tcp://192.168.44.146/system

    在这里我们可以看到在之前linux服务器中的虚拟机。
    这里写图片描述

    3、在eclipse中操作kvm
    新建java工程,导入libvirt-0.5.1.jar和jna-3.5.0.jar。
    然后就可以愉快的进行编码操作了:

    public class Test {
        public static void testVM() { 
            try { 
                Connect conn = new Connect("qemu+tcp://192.168.44.146/system"); 
    
                 conn.domainLookupByName("centos-6.8").shutdown();
            //    conn.domainLookupByName("centos-6.6-02").create();
            //   conn.domainLookupByName("centos-6.6").shutdown();
                 // conn.domainLookupByName("centos-6.6-02").create();
    
    
            } catch (LibvirtException e) { 
                e.printStackTrace(); 
            } 
        } 
        public static void main(String[] args) {
            testVM();
        }
        }

    在这里shutdown是可以关机,然后create是开机,而不是我们传统理解上的start。当然你有强迫症的话可以通过修改源码将create方法改为start。

    4、生成xml文件

    public class Test02 {
    
            public static void main(String[] args) {
                Connect conn = null;
                int flags = 0;
                //jdom dom4j
    
                try {
                      conn = new Connect("qemu+tcp://192.168.44.146/system");
    
    
    
    
                     String dumpxml ="<domain type='kvm'> "+
                             " <name>bjsxtvm03</name> "
                        + "  <memory unit='KiB'>1048576</memory>"
                        + " <currentMemory unit='KiB'>1048576</currentMemory>"
                        + " <vcpu placement='static'>1</vcpu>"
                        + " <os>"
                        + "   <type arch='x86_64' machine='rhel6.6.0'>hvm</type>"
                        + "   <boot dev='hd'/>"
                        + " </os>"
                        + "  <features>"
                        + "   <acpi/>"
                        + "    <apic/>"
                        + "    <pae/>"
                        + "  </features>"
                        + "  <clock offset='utc'/>"
                        + "  <on_poweroff>destroy</on_poweroff>"
                        + " <on_reboot>restart</on_reboot>"
                        + " <on_crash>restart</on_crash>"
                        + " <devices>"
                        + "  <emulator>/usr/libexec/qemu-kvm</emulator>"
                        + " <disk type='file' device='disk'>"
                        + "   <driver name='qemu' type='qcow2' cache='none'/>"
                        + "   <source file='/kvmtest/centos-6.6-04.qcow2'/>"
                        + "   <target dev='vda' bus='virtio'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>"
                        + "  </disk>"
                        + "  <disk type='block' device='cdrom'>"
                        + "     <driver name='qemu' type='raw'/>"
                        + "    <target dev='hdc' bus='ide'/>"
                        + "    <readonly/>"
                        + "    <address type='drive' controller='0' bus='1' target='0' unit='0'/>"
                        + "  </disk>"
                        + "   <controller type='usb' index='0' model='ich9-ehci1'>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci1'>"
                        + "    <master startport='0'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci2'>"
                        + "    <master startport='2'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>"
                        + "  </controller>"
                        + "  <controller type='usb' index='0' model='ich9-uhci3'>"
                        + "    <master startport='4'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>"
                        + "  </controller>"
                        + "  <controller type='ide' index='0'>"
                        + "   <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>"
                        + "  </controller>"
                        + " <interface type='network'>"
                        + "    <source network='default'/>"
                        + "    <model type='virtio'/>"
                        + "    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>"
                        + "  </interface>"
                        + "  <serial type='pty'>"
                        + "    <target port='0'/>"
                        + "  </serial>"
                        + "  <console type='pty'>"
                        + "    <target type='serial' port='0'/>"
                        + "  </console>"
                        + "  <input type='tablet' bus='usb'/>"
                        + "  <input type='mouse' bus='ps2'/>"
                        + "  <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>"
                        + "    <listen type='address' address='0.0.0.0'/>"
                        + "  </graphics>"
                        + "  <video>"
                        + "   <model type='cirrus' vram='9216' heads='1'/>"
                        + "   <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>"
                        + " </video>"
                        + " <memballoon model='virtio'>"
                        + "  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>"
                        + " </memballoon>" + "</devices>" + "</domain>"; 
    
                    Domain dm = null;
    
                    Domain dm1 = conn.domainDefineXML(dumpxml);
    
                    dm1.create();//start 
    
                    //Domain dm1 = conn.domainDefineXML(dumpxml); //创建一个域,但不启动
                    //dm1.undefine(); //undefind一个域,如果活动,则不停止
                    /****
                    try{
                        Domain dm1 =conn.domainLookupByName("bjsxtvm03");
                    }
                    catch (LibvirtException e) {
                        System.out.println("libvirt 错误" + e);
                        // TODO: handle exception
                    }
                    if(dm!=null)
                    {
    
                        dm.undefine();
    
                    }
                    ****/
    
                    /********
                    Domain dm2 = conn.domainDefineXML(dumpxml);
                    dm2.undefine();
                    *******/
    
                } catch (LibvirtException e) { //LibvirtException 返回错误详细信息
                    System.out.println("exception caught:" + e);
                    System.out.println("获取的错误;" + e.getError());
                }
    
                System.out.println("Clean exit");
    
            }
    
        }

    这里特别提醒一下,在window中操作kvm可能会遇到各种奇奇怪怪的问题,毕竟版本兼容比较麻烦。强烈建议在centos图形版的eclipse中连接kvm操作。

    总结:虚拟化技术为日后的云平台的架设打好基础,如果对于kvm不理解的话,那么对于openstack的学习还是会有一定的影响。平时需要对学习进行总结,找到知识互通的地方。这样对于云计算整体算是基础的认知。对于kvm在本篇文章中没有介绍到的有网络桥接,增加磁盘配置。

    展开全文
  • 首先说一下,KVM是基于硬件辅助的开源全虚拟化解决方案 一、KVM(基于内核的虚拟机)【刚开始是一家以色列的公司开发的,后来红帽觉得KVM很有前景,就把KVM收购了】。 二、KVM包含了一个内核加载模块,是一个.ko...

    首先说一下,KVM是基于硬件辅助的开源全虚拟化解决方案
    一、KVM(基于内核的虚拟机)【刚开始是一家以色列的公司开发的,后来红帽觉得KVM很有前景,就把KVM收购了】。
    二、KVM包含了一个内核加载模块,是一个.ko文件,这个KVM模块只负责的是:1、虚拟机的虚拟CPU也就是vCPU 2、对虚拟内存进行管理和调度。还有一个就是下面说的QEMU-KVM,这个QEMU-KVM就是通过修改QEMU代码而得出的专门用来创建和管理虚拟机的管理工具,是为了KVM能更好的和内核打交道。VM 运行期间,QEMU 会通过 KVM 模块提供的系统调用进入内核,由 KVM 负责将虚拟机置于处理的特殊模式运行。
    三、但是我们知道虚拟机只有cpu和内存是完全不够的,他还要有外设,那么如何管理所需要的这些外设呢:
    首先这些外设分为真实存在的外设和虚拟的外设,真实的外设需要利用linux系统内核来管理。一般来说我们使用的还是虚拟的外设,而虚拟机要与虚拟的外设交互的话,就需要依靠虚拟化技术的另外一个项目QEMU,很多设备都采用了QEMU的虚拟外设。

    从而我们就会有一个结论:1、KVM本身只关注虚拟机调度和内存管理这两个方面
    2、外设的任务交给我们上面说的linux 内核或者是QEMU。 所以KVM就是一个轻量级的Hypervisor。
    二、安装KVM
    KVM需要硬件虚拟化的特性的支持,因此要注意的是在安装KVM之前,首先要在BIOS中将CPU虚拟化开启,然后就可以使用命令安装KVM
    Kvm架构:
    Kvm架构主要由两个模块来组成:kvm模块和QEMU-KVM 由下图可以看到:kvm模块集成在了linux的内核里面,它为一个虚拟机提供的是cpu和mem而QEMU-KVM在linux的用户空间层,它为一个虚拟机提供的是io等设备。



    QEMU-KVM通过/dev/kvm接口来调用kvm:


    就通过这样的四大部,虚拟机就可以启动起来了。
    在这里我们就从安装开始:

    准备工作:首先说一下我在vmware下的centos7上安装KVM,并且我的centos7已经安装好了vnc_server,我可以在我的windows下远程访问;还有就是我在我的centos7的/opt/ubuntu/下放了一个准备后面创建KVM虚拟机的iso文件(ubuntu12.04系统的镜像文件)
    一、首先得一步就是确定我的centos7是否支持KVM虚拟化:
    [root@localhost ~]# egrep -o ‘(vmx|svm)’ /proc/cpuinfo
    vmx
    如果上面命令执行后什么都没有输出,那么就在虚拟机设置对话框下修改成下图这样

    注意:是在关机的情况下设置的,然后开机后再执行上面的命令,就会ok了。

    二、使用命令安装QEMU,libvirt等
    yum install -y qemu-kvm qemu-img virt-manager virt-install virt-viewer libguest* libvirt*
    yum groupinstall -y virtualization-client virtualization-platform virtualization-tools
    就这两个命令,把这些都装上
    三、看看安装好了没:
    [root@localhost ~]# virsh
    欢迎使用 virsh,虚拟化的交互式终端。
    输入:’help’ 来获得命令的帮助信息
    ‘quit’ 退出
    virsh # list

    Id 名称 状态

    virsh # quit
    [root@localhost ~]#
    使用virsh命令看一下,都ok
    Ps:virsh(虚拟 shell),基于命令行的管理工具,可以实现简单的资源管理。它构建于libvirt之上,允许以交互方式使用多个libvirt功能。【如果对libvirt不太了解的话,可以看看我的关于libvirt的文章】

    当到这里的时候:我们就可以创建KVM虚拟机了,我们可以使用命令或者然后我们就在centos7的图形界面下打开虚拟系统管理器

    然后点击新建,再选择使用iso镜像创建【就是一开始说的我放在/opt/ubuntu/下的ubuntu12.04的iso镜像】



    然后就是后面的自定义设置了,这里我就将我做了修改的地方发一下截图:


    然后点开始安装,就会进去我通常装ubuntu的安装界面
    我们也可以在终端下看一下:
    [root@localhost ubuntu]# virsh
    欢迎使用 virsh,虚拟化的交互式终端。

    输入:’help’ 来获得命令的帮助信息
    ‘quit’ 退出

    virsh # list

    Id 名称 状态

    2 KVM_ubuntu12.04 running

    virsh #

    安装成功后可以进入这个KVM虚拟机看看:

    然后使用命令或者使用图形按钮都可以将这个KVM虚拟机给关闭
    我使用命令关闭这个虚拟机:
    virsh # list

    Id 名称 状态

    2 KVM_ubuntu12.04 running
    virsh # shutdown
    错误:命令 ‘shutdown’ 需要 选项
    virsh # shutdown KVM_ubuntu12.04
    域 KVM_ubuntu12.04 被关闭
    virsh #

    三、另外,我们也是可以用命令来安装KVM虚拟机:
    [root@localhost ~]# virt-install \

    –name vm_2 \
    –ram=1024 \
    –vcpus=1 \
    –disk path=/opt/ubuntu/vm_2.qcow2,size=6 \
    –cdrom /opt/ubuntu/ubuntu-12.04.5-desktop-amd64.iso
    WARNING 需要图形,但未设置 DISPLAY。未运行 virt-viewer。
    WARNING 没有为该虚拟机启动控制台,默认为 –wait -1

    开始安装……
    正在分配 ‘vm_2.qcow2’ | 6.0 GB 00:00:00
    创建域……
    域安装正在进行。请等待 以便安装完成。 | 0 B 00:00:00

    然后我们打开centos7的图形界面就可以像平常一样安装上面的这个ubuntu12.04系统了。
    四、Ps:创建的这个kvm虚拟机就可以完全使用在openstack上,openstack支持的就是qcow2格式的镜像。

    展开全文
  • Linux KVM 虚拟化技术

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

    一  、 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]# 
     

     

    展开全文
  • Hypervisor 是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也...Hypervisor 是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基...
  • KVM虚拟化技术实战与原理解析 全书一共9章:第1章介绍了云计算和虚拟化的概念,并对KVM等几种流行的虚拟化技术做了比较;第2章介绍了KVM的基本架构、QEMU的作用以及Intel的硬件虚拟化技术;第3章详细讲解了KVM依赖的...
  • KVM虚拟化技术 实战与原理解析.pdf;KVM虚拟化技术 实战与原理解析.pdf
  • kvm虚拟化技术:实战与原理解析 pdf扫描 图书详细介绍了kvm虚拟化技术的应用场景与原理
  • 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----《KVM虚拟化技术:实战与原理解析》 资源共享----...
  • KVM虚拟化技术__实战与原理解析 + Linux KVM虚拟化架构实战指南(带书签)
  • 学习KVM虚拟化技术实战技能,利用KVM虚拟化技术创建windows、linux虚拟机。
  • KVM虚拟化技术课件
  • KVM虚拟化技术实战和原理解析》第一章和第二章读书笔记
  • KVM 虚拟化技术

    2018-12-12 10:15:37
    在计算机技术中,虚拟化技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个...
  • KVM虚拟化技术 KVM简介 KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是一种内建于Linux中的开源虚拟机啊技术。具体而言,KVM可帮助用户将Linux转变成虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟...
  • KVM虚拟化技术__实战与原理解析_带书签,KVM虚拟化技术__实战与原理解析_带书签,KVM虚拟化技术__实战与原理解析_带书签
  • kvm虚拟化技术 实战与原理解析》1、kvm原理简介2、kvm核心基础功能3、kvm管理功能4、kvm性能测试以及参考数据
  • KVM 虚拟化技术(一)

    2018-06-22 13:36:52
    在计算机技术中,虚拟化技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个...
  •  第1章介绍了云计算和虚拟化的概念,并对KVM等几种流行的虚拟化技术做了比较;  第2章介绍了KVM的基本架构、QEMU的作用以 及Intel的硬件虚拟化技术;  第3章详细讲解了KVM依赖的硬件环境配置,编译和安装KVM...
  • 有完整详尽的一二级书签;讲述KVM虚拟化技术就优秀的书; 之前的版本传错了,这个才有详尽的一二级目录,降1分以示歉意。
1 2 3 4 5 ... 20
收藏数 14,819
精华内容 5,927
关键字:

kvm虚拟化技术