虚拟机KVM
linux下的虚拟机。 KVM(Kernel-based Virtual Machine)。这是一个开源的系统虚拟化模块。是linux下的一款很不错的虚拟机软件。下面为就来介绍一下KVM的使用。
在使用kvm之前,需要先查看以下自己电脑的cpu是否支持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.在桌面的左上角。有一个应用程序,点击后选择系统工具,然后选择虚拟系统管理器。就可以弹出下面的窗口
2.在窗口的左上角有一个带五角星的电脑标志。这是创建新的虚拟机。点击他,会出现下面的窗口
3.因为我们使用ISO镜像安装,所以要选择第一个(最后一个倒入现有磁盘映像也很有用,后面再说)
4.选择镜像在自己电脑中的位置,再点前进,接着的内存大小和CPU什么的都可以根据自己的喜好设置大小,我将内存,CPU,硬盘按默认的来了,一直下一步吧。
5.前面的都完成以后,就可以给自己的虚拟机创建一个名字了。下面的/var/lib/libvirt/images/xxxx就是硬盘所放的位置。
6.点击完成以后就正式进入虚拟机的安装过程了。
6.1选择第一个Install Red Hat Enterprise Linux 7.1
6.2稍等片刻就会进入Red Hat 的安装欢迎界面。(本人对这点英语还能接受,我就选择英文安装了,如果你的英语水平很差,就可以选择中文安装,这里的语言选择只是安装过程中的语言选择。以后安装好的语言是从新选择的)
6.3这里有界面时间,键盘,语言,安装源不用管,软件选择需要说以下。分区也需要说一下,kdump可以不选,选了也占内存,反正初学者应该用不上系统崩溃分析。网络想选就点一下连接吧。
6.4先说分区,我觉得新手的话点击自动分区就好了,进入后直接点击done就好了,当然为这里选择了手动分区,为把/boot调小了一点,swap分区调大了一点。
6.5再说软件安装,一般来说,新手还是喜欢带GUI的操作系统,所以建议新手安装左边最后一个 Server with GUI。服务器一般喜欢安装最小安装,也就是第一个,最小安装的是最简化的系统,以后缺少什么安装什么就好,没一份多余的。右边是一些软件,比如KDE桌面阿,java工具组包,什么的。
6.6全部都选择好了之后就可以安最右下角的Begin Installation开始安装啦!!
6.7在安装过程中可以点击ROOT PASSWD设置自己的root管理员密码(如果密码设置的太简单,需要按两次完成键才可以哦),还可以在这里添加用户。
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
再演示一下virsh list --all
了解了这些个命令之后,来了解一下虚拟机安装相关的文件吧。刚才在安装的时候说了,硬盘的安装位置在/var/lib/libvirt/images目录下。硬盘文件是以qcow2结尾的。而一些前端文件都是放在/etc/libvirt/qemu目录下,那些文件是以xml结尾的。
没了xml前端文件还不要紧,可以在新建虚拟机那里点击倒入现有磁盘映像。这样就可以恢复虚拟机了,但是没了硬盘文件就坏了,这下就真的把虚拟机玩坏了。
下面讲解一下用命令如何安装一个虚拟机
虚拟机如何用命令安装呢,那需要了解一个命令 virt-insatll,首先这个命令在安装KVM后很可能没有这个命令的。不用担心,只要yum源是配好的只需要一条命令 yum -y install virt-install 就OK啦。这个命令的参数很是麻烦,但有了man手册就省心多了。(yum源的搭建也很简单,只需要刚才安装的那个镜像文件就可以搭建一个yum源)
输入下面的命令就可以自动分配份额开始安装虚拟机了。
由于linux的超级管理员的权限很大,新手很容易将linux玩坏的,那linux有没有像windows下的vmware以一样的快照功能呢。有的,linux下的快照功能是要写脚本的,那么下来先介绍一下linux的快照。
qemu-img命令就可以制作一张快照。就用之前新建的vm1.qcow2创建一个快照吧。再提示一下,这个文件在/var/lib/libvrit/images下。前面说了,xxx.qcow2这个是硬盘文件,是很重要的,那我们可以创建一个副本,也就是快照用,当快照玩坏了,可以再照一张。
看见了么,node1.qcow2文件被创建出来了。 下来我们使用node1.qcow2当作硬盘文件,而不是母盘(vm1.qcow2)了。那怎么将node1.qcow2换上去呢。方法很简单,将原先的Mr.W.xml(这个文件在/etc/libvirt/qemu)这个前端文件删掉,从新创建一个前端文件,并以node1.qcow2作为硬盘文件就好了,以后就一直使用node1.qcow2就好了。
也可以用手工去删除,也可以使用命令去删除。下面,为来演示一下
tips:(因为我是最小安装,没有图形,所以删掉Mr.W.xml 对我没有影响。)
选择最后一个导入现有磁盘映像。
然后路径选择刚刚创建的快照node1.qcow2.
然后就一直下一步下一步就好了!!。这下快照就被当成自己现在使用的硬盘了。如果把这个快照玩坏了,可以从新照一张。并重复上述的过程。只要不把母盘玩坏就不要担心。
下面既然知道了这么多虚拟机的管理工具,那么写一些脚本吧。
这样可以更高效的管理自己的计算机。
#!/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