qemu-kvm 命令行方式启动虚拟机

对于KVM虚拟机,一般启动我们会用 virsh create ×××.xml 方式启动,其实底层还是调用了qemu-kvm命令行去执行,只不过virsh在启动前做了一些准备工作。有时候,我们需要用qemu-kvm方式去启动虚拟机,比如本人想做基于KVM的linux内核调试。

1、生成命令行
如果正在跑一个虚拟机,可以根据域ID或者虚拟机名城生成命令行:

virsh domxml-to-native qemu-argv 1 或者
virsh domxml-to-native qemu-argv centos7.0

在这里插入图片描述
如图,生成了一大串命令行,里面默认带了很多参数,可以根据自己需求精简掉。

当然也可以一根据xml文件来生成命令:

virsh domxml-to-native qemu-argv –xml   xxx.xml

2、修改需命令行参数
本处做了一些精简:

/usr/bin/qemu-kvm -name guest=centos7.0,debug-threads=on \
-machine pc-i440fx-3.0,accel=kvm,usb=off,vmport=off,dump-guest-core=off \
-cpu IvyBridge-IBRS,ss=on,vmx=on,pcid=on,hypervisor=on,arat=on,tsc_adjust=on,ssbd=on,xsaveopt=on,pdpe1gb=on \
-m 8192 \
-realtime mlock=off \
-smp 24,sockets=1,cores=24,threads=1 \
-uuid 00abc653-e597-4275-bf2f-bed93ad3a045 \
-no-user-config \
-nodefaults \
-rtc base=utc,driftfix=slew \
-global kvm-pit.lost_tick_policy=delay \
-boot menu=on,strict=on \
-drive file=/var/lib/libvirt/images/centos7.0.qcow2,format=qcow2,if=none,id=drive-virtio-disk0,cache=none,aio=native \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1,write-cache=on \

-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2 \
[设置显示参数] 
-netdev tap,id=hostnet0,ifname=vnet0 \
[设置网络设备,设备名为vnet0]
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:6b:0d:a1,bus=pci.0,addr=0x3 \
[设置网卡]
-vnc :2
[vnc设置,如果不设,默认会启动一个GTK窗口显示操作界面]

3、关于网络参数
一般情况,我们会为每个虚拟机建一个tap设备,然后桥接起来。

-netdev tap,id=hostnet0,ifname=vnet0
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:6b:0d:a1,bus=pci.0,addr=0x3 

-netdev中的 id=hostnet0与下面的网卡参数中的netdev=hostnet0相关联。

如果只用上面的参数,会报一个错误:
qemu-system-x86_64: network script /etc/qemu-ifup failed with status 256
需要我们建一个网卡启动脚本,如果不想建脚本,可以将参数改为如下:
-netdev tap,id=hostnet0,ifname=vnet0,script=no,downscript=no
新加的两个参数指明,网卡启动和关闭不需要脚本操作。

命令行启动后,执行ip a ,会看到多了一个vnet0网卡设置,这个其实就是添加的tap设备:
在这里插入图片描述
如果想查看本机建了哪些tap设备,可以执行 ip tuntap show
在这里插入图片描述
在启动虚拟机后,会有eth0网络设备了,但是还是无法与宿主机通信,ping不通。
此时需要手动up一下vnet0,并将之加入kvm虚拟机网桥:
在这里插入图片描述
如果不想每次都敲一下命令,前面说的qemu-ifup脚本就派上用处了,下面是个简单的ifup脚本:

#!/bin/bash
ip link set $1 up
brctl addif virbr0 $1

qemu-ifdown可以不写,虚拟机关闭后,vnet0设备会自动删除掉,对应的桥接信息也会删掉。
这样新建了qemu-ifup脚本后,netdev参数可写为:

-netdev tap,id=hostnet0,ifname=vnet0,downscript=no
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值