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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章