当前位置:   article > 正文

创建虚拟机-qemu-kvm和openvswitch原型环境部署和基本测试 (2)

qemu-kvm 包含vncserver吗

使用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(不推荐)

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

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

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

2. 安装VNC Server

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

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

3. 启动虚拟机

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

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

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

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

  1. /usr/libexec/qemu-kvm
  2. -name centos_desktop_vm09 #虚拟机名字
  3. -uuid 9929edac-19cb-505c-fbac-1b4d2c30bafe #虚拟机UUID
  4. -m 1024 # 内存
  5. -smp 2,sockets=2,cores=1,threads=1 # CPU
  6. -monitor tcp:10.60.0.45:8809,server,nowait # 监控
  7. -drive file=/home/kvmdisk/qcow2.rhel64.3g.05.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=writeback #磁盘
  8. -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 # 驱动
  9. -vnc 192.168.1.5:9 # 远程桌面访问
  10. -vga cirrus # 选择显卡
  11. -cdrom /home/iso/rhel-server-6.4-x86_64-dvd.iso
  12. -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
  13. -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,是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支持的时候才有效)

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

4. 通过VNC访问虚拟机

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

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

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

  1. $ nc 192.168.1.5 5555
  2. [xinhua@mysql01 ~]$ nc mysql01 8809
  3. QEMU 0.12.1 monitor - type 'help' for more information
  4. (qemu) info
  5. info
  6. info version -- show the version of QEMU
  7. info commands -- list QMP available commands
  8. info network -- show the network state
  9. info chardev -- show the character devices

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

6.本次测试遇到的问题

(1) 如果忘记设置内存-m,那么系统启动时停止在childrip,即内存越界。
  1. [ 7.048543] [<ffffffff8100ce22>] kernel_thread+0x82/0xe0
  2. [ 7.054566] [<ffffffff8105fec1>] ? __call_usermodehelper+0x0/0x6a
  3. [ 7.061482] [<ffffffff8105fcd8>] ? ____call_usermodehelper+0x0/0x118
  4. [ 7.068666] [<ffffffff8100ce80>] ? child_rip+0x0/0x20
  5. [ 7.074407] [<ffffffff8105ff0c>] ? __call_usermodehelper+0x4b/0x6a
  6. [ 7.081403] [<ffffffff8106168e>] worker_thread+0x14e/0x1f8
  7. [ 7.087627] [<ffffffff810651a3>] ? autoremove_wake_function+0x0/0x38
  8. [ 7.094818] [<ffffffff81061540>] ? worker_thread+0x0/0x1f8
  9. [ 7.101039] [<ffffffff81064f69>] kthread+0x69/0x71
  10. [ 7.106488] [<ffffffff8100ce8a>] child_rip+0xa/0x20
  11. [ 7.112027] [<ffffffff81064f00>] ? kthread+0x0/0x71
  12. [ 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

转载于:https://www.cnblogs.com/vimisky/p/5686875.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/217397
推荐阅读
相关标签
  

闽ICP备14008679号