苏苏的博客

简约至极

使用kvm创建和管理虚拟机

使用Linuxkvm模块的相关笔记

安装和配置KVM

KVM与XEN区别

OPENVZ就不说了,是半虚拟化,不能安装Windows操作系统

KVM是内核模块,从2.6.20内核开始,kvm模块就包含在Linux内核中,只需加载此模块即可

#查看宿主机CPU是否在硬件上支持虚拟化扩展特性
cat /proc/cpuinfo | grep -E "(vmx|svm)"

#加载kvm模块(Intel VT)
modprobe kvm
modprobe kvm-intel
#注意:如果加载失败,说明服务器硬件不支持或BIOS中未开启虚拟化扩展

运行命令lsmod | grep kvm检查 KVM 模块是否成功安装

XEN是一套虚拟化方案,可以直接安装,不需要先安装操作系统.

KVM起步较晚,XEN起步早发展成熟,但目前KVM潜力较大.

KVM 与 qemu

yum install qemu-kvm libvirt virt-install bridge-utils

qemu-kvm 该软件包主要包含KVM内核模块和适用于KVM的QEMU模拟器。KVM模块负责CPU和内存的调度,QEMU负责虚拟机I/O设备的模拟。

libvirt 提供Hypervisor和虚拟机的管理功能。

virt-install 创建和克隆虚拟机的命令行工具包。

bridge-utils 网桥管理工具包,负责桥接网络的创建、配置和管理等工作。

激活并启动libvirtd服务

systemctl enable libvirtd
systemctl start libvirtd

安装CentOS7

diskutil list查看所有磁盘

diskutil unmountdisk /dev/disk1 解除其挂载

用dd将ISO文件写入

sudo dd if=/data/files/iso/CentOS-7-x86_64-Minimal-1511.iso of=/dev/disk2 bs=1m

安装好系统后,更换网易的源 http://mirrors.163.com/.help/centos.html

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
cd /etc/yum.repos.d
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum makecache

搜狐也有,但版本太老 http://mirrors.sohu.com/help/centos.html

可以使用清华大学的. https://lug.ustc.edu.cn/wiki/mirrors/help/centos 速度都十分快.

启用KVM后,需要配置网卡

cd /etc/sysconfig/network-scripts/

桥接网卡

brctl addbr br0 添加一个虚拟网卡

brctl addif br0 em2 将网卡br0桥接到em2 ,这一步将会导致em2断网,远程ssh将会断开

brctl stp br0 on 将br0设置为启用STP协议

ifconfig em2 0 #将em2的IP设置为0

dhclient br0 #将br0网络配置好

brctl show

然后systemctl restart network

route 查看默认网关

https://wiki.centos.org/zh/HowTos/KVM

创建虚拟机磁盘镜像文件

不能创建太小,建议5G-50G

qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。有测试数据表明raw格式的I/O性能略高于qcow2格式,但是在加密,容量,快照方面qcow2格式有优势

qemu-img create -f qcow2 test.qcow2 20G  //建立qcow2格式磁盘文件
qemu-img create -f raw test.raw 20G      //建立raw格式磁盘文件
qemu-img info test.qcow2                 //查看已经创建的虚拟磁盘文件

创建虚拟机

使用osinfo-query os可以查看os-variant都有哪些代号

https://raymii.org/s/articles/virt-install_introduction_and_copy_paste_distro_install_commands.html

创建 Ubuntu

virt-install \
--name ubuntu \
--ram 512 --vcpus 1 \
--boot network,cdrom,menu=on \
--disk path=/disk/kvm/disk1,size=10,format=qcow2,bus=virtio \
--os-type linux \
--os-variant generic \
--nographics --accelerate \
--bridge=br0,model=virtio --keymap=en-us \
--console pty,target_type=serial \
--cdrom=/data/iso/ubuntu-16.04.1-server-amd64.iso \
--extra-args='console=tty0 console=ttyS0,115200n8 serial' \
--hvm --dry-run

创建CentOS

virt-install \
--name centos \
--ram 512 --vcpus 1 \
--disk path=/disk/kvm/disk1,size=10,format=qcow2,bus=virtio \
--os-type linux \
--os-variant generic \
--accelerate \
--bridge=br0,model=virtio --keymap=en-us \
--console pty,target_type=serial \
--location=/data/iso/CentOS-7-x86_64-Minimal-1511.iso \
--extra-args='console=tty0 console=ttyS0,115200n8 serial' \
--hvm --dry-run

virsh –connect qemu:///system

创建Debain

先挂载 sudo mount -o loop,unhide -t iso9660 -r /data/iso/debian-8.6.0-amd64-CD-1.iso /mnt/cdrom

需要nfs启动 service nfs start

添加/mnt/cdrom *(ro,insecure,all_squash)到文件/etc/exports

并刷新exportfs -r

virt-install \
--name debain \
--ram 512 --vcpus 1 \
--boot network,cdrom,menu=on \
--disk path=/disk/kvm/disk4,size=10,format=qcow2,bus=virtio \
--os-type linux \
--os-variant generic \
--bridge=br0,model=virtio --keymap=en-us \
--console pty,target_type=serial \
--accelerate \
--location=/mnt/cdrom \
--extra-args='console=tty0 console=ttyS0,115200n8 serial' \
--vnc --vncport=5911 --vnclisten=0.0.0.0 \
--hvm --dry-run

创建Windows Server

qemu-img create -f qcow2 /disk/kvm/windisk1 50G

针对Windows需要安装一些驱动

sudo wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo

sudo yum install virtio-win

https://fedoraproject.org/wiki/Windows_Virtio_Drivers

virt-install \
--name windows2012 \
--ram 4096 --vcpus 2 \
--disk path=/data/iso/cn_windows_server_2012_r2_with_update_x64_dvd_4048415.iso,device=cdrom \
--disk path=/disk/kvm/windisk1,size=50,format=qcow2,bus=virtio,cache=writeback \
--cdrom=/usr/share/virtio-win/virtio-win-0.1.126.iso \
--os-type windows \
--os-variant win2k12r2 \
--bridge=br0,model=virtio \
--accelerate \
--graphics vnc,port=5999,listen=0.0.0.0 \
--console pty,target_type=serial \
--hvm --dry-run
virt-install \
--name xp1 \
--ram 1024 --vcpus 1 \
--disk path=/data/iso/Deepin_Windows_LiteXP_v6.2_SP3.iso,device=cdrom \
--disk path=/disk/kvm/winxp1,size=10,format=qcow2,bus=virtio,cache=writeback \
--cdrom=/usr/share/virtio-win/virtio-win-0.1.126.iso \
--os-type windows \
--os-variant winxp \
--bridge=br0,model=virtio \
--accelerate \
--graphics vnc,port=5999,listen=0.0.0.0 \
--console pty,target_type=serial \
--hvm --dry-run

出现ERROR 不能混用 --graphics 和旧式的图形选项可能是需要去掉--keymap

关于 加载 virtio 驱动可以参考 http://www.ilanni.com/?p=5877

选择加载viostor磁盘驱动

disk属性就是指虚拟机使用哪一个磁盘镜像文件作为存储地方,指定刚才创建的镜像文件位置即可,size=10,format=qcow2,bus=virtio分别是指大小,格式(跟镜像格式一致),磁盘总线类型(指Value can be ’ide’, ’scsi’, ’usb’, ’virtio’ or ’xen’,virtio是专门为kvm制定的bus,比较常用),大小需要比镜像文件大小要小,相当于镜像是容器,这个disk是里面的水,水太多就溢出了。

bridge=br0,model=virtio –keymap=en-us分别指网卡使用,网卡模式即驱动模式,和键盘制式,桥接模式都使用br0,而虚拟机需要使用virtio这个驱动才能使用虚拟网卡,这个虚拟网卡驱动在linux下支持很好,在windows下支持一般,键盘制式如果不指定的话会出现键位错乱的情况,一般我们使用英式。

使用virsh可以管理已创建的虚拟机

virsh shutdown demo 正常关闭虚拟机

virsh destroy demo 直接销毁虚拟机

可见 http://www.cnblogs.com/lin1/p/5776280.html

启动并进入虚拟机

virsh start 域名 --console

10,彻底删除虚拟机

1,删除虚拟机 virsh destroy +域名

2,解除标记 virsh undefine +域名

3,删除虚拟机文件

virsh destroy windows2012 && virsh undefine windows2012

通过virt-clone命令克隆虚拟机

virt-clone -o centos -n centos2 -f /disk/kvm/disk2

virsh -c qemu:///system list 可以查看正在运行的机器

virsh vncdisplay windows2012查看vnc端口

可以使用其他机器上的vnc viewer 连接

本机 virt-viewer --connect qemu:///system windows2012

windows系统可使用 vncviewer (http://share.suconghou.cn/files/bin/vncviewer.zip) 连接

全屏下用F8键可唤出菜单.

修改相关

hostnamectl 可以查看主机相关信息,主机名,内核版本,64位等

只查看静态、瞬态或灵活主机名,分别使用--static,--transient--pretty选项

要同时修改所有三个主机名:静态、瞬态和灵活主机名: hostnamectl set-hostname Linuxidc

hostname -I 可以获取所有网卡上配置的IP