• [ kvm ] 学习笔记 5:QEMU-KVM 命令详解


    1. QEMU、KVM 、QEMU-KVM

    QEMU 提供了一系列的硬件模拟设备(cpu、网卡、磁盘等),客户机指令都需要QEMU翻译,因此性能较差。KVM 是Linux 内核提供的虚拟化模块,负责CPU和内存的虚拟化,但是缺少I/O设备的虚拟化。QEMU-KVM 就是 KVM 与 QEMU 的结合,KVM 负责CPU虚拟化+内存虚拟化,QEMU 模拟其他I/O设备。

    2. QEMU-KVM 命令详解

    2.1 qemu-kvm 命令基本格式

    qemu-kvm 工具命令格式如下:

    qemu-kvm [options] [disk_image]
    

    其中,opions 是各种选项、参数,disk_image 是客户机的磁盘镜像文件(默认被挂载为第一个 IDE 磁盘设备)。

    2.2 CPU 相关的参数

    (1)-cpu 参数

    指定CPU模型,默认的 CPU 模型为 qemu64,"-cpu ?" 可以查询当前 qemu-kvm 支持哪些 cpu 模型。

    [root@192.168.118.14 ~]#qemu-kvm -cpu ?
    x86           qemu64  QEMU Virtual CPU version 1.5.3                  
    x86           phenom  AMD Phenom(tm) 9550 Quad-Core Processor         
    x86         core2duo  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz 
    x86            kvm64  Common KVM processor                            
    x86           qemu32  QEMU Virtual CPU version 1.5.3                  
    x86            kvm32  Common 32-bit KVM processor                     
    x86          coreduo  Genuine Intel(R) CPU           T2600  @ 2.16GHz 
    x86              486                                                  
    x86          pentium                                                  
    x86         pentium2                                                  
    x86         pentium3                                                  
    x86           athlon  QEMU Virtual CPU version 1.5.3                  
    x86             n270  Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
    x86      cpu64-rhel6  QEMU Virtual CPU version (cpu64-rhel6)          
    x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)   
    x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
    x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)       
    x86         Westmere  Westmere E56xx/L56xx/X56xx (Nehalem-C)          
    x86      SandyBridge  Intel Xeon E312xx (Sandy Bridge)                
    x86          Haswell  Intel Core Processor (Haswell)                  
    x86        Broadwell  Intel Core Processor (Broadwell)                
    x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)           
    x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)          
    x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)          
    x86       Opteron_G4  AMD Opteron 62xx class CPU                      
    x86       Opteron_G5  AMD Opteron 63xx class CPU                      
    x86             host  KVM processor with all supported host features (only available in KVM mode)
    

    如果想尽可能多的将宿主机的 CPU 特性暴露给客户机使用,则可以使用 "-cpu host" 参数。使用 "-cpu host" 参数会带来动态迁移的限制,不让客户机在不同的cpu硬件上迁移。

    (2)-smp 参数

    -smp n[,scores=scores][,threads=threads][,sockets=sockets]
    

     设置客户机总共有 n 个逻辑CPU,并设置了其中 CPU socket 的数量、每个socket 上核心(core)的数量、每个核心上的线程(thread)数量。其中:n = sockets x cores x threads

    2.3 内存相关的参数

    (1) -m megs 参数

    设置客户机内存大小为 megs MB。默认单位:MB,可设置 GB

    (2)--mem-path path参数

    从path路径表示的临时文件中为客户机分配内存,主要是分配大页内存(如2 MB 大页),如 "--mem-path /dev/hugepages"

    (3)--mem-prealloc 参数

    启动时即分配全部的内存,而不是根据客户机请求而动态分配,必须与 "--mem-path" 参数一起使用

    (4)-balloon 开启内存气球的设置

    "-balloon virtio" 为客户机提供 virtio_balloon 设备,从而通过内存气球balloon,可以在 QEMU monitor 中用 "balloon"命令来调节客户机占用内存的大小。

    2.4 磁盘相关的参数

    Block device options:
    -fda/-fdb file  use 'file' as floppy disk 0/1 image
    -hda/-hdb file  use 'file' as IDE hard disk 0/1 image
    -hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
    -cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
    -drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
           [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
           [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]
           [,serial=s][,addr=A][,id=name][,aio=threads|native]
           [,readonly=on|off][,copy-on-read=on|off]
           [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]][[,iops=i]|[[,iops_rd=r][,iops_wr=w]]
                    use 'file' as a drive image
    -mtdblock file  use 'file' as on-board Flash memory image
    -sd file        use 'file' as SecureDigital card image
    -pflash file    use 'file' as a parallel flash image
    -snapshot       write to temporary files instead of disk image files
    -hdachs c,h,s[,t]
                    force hard disk 0 physical geometry and the optional BIOS
                    translation (t=none or lba) (usually QEMU can guess them)
    -fsdev fsdriver,id=id[,path=path,][security_model={mapped-xattr|mapped-file|passthrough|none}]
    [,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
    -virtfs local,path=path,mount_tag=tag,security_model=[mapped-xattr|mapped-file|passthrough|none]
            [,writeout=immediate][,readonly][,socket=socket|sock_fd=sock_fd]
    -virtfs_synth Create synthetic file system image
    

    (1)-hda、-hdb 和 -cdrom 等参数

      设置客户机的 IDE 磁盘和光盘设备。如 "-hda centos7.img" 将 centos7.img 镜像文件作为客户机的第一个 IDE 磁盘。

    (2)-drive 参数

      详细的配置一个驱动。

    例如: -drive file=/images/centos7.img,if=virtio,cache=writeback 使用 virtio_blk 驱动 和 磁盘回写机制 来支持该磁盘文件
    

    (3)-boot 参数

    -boot [order=drives][,once=drives][,menu=on|off]
    

    设置客户机启动的各种选项(包括启动顺序等),如:在安装客户机操作系统时,使用 "-boot order=dc -hda centos7.img -cdrom centos7.iso",让 centos.img 文件作为IDE磁盘,安装光盘 centos7.iso 作为 IDE 光驱,并且从光盘启动客户机,从而让客户机进入到系统安装的流程中。

    2.5 网络相关参数

    (1) -net nic 参数

    为客户机创建一个网卡,凡是使用 qemu-kvm 模拟的网卡作为客户机网络设备的情况都应该使用该参数,通常该参数与 -net tap 连用。

    例如:-net nic model=virtio, macaddr=52:54:00:ac:0f:11 使用 -net nic 命令时,一定要手动指定mac地址,否则客户机的mac地址会与宿主机mac一致。
    

    (2)-net user参数

    让客户机使用不需要管理员权限的用户模式网络

    例如:-net nic -net user
    

    (3)-net tap参数

    使用宿主机的TAP网络接口来帮助客户机建立网络。使用网桥连接和NAT模式网络的客户机都会使用到 "-net tap" 参数。

    例如:-net nic -net tap,ifname=vnet0,script=/etc/qeum-ifup,downscript=no  ifname 指定在宿主机空间的网卡名称,script 和 downscript 为配置网络脚本。
    

    2.6 显示相关的参数

    (1)vnc参数

    默认使用 vnc 方式显示客户机。

    例如手动指定:-vnc localhost:2
    

    (2)-nographic参数

    让客户机以命令行的方式在当前终端启动显示。

    例如:

    [root@192.168.118.14 ~]#qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -nographic
    ...
    [系统启动信息]
    ...
    
    login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
    <!DOCTYPE login:    # Ctrl+A H 获取帮助信息
    C-a h    print this help
    C-a x    exit emulator
    C-a s    save disk data back to file (if -snapshot)
    C-a t    toggle console timestamps
    C-a b    send break (magic sysrq)
    C-a c    switch between console and monitor
    C-a C-a  sends C-a
    
    [00:00:33.833] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
    <!DOCTYPE login:    # Ctrl+A C 切换到 qemu-monitor 模式
    [00:00:37.237] (qemu)
    
    [00:00:37.237] (qemu)   # Ctrl+A C 切换为命令行模式
    [00:01:13.592] login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
    <!DOCTYPE login: 
    

    (3)-daemonize 参数

    在启动时让 qemu-kvm 作为守护进程在后台运行。如果没有该参数,默认 qemu-kvm 在启动客户机后就会占用标准输入输出,直到客户机退出。

    2.7 其他参数

    (1)-name 参数

    -name 指定客户机名称可用于宿主机上唯一标识该客户机。

    2.8 总结

    总结实际场景中经常用到的一些关于 qeum-kvm 的命令组合:

    (1)直接通过镜像文件启动客户机方式:

    [root@192.168.118.14 ~]#qemu-img -name 'test' -smp 1 -m 512m /images/cirros-0.3.5-i386-disk.img [-daemonize | -nographic]
    # -daemonize 守护进程方式启动
    # -nographic 占用终端输出输入直接显示
    二者选其一。
    

    (2)创建镜像文件并通过 iso 安装 客户机操作系统:

    关于 qemu-img 的使用查看:KVM 基础功能详解 倒数第二部分。

    [root@192.168.118.14 ~]#qemu-kvm -name "centos7" -smp 2 -m 1024m -drive file=/images/centos_7.qcow2,if=virtio,cache=writeback -cdrom /usr/local/src/CentOS-7-x86_64-Minimal-1511.iso -daemonize
    VNC server running on `::1:5900'
    

    上面两种方式都没有应用网络方式,如果需要使用网络服务请参考:

    [kvm] 四种简单网络模型

  • 相关阅读:
    求阶乘及其和
    JAVA 字符串题目 以静态方法实现encode()和decode()的调用
    JAVA 类与对象题目5
    JAVA 类与对象题目4
    JAVA 类与对象题目3
    JAVA 类与对象题目2
    JAVA 基础练习题代码
    JAVA 关于值类型和引用类型的区别
    JAVA学习 判断一个字符或字符是否位于另一个字符串的末尾
    JAVA 截取4个随机数字字母的代码
  • 原文地址:https://www.cnblogs.com/hukey/p/11157768.html
Copyright © 2020-2023  润新知