zoukankan      html  css  js  c++  java
  • 创建虚拟机-qemu-kvm和openvswitch原型环境部署和基本测试 (2)

    使用qemu-kvm创建虚拟机

    本文包含以下几个部分:

    1. 创建磁盘
    2. 安装VNC Server
    3. 启动虚拟机
    4. 通过VNC访问虚拟机
    5. 通过nc访问虚拟机监控和管理
    6. 遇到的问题

    1. 创建磁盘

    使用qemu-kvm工具中的qemu-img创建磁盘。

    支持的文件类型:blkdebug blkverify bochs cloop dmg file ftp ftps gluster host_cdrom host_device host_floppy http https iscsi nbd parallels qcow qcow2 qed quorum raw rbd sheepdog ssh tftp vdi vhdx vmdk vpc vvfat

    $ qemu-img create -f qcow2 qcow2.rhel64.img 5G
    

    还可以使用dd命令创建raw disk(不推荐)

    dd if=/dev/zero of=/path/os.img bs=1024 count=1024
    dd if=/dev/zero of=/path/os.img bs=1 count=1 seek=3G
    mkfs.ext3 /path/os.img
    mount -o loop /path/os.img /mnt
    

    往/mnt中写东西,然后umount
    到其它地方挂载即可。

    注: 如果安装图形化界面的Linux,最好5G以上,因为安装完RHEL或者CentOS 6后,系统会占用2.6GB以上的空间。

    2. 安装VNC Server

    $ yum install vnc-server tigervnc #centos 5.x
    $ yum install tigervnc-server tigervnc #centos 6.x
    

    注:如果vncserver仅用于虚拟机VNC访问,那么不需要初始化配置和启动vncserver。

    3. 启动虚拟机

    qemu-kvm创建虚拟机时,可以指定CPU、内存、磁盘、光驱、网卡、USB、声卡等硬件,也可以指定monitor监控方式用于监控和管理虚拟机。

    由于虚拟机网络比较复杂,本文不配置网卡,留在虚拟机网络一文和openswitch网络中详细介绍。

    由于虚拟机USB和声卡目前用不到,本文不配置,不介绍。

    启动虚拟机后需要安装操作系统的,用下面的命令:

    /usr/libexec/qemu-kvm
    -name centos_desktop_vm09 #虚拟机名字
    -uuid 9929edac-19cb-505c-fbac-1b4d2c30bafe #虚拟机UUID
    -m 1024 # 内存
    -smp 2,sockets=2,cores=1,threads=1 # CPU
    -monitor tcp:10.60.0.45:8809,server,nowait # 监控
    -drive file=/home/kvmdisk/qcow2.rhel64.3g.05.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=writeback #磁盘 
    -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 # 驱动
    -vnc 192.168.1.5:9 # 远程桌面访问
    -vga cirrus # 选择显卡
    -cdrom /home/iso/rhel-server-6.4-x86_64-dvd.iso
    -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
    -boot once=dc #指定驱动器启动顺序
    

    启动虚拟机后不需要安装操作系统的,去掉-boot或者改为-boot c,去掉-cdrom。

    注: 实际使用时,需要安装操作系统后,制作成虚拟机镜像,每次启动虚拟机时,直接使用复制镜像作为启动磁盘,启动后就不用安装操作系统了。虚拟机镜像会在之后的文章中单独描述。

    参数含义:

    -m,指定内存,如果不指定,内存默认为128MB;如果参数值为数字,则单位为MB;可以加单位,M或者G。

    -smp,cpu架构为smp,sockets为插槽数(CPU数),cores为单颗CPU核心数,threads为超线程数。

    -monitor,监视器重定向,默认为vc(图形界面)和stdio(命令行界面);如果希望通过网络访问,可以为telnet:192.168.1.5,server,nowait ,也可以为tcp:192.168.1.5:5555,server,nowait。server表示是一个linstening socket, nowait表示等待客户端连接的时候不应该阻塞。

    -drive和-device,磁盘命令,drive是磁盘,device是驱动,两者配合在一起使用,drive用于指定磁盘文件位置,device用于指定驱动,采用virtio驱动来提升效率,对应的virtio磁盘驱动为virtio-blk-pci。注意-device的drive属性值需要指向某个drive,所以-drive的id和-device的drive要一致。bootindex表示启动顺序。bus、addr用于指定总线,一般是pci,可以指定pci.0, pci.1等,addr不能和其它device重复,大于0即可。

    (-drive详细) -drive option[,option[,option[,...]]]
    option有以下列表:
    file=[file path], if=[file type (ide, scsi, virtio...)], index=[index], media=[disk| cdrom], snapshot=[on|off],cache=[none|writeback|unsafe|directsync|writethrough],format=[qcow2|raw|vmdk|...],copy-on-read=[on|off]

    -cdrom,指定CD/DVD的iso文件路径,最常用于系统安装时。

    -boot,指定驱动器启动顺序,可以直接用-boot c或者-boot d,其中d表示磁盘,c表示光驱。这个参数可以用-device参数后面的bootindex属性代替。

    -vnc,指定vnc地址,-vnc后面的格式是:<Port_Index>, 不是Port,是Port_Index。vncserver不需要提前启动,指定-vnc 192.168.1.5:9后,qemu-kvm命令执行后,会自动启动vncserver。

    注: 有三个参数本次测试没有使用,但是virt-manager启动虚拟机时会自动加上。

    -nodefconfig (默认下qemu会从sysconfdir和datadir读取配置,-nodefconfig禁止qemu读取 )

    -nodefaults (默认qemu会创建serial port, parallel port, virtual console, monitor device, VGA adapter, floppy and CD-ROM drive and others,-nodefaults禁止创建这些默认的)

    -enable-kvm (允许KVM全虚拟化支持,该选项只有在linux编译时就加入了KVM支持的时候才有效)

    带第二块盘:

    /usr/libexec/qemu-kvm
    -name centos6 -smp 2,cores=2 -m 1024 
    -drive file=/home/kvmdisk/qcow2.rhel64.2.img,media=disk,format=qcow2,if=none,id=systemdisk 
    -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x04,drive=systemdisk,id=systemdiskvirtio,bootindex=0 
    -drive file=/home/kvmdisk/qcow2.pdisk.1.img,media=disk,format=qcow2,if=none,id=datadisk 
    -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x05,drive=datadisk,id=datadiskvirtio 
    -vnc 10.60.0.45:7 
    -boot c
    

    4. 通过VNC访问虚拟机

    客户端:在windows中,下载vncviewer,运行后,访问:<5900+Port_Index> ( 192.168.1.5:5909 ) 地址。

    5. 通过nc访问虚拟机监控和管理(虚拟机模拟器)

    根据-monitor指定的参数,如果是tcp类型的,则可以通过以下命令访问:

    $ nc 192.168.1.5 5555
    
    [xinhua@mysql01 ~]$ nc mysql01 8809
    QEMU 0.12.1 monitor - type 'help' for more information
    (qemu) info 
    info 
    info version  -- show the version of QEMU
    info commands  -- list QMP available commands
    info network  -- show the network state
    info chardev  -- show the character devices
    

    注: 如果是telnet类型的,可以直接通过telnet 192.168.1.5访问。如果是unix socket类型的,可以通过 nc -U <unix_socket_filepath>访问,但是这种方式实际并不可用。

    6.本次测试遇到的问题

    (1) 如果忘记设置内存-m,那么系统启动时停止在childrip,即内存越界。
    [    7.048543]  [<ffffffff8100ce22>] kernel_thread+0x82/0xe0  
    [    7.054566]  [<ffffffff8105fec1>] ? __call_usermodehelper+0x0/0x6a  
    [    7.061482]  [<ffffffff8105fcd8>] ? ____call_usermodehelper+0x0/0x118  
    [    7.068666]  [<ffffffff8100ce80>] ? child_rip+0x0/0x20  
    [    7.074407]  [<ffffffff8105ff0c>] ? __call_usermodehelper+0x4b/0x6a  
    [    7.081403]  [<ffffffff8106168e>] worker_thread+0x14e/0x1f8  
    [    7.087627]  [<ffffffff810651a3>] ? autoremove_wake_function+0x0/0x38  
    [    7.094818]  [<ffffffff81061540>] ? worker_thread+0x0/0x1f8  
    [    7.101039]  [<ffffffff81064f69>] kthread+0x69/0x71  
    [    7.106488]  [<ffffffff8100ce8a>] child_rip+0xa/0x20  
    [    7.112027]  [<ffffffff81064f00>] ? kthread+0x0/0x71  
    [    7.117564]  [<ffffffff8100ce80>] ? child_rip+0x0/0x20  
    
    (2) 遇到vnc窗口一闪而过,通过在客户端的expert页面中修改colorlevel属性为rgb222解决。
    (3) qemu-kvm命令后面的参数的属性用逗号隔离的,注意逗号前不要加空格
    (4) 如果设置内存小于512M,可能不能通过图形化界面安装Linux操作系统,只能通过文本命令行安装。

    7. 其它更高级的虚拟化管理工具生成的qemu-kvm进程

    OpenStack nova启动的KVM虚拟机进程
    /usr/libexec/qemu-kvm -name instance-0000008b -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu Westmere,+rdtscp,+pdpe1gb,+x2apic,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pclmuldq,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 9916d558-ca8d-4afe-b545-1b0144ef8c17 -smbios type=1,manufacturer=Fedora Project,product=OpenStack Nova,version=12.0.0-1.el7,serial=6d17f1e0-1901-48a2-aa98-7e8636183b0f,uuid=9916d558-ca8d-4afe-b545-1b0144ef8c17,family=Virtual Machine -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-instance-0000008b/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/data3/novastate/instances/9916d558-ca8d-4afe-b545-1b0144ef8c17/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=32 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:73:cc:7f,bus=pci.0,addr=0x3 -chardev file,id=charserial0,path=/data3/novastate/instances/9916d558-ca8d-4afe-b545-1b0144ef8c17/console.log -device isa-serial,chardev=charserial0,id=serial0 -chardev pty,id=charserial1 -device isa-serial,chardev=charserial1,id=serial1 -device usb-tablet,id=input0 -vnc 192.168.201.253:12 -k en-us -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -msg timestamp=on
    
    virt-manager启动的KVM虚拟机进程

    如果img为qcow2格式,但是自动创建虚拟机时,向导并没有让指定磁盘类型,因此为raw。这样在安装客户机的操作系统时,会报磁盘没有空间的错误。

    /usr/libexec/qemu-kvm -name centos-vm01 -S -M rhel6.6.0 -enable-kvm -m 1024 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -uuid 55c34d55-23f2-2f13-a02d-ce8995adebb7 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/centos-vm01.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-reboot -no-shutdown -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/home/kvmdisk/qcow2.rhel64_vm01.img,if=none,id=drive-virtio-disk0,format=raw,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/home/kvmdisk/rhel-server-6.4-x86_64-dvd.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:70:46:65,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
  • 相关阅读:
    升级windows 11小工具
    windows 10更新升级方法
    您需要了解的有关 Oracle 数据库修补的所有信息
    Step by Step Apply Rolling PSU Patch In Oracle Database 12c RAC Environment
    Upgrade Oracle Database Manually from 12.2.0.1 to 19c
    如何应用版本更新 12.2.0.1.210420(补丁 32507738 – 2021 年 4 月 RU)
    xtrabackup 安装、备份和恢复
    Centos_Lvm expand capacity without restarting CentOS
    Centos_Lvm_Create pv vg lv and mount
    通过全备+relaylog同步恢复被drop的库或表
  • 原文地址:https://www.cnblogs.com/vimisky/p/5686875.html
Copyright © 2011-2022 走看看