KVM学习笔记

Stella981
• 阅读 685

1.查看主机是否支持KVM,egrep -c '(vmx|svm)' /proc/cpuinfo

2.如果单台虚机的vCPU数量大于物理vCPU的数量,会带来明显性能损失。

3.VirtualBox创建的虚拟机目前不支持Inter VT-x/EPT等虚拟化,所以直接使用vmvare创建虚拟机,然后安装kvm即可。使用qemu创建虚拟机时,一定要启用-enable-kvm,会带来明显的性能提升。

4.运行一台虚拟机:

qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm -boot order=cd -hda ubuntu-server.qcow2 -cdrom ubuntu-16.04-server-amd64.iso -monitor stdio -net nic -net user,hostfwd=::5022-:22,hostfwd=::5080-:80 -net dump -vnc :2 -device piix3-usb-uhci -device usb-tablet

windows虚机可以加 -balloon virtio -device virtio-serial-pci 用于虚拟virtio相关的设备,-net nic,model=virtio

-m 内存MB

-smp vCPU数量

-boot order=cd 即启动顺序为先是硬件磁盘,再是cdrom光盘。(c:hda,d:cdrom)

-hda file 表示使用文件作为系统的第0块IDE磁盘,hdb,hdc,hdd分别表示第1-3块磁盘。使用我们制作好的磁盘文件。

-cdrom file 使用文件作为光盘镜像。

-monitor stdio 在标准输入输出上开启qemu monitor

-net nic 分配一张网卡

-net tap 表示启用桥接模式的网络,qemu会检测当前系统的ip route找到brX网卡接口

没有任何-net参数时,qemu默认使用-net nic 。桥接网络需要配置桥接网卡如br0.

-net user表示使用用户模式的网络。其自己实现了TCP/IP协议栈。hostfwd表示端口转发。将虚机的端口转发到宿主机的端口。

-net dump 相当于对虚机执行tcpdump

-vnc :2 表示开启VNC界面,不使用SDL显示虚机的图形界面。VNC server的端口为5900+2,使用vncviwer访问这个端口即可。

-device piix3-usb-uhci -device usb-tablet 解决VNC中的鼠标偏移问题

5.创建一个空镜像文件:qemu-img create -f qcow2 xxxx.qcow2 20

最后一个参数表示镜像文件大小。QCOW2格式的镜像为动态增长大小。初始大小为0

6.查看QEMU支持的所有cpu模型:qemu-system-x86_64 -cpu ?

7.可用的物理内存空间和交换空间的大小之和应该等于或大于配置给所有客户机的内存总和,否则,在各个客户机内存使用同时达到较高比率时可能会有客户机因内存不足被强制关闭。

8.磁盘挂载:ls -al /dev/disk/by-uuid  查看磁盘的UUID

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=aca02c5d-6cd5-4d44-99c3-01254abc3cda /               ext4    errors=remount-ro 0       1

<1> fdisk -l 查看可用磁盘,假如可用磁盘是/dev/sda

<2> fdisk /dev/sda编辑分区信息,p查看分区表,w保存分区表,n新建分区

<3> mount /dev/sda4 /mnt 将分区挂载到挂载点

<4>编辑 /etc/fstab 将挂载命令开机执行

<5> mount -a 验证fstab文件是否正确。

9.换光盘问题,在qemu monitor界面下,输入

info block

得到光盘的设备名如ide1-cd0:

ide0-hd0 (#block160): win10.qcow2 (qcow2)
    Cache mode:       writeback

ide1-cd0 (#block379): /dev/cdrom (raw, read-only)
    Removable device: not locked, tray closed
    Cache mode:       writeback

<1>弹出光驱:

eject ide1-cd0

<2>插入新光盘:change ide1-cd0 newCdrom.iso或者/dev/cdrom,/dev/sr0

10.虚机迁移:

<1> 原主机根据镜像文件创建增量镜像文件:qemu-img create -f qcow2 -o backing_file=ubuntu-server.qcow2,size=20G ubuntu-instance1.qcow2   注意backing_file即为基础的镜像文件,ubuntu-instance2.qcow2为增量镜像文件。

<2>目的主机:同样创建同一个backing_file的镜像文件,

qemu-img create -f qcow2 -o backing_file=ubuntu-server.qcow2,size=20G ubuntu-instance2.qcow2

<3>运行目的主机打开其监听状态:

qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=ubuntu-instance2.qcow2,if=virtio -cdrom /dev/cdrom -monitor stdio -net nic,model=virtio -net user  -net dump -vnc :3 -balloon virtio -device virtio-serial-pci -incoming tcp:0:6666

  注意-incoming tcp:0:6666 表示监听0.0.0.0:6666端口。

<4>在源主机的qemu monitor中执行migrate -i tcp:127.0.0.1:6666,等待增量执行完成。源主机会被suspend

11.启动虚机时添加-cpu host参数可以支持KVM嵌套虚拟化。-cpu host表示将宿主机的cpu暴露给客户机使用,但是存在动态迁移的问题。因此建议使用-cpu qemu64,+vmx来激活vmx特性。其他cpu特性同理。

12.在宿主机中,开启KSM(Kennel SamePage Merging)内核同页合并以减少物理内存的使用,该服务扫描QEMU进程中相同的内存然后合并,如果运行的虚拟机操作系统类似可以使用该服务减少内存。开启: echo 1>/sys/kernel/mm/ksm/run

13.libvirt xml示例:

命令行:

qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=win10.qcow2,if=virtio -cdrom /dev/cdrom -monitor stdio -net nic,model=virtio -net user -vnc :1 -device piix3-usb-uhci -device usb-tablet -balloon virtio -device virtio-serial-pci

<domain type="kvm" xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    <name>win2008</name>
    <uuid>825a2ede-0aca-47b6-b0c8-aebe70f5180e</uuid>
    <os>
        <type>hvm</type>
        <boot dev="hd"/>
        <boot dev="cdrom"/>
    </os>
    <vcpu placement='static'>1</vcpu>
    <memory unit='KiB'>1048576</memory>
    <currentMemory unit='KiB'>1048576</currentMemory>

    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <on_lockfailure>poweroff</on_lockfailure>

    <features>
        <pae/>
        <acpi/>
        <apic/>
    </features>

    <clock offset='utc'/>

    <devices>
          <emulator>/usr/bin/kvm-spice</emulator>
          <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
               <source file='/home/denglei/qemu/win10.qcow2'/>
            <target dev='vda' bus='virtio'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
          </disk>
          
          <controller type='usb' index='0'>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
          </controller>
          <controller type='ide' index='0'>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
          </controller>

        <interface type='network'>
          <mac address='52:54:00:bd:f9:55'/>
          <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 port='0'/>
        </console>
        <input type="tablet" bus="usb"/>
        <input type="mouse" bus="ps2"/>
        <graphics type="vnc" port="5904" listen="0.0.0.0"/>

         <sound model='ich6'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </sound>
        <video>
          <model type='qxl' ram='65536' vram='65536' vgamem='16384' 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>

KVM学习笔记

虚拟机磁盘读写测试。

KVM学习笔记

本地宿主机测试的磁盘读写

14.新的命令的书写(网络部分),同时创建多台虚拟机会出现mac地址相同的情况,因此给虚机网卡指定ip:

#!/bin/sh
no=$2
qemu-system-x86_64 -m 1024 -smp 1,maxcpus=8 -enable-kvm -boot order=cd -drive file=$1,if=virtio -cdrom /dev/cdrom -monitor stdio\
 -netdev tap,id=net$2\
 -device e1000,netdev=net$2,mac=`echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'`\
 -vnc :$2 -balloon virtio\
 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5\
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
5个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这