虚拟机KVM


   linux下的虚拟机。 KVM(Kernel-based Virtual Machine)。这是一个开源的系统虚拟化模块。是linux下的一款很不错的虚拟机软件。下面为就来介绍一下KVM的使用。

   在使用kvm之前,需要先查看以下自己电脑的cpu是否支持kvm。

Linux 系统如何安装 KVM linux安装kvm虚拟机_虚拟机


由于我的电脑已经安装了KVM,那么我就不进行安装过程的演示了

<span style="font-size:18px;">[root@localhost ~]#yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager</span>
<span style="font-size:18px;">#安装KVM所需要的安装包</span>



#检查模块是否有加载
[root@localhost ~]#lsmod | grep kvm
kvm_intel 85256 0
kvm 224928 2 ksm.kvm_intel




[root@localhost ~]#yum install bridge-utils tunctl

#安装桥接工具





[root@localhost ~]#yum install virt-manager virt-viewer

#安装GUI管理


安装完成后就可以以图形的方式安装虚拟机了!(当然要提前准备一个镜像文件)

1.在桌面的左上角。有一个应用程序,点击后选择系统工具,然后选择虚拟系统管理器。就可以弹出下面的窗口

Linux 系统如何安装 KVM linux安装kvm虚拟机_运维_02


2.在窗口的左上角有一个带五角星的电脑标志。这是创建新的虚拟机。点击他,会出现下面的窗口

Linux 系统如何安装 KVM linux安装kvm虚拟机_运维_03

3.因为我们使用ISO镜像安装,所以要选择第一个(最后一个倒入现有磁盘映像也很有用,后面再说)

Linux 系统如何安装 KVM linux安装kvm虚拟机_虚拟机_04

4.选择镜像在自己电脑中的位置,再点前进,接着的内存大小和CPU什么的都可以根据自己的喜好设置大小,我将内存,CPU,硬盘按默认的来了,一直下一步吧。

5.前面的都完成以后,就可以给自己的虚拟机创建一个名字了。下面的/var/lib/libvirt/images/xxxx就是硬盘所放的位置。

Linux 系统如何安装 KVM linux安装kvm虚拟机_linux_05


6.点击完成以后就正式进入虚拟机的安装过程了。

6.1选择第一个Install Red Hat Enterprise Linux 7.1

Linux 系统如何安装 KVM linux安装kvm虚拟机_Linux 系统如何安装 KVM_06

6.2稍等片刻就会进入Red Hat 的安装欢迎界面。(本人对这点英语还能接受,我就选择英文安装了,如果你的英语水平很差,就可以选择中文安装,这里的语言选择只是安装过程中的语言选择。以后安装好的语言是从新选择的)

Linux 系统如何安装 KVM linux安装kvm虚拟机_Linux 系统如何安装 KVM_07

6.3这里有界面时间,键盘,语言,安装源不用管,软件选择需要说以下。分区也需要说一下,kdump可以不选,选了也占内存,反正初学者应该用不上系统崩溃分析。网络想选就点一下连接吧。

Linux 系统如何安装 KVM linux安装kvm虚拟机_虚拟机_08


6.4先说分区,我觉得新手的话点击自动分区就好了,进入后直接点击done就好了,当然为这里选择了手动分区,为把/boot调小了一点,swap分区调大了一点。

6.5再说软件安装,一般来说,新手还是喜欢带GUI的操作系统,所以建议新手安装左边最后一个 Server with GUI。服务器一般喜欢安装最小安装,也就是第一个,最小安装的是最简化的系统,以后缺少什么安装什么就好,没一份多余的。右边是一些软件,比如KDE桌面阿,java工具组包,什么的。

Linux 系统如何安装 KVM linux安装kvm虚拟机_虚拟机_09

6.6全部都选择好了之后就可以安最右下角的Begin Installation开始安装啦!!

6.7在安装过程中可以点击ROOT PASSWD设置自己的root管理员密码(如果密码设置的太简单,需要按两次完成键才可以哦),还可以在这里添加用户。

Linux 系统如何安装 KVM linux安装kvm虚拟机_linux_10

6.8然后就是漫长的等待了,安装完成后重启,然后选择我接受一些条款,选择不注册,就好了!!!很简单吧。因为我选择的是最小安装,所以我只有318个包,如果选择了图形界面的安装会有高达1200多个宝。这也是服务器不安装图形界面的原因,图形太占用资源了。


下面介绍几个关于虚拟机管理的命令

virt-manager    #开启图形管理工具
 virt-viewer vmname  #显示虚拟机
 virsh list        #列出正在运行的vm
 virsh list --all #列出所有vm
 virsh start vmname #运行指定vm
 virsh shutdown vmname #正常关闭指定的vm
 virsh destory vmname   #强行结束指定的vm
 virsh create vmname.xml   #临时恢复
 virsh define vmname.xml   #永久恢复
 virsh undefine vmname.xml #删除vm的前端管理,不会删除储存


演示几个命令吧。首先演示virt-manager

Linux 系统如何安装 KVM linux安装kvm虚拟机_运维_11

再演示一下virsh list --all

Linux 系统如何安装 KVM linux安装kvm虚拟机_虚拟机_12


了解了这些个命令之后,来了解一下虚拟机安装相关的文件吧。刚才在安装的时候说了,硬盘的安装位置在/var/lib/libvirt/images目录下。硬盘文件是以qcow2结尾的。而一些前端文件都是放在/etc/libvirt/qemu目录下,那些文件是以xml结尾的。

Linux 系统如何安装 KVM linux安装kvm虚拟机_linux_13


没了xml前端文件还不要紧,可以在新建虚拟机那里点击倒入现有磁盘映像。这样就可以恢复虚拟机了,但是没了硬盘文件就坏了,这下就真的把虚拟机玩坏了。

下面讲解一下用命令如何安装一个虚拟机


虚拟机如何用命令安装呢,那需要了解一个命令 virt-insatll,首先这个命令在安装KVM后很可能没有这个命令的。不用担心,只要yum源是配好的只需要一条命令 yum -y install virt-install 就OK啦。这个命令的参数很是麻烦,但有了man手册就省心多了。(yum源的搭建也很简单,只需要刚才安装的那个镜像文件就可以搭建一个yum源)

Linux 系统如何安装 KVM linux安装kvm虚拟机_管理_14


输入下面的命令就可以自动分配份额开始安装虚拟机了。

Linux 系统如何安装 KVM linux安装kvm虚拟机_linux_15



由于linux的超级管理员的权限很大,新手很容易将linux玩坏的,那linux有没有像windows下的vmware以一样的快照功能呢。有的,linux下的快照功能是要写脚本的,那么下来先介绍一下linux的快照。

qemu-img命令就可以制作一张快照。就用之前新建的vm1.qcow2创建一个快照吧。再提示一下,这个文件在/var/lib/libvrit/images下。前面说了,xxx.qcow2这个是硬盘文件,是很重要的,那我们可以创建一个副本,也就是快照用,当快照玩坏了,可以再照一张。


Linux 系统如何安装 KVM linux安装kvm虚拟机_Linux 系统如何安装 KVM_16

看见了么,node1.qcow2文件被创建出来了。 下来我们使用node1.qcow2当作硬盘文件,而不是母盘(vm1.qcow2)了。那怎么将node1.qcow2换上去呢。方法很简单,将原先的Mr.W.xml(这个文件在/etc/libvirt/qemu)这个前端文件删掉,从新创建一个前端文件,并以node1.qcow2作为硬盘文件就好了,以后就一直使用node1.qcow2就好了。


也可以用手工去删除,也可以使用命令去删除。下面,为来演示一下

tips:(因为我是最小安装,没有图形,所以删掉Mr.W.xml 对我没有影响。)

Linux 系统如何安装 KVM linux安装kvm虚拟机_运维_17

选择最后一个导入现有磁盘映像。

然后路径选择刚刚创建的快照node1.qcow2.

Linux 系统如何安装 KVM linux安装kvm虚拟机_管理_18

然后就一直下一步下一步就好了!!。这下快照就被当成自己现在使用的硬盘了。如果把这个快照玩坏了,可以从新照一张。并重复上述的过程。只要不把母盘玩坏就不要担心。



下面既然知道了这么多虚拟机的管理工具,那么写一些脚本吧。

这样可以更高效的管理自己的计算机。

#!/bin/bash
##############################################################
# File Name: vmctl
# Author: Nicholas

# Adress: Xi'an Maopo
###########################################################

if [ $# -ne 2  ];then
        echo "Usage ERROR"
        exit 1
fi

HD_Dir="/var/lib/libvirt/images/"

function reset() {
        virsh destroy $1 &> /dev/null
        echo "poweroff $1 ..."
        virsh undefine $1 &> /dev/null
        echo "create disk ..."
        if [ ! -e ${HD_Dir}vm1.qcow2 ];then
                echo "ERROR:Mother hard disk nerver existed... "
                exit 2
        fi
        qemu-img create -f qcow2 -b ${HD_Dir}vm1.qcow2 ${HD_Dir}$1.qcow2 &> /dev/null
        echo "create $2 vm..."
virt-install \
--name $1 \
--ram 1024 \
--disk ${HD_Dir}$1.qcow2 \
--import &> /dev/null &
}

function check_old(){
        vmname=`virsh list --all |sed '1,2d'|awk '{print $2}'`

        for item in $vmname;do
                if [[ ${item} == $1 ]]
                then
                        return 0
                fi
        done
        return 1
}

function  check_status(){
        vmname=`virsh list --all |sed '1,2d'|awk '{print $2":"$3}'|sed '$d'`
        for item in $vmname;do
        tmp=`echo $item|cut -d":" -f1`
        if [[ ${tmp} == $1  ]];then
                 tmp=`echo $item|cut -d":" -f2`
                 if [[ $tmp == shut || ${tmp} == 关闭 ]];then
                         return 0
                 else
                         return 1
                 fi
         fi
         done
}

Os_name=$2

check_old ${Os_name}
if [ $? -eq 1 ];then
       echo "ERROR:Vir_machine ${Os_name} not found ..."
       exit 3
fi


case $1 in
        reset)
                reset ${Os_name}
        ;;
        view)
                virt-viewer ${Os_name} &  &> /dev/null
        ;;
        poweroff)
                check_status ${Os_name}
                if [[ $? == 0 ]];then
                        echo "${Os_name} has already down"
                else
                        virsh shutdown ${Os_name} &>/dev/null
                        echo "${Os_name} shutdown ..."
                fi
        ;;
        start)
                check_status ${Os_name}
                if [[ $? == 0 ]];then
                         virsh start ${Os_name} &> /dev/null
                         echo "${Os_name} Starting ..."
                else
                        echo "${OS_name} has already run..."
                fi
       ;;
        stop)
                check_status ${Os_name}
                if [[ $? == 0 ]];then
                        echo "${Os_name} has already down"
                else
                        virsh destroy ${Os_name} &> /dev/null
                        echo "${Os_name} stopping ..."
                fi
        ;;
        status)
                check_status ${Os_name}
                if [[ $? == 0 ]];then
                        echo "${Os_name} is down"
                else
                        echo "${Os_name} is running"
                fi
        ;;
        *) echo "ERROR:SYNTAX ERROR --option 
   
    
    
     
      
       
       
        
        
          " esac