前提條件,cpu要支持xvm或者svm,可以用lscpu查看。
更新系統(tǒng)
$sudo pacman -Syy
$sudo pacman -Suy
安裝kvm+noVNC
$sudo pacman -Sy libvirt virt-install qemu python python-numpy libvirt-python git tigervnc wget net-tools bridge-utils ovmf
$cd ~
$git clone https://github.com/novnc/noVNC.git
設(shè)置vnc
$vncpasswd
$vncserver
$vncserver -kill :1
建立放ISO的文件夾,比如驅(qū)動,系統(tǒng)等都可以放在里面
$mkdir -p ~/ISO
$cd ~/ISO
$wget -c -t5 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
$wget -c -t5 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win_x86.vfd
$wget -c -t5 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win_amd64.vfd
然后把windows系統(tǒng)放到里面,建議用安裝版,因為需要f6加載軟盤驅(qū)動,來驅(qū)動硬盤。
把你當(dāng)前用戶加到kvm和libvirt組
$sudo usermod -a -G kvm,libvirt xxxxx #注意:xxxxx是指你當(dāng)前使用的用戶名
若不加組,你只能使用root用戶啟動虛擬機(jī),不建議這樣做。
編輯qemu,讓當(dāng)前用戶能正常創(chuàng)建啟動虛擬機(jī)。
$sudo nano /etc/libvirt/qemu.conf
去掉#號并更改為你當(dāng)前用戶和用戶組
user = "xxxxx"
group="libvirt"
創(chuàng)建一個橋接網(wǎng)卡
$sudo cp /etc/netctl/examples/bridge /etc/netctl/kvm-bridge
$sudo nano /etc/netctl/kvm-bridge
更改和添加內(nèi)容
Description="Kvm Bridge connection"
Interface=br0
Connection=bridge
BindsToInterfaces=(enp2s0)
# 我的網(wǎng)卡名是enp2s0,用ip addr查看你的網(wǎng)卡名并更改。
IP=static
# 我使用的是靜態(tài)IP,如果你使用動態(tài)IP,你改成dhcp,并刪除下面的內(nèi)容。
Address=('192.168.1.6/24')
Gateway='192.168.1.1'
DNS=('211.98.4.1' '211.98.2.4')
MACAddressOf=enp2s0
## Ignore (R)STP and immediately activate the bridge
#SkipForwardingDelay=yes
激活并使用些橋接網(wǎng)卡
$sudo netctl enable kvm-bridge
$sudo netctl start kvm-bridge
創(chuàng)建虛擬機(jī)
先創(chuàng)建一個事半功倍的運行腳本
$cd ~
$nano winkvm.sh
添加內(nèi)容
#!/bin/bash
exec virt-install \
--connect qemu:///system \
--virt-type=kvm \
--name=win10 \
--ram=2048 \
--vcpus=2 \
--hvm \
--arch x86_64 \
--boot loader=/usr/share/ovmf/ovmf_code_x64.bin,loader_ro=yes,loader_type=pflash,nvram_template=/usr/share/ovmf/ovmf_vars_x64.bin,loader_secure=no \
--machine q35 \
--os-variant=win10 \
--cdrom=/home/xxxxx/ISO/win10.iso \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,password=passwd123,port=5910 \
--disk path=/home/xxxxx/kvm/images/win10.img,size=30,bus=virtio,format=qcow2 \
--disk /home/xxxxx/ISO/virtio-win-0.1.141_amd64.vfd,device=floppy \
--boot=uefi \
--video qxl
解析上面的內(nèi)容:
--virt-type=kvm: 使用KVM作為虛擬機(jī)監(jiān)視器。
--name=win10: 虛擬機(jī)實例的名字,每個虛擬機(jī)的名字都不能一樣,不能有空格。
--ram=2048: 指定虛擬機(jī)內(nèi)存大小,單位是Mb。
--vcpus=2: 為虛擬機(jī)指定分配的虛擬CPU核數(shù)。
--os-variant=win10: 指定虛擬機(jī)系統(tǒng)所屬系列以優(yōu)化虛擬機(jī)參數(shù),可以通過命令osinfo-query os 來顯示所有支持的系統(tǒng)列表。
--hvm: 啟用全虛擬化,KVM虛擬機(jī)支持全虛擬化,屬于優(yōu)化性參數(shù)。
--cdrom=/home/xxxxx/ISO/win10.iso: 指定作為虛擬機(jī)光驅(qū)內(nèi)容的設(shè)備或文件,可以是主機(jī)的CDROM或者iso文件。
--network network=br0,model=virtio: 將虛擬機(jī)連接到主機(jī)網(wǎng)絡(luò),使用橋接模式,網(wǎng)卡模式設(shè)置為virtio。
--graphics vnc: 設(shè)置虛擬機(jī)的console并將其輸出到VNC,這樣就可以通過VNC來連接虛擬機(jī)了。同時可以指定vnc的端口和監(jiān)聽范圍以及密碼: port=5910,listen=0.0.0.0,password=passwd123連接密碼自行更改。默認(rèn)情況下端口為從5900開始的第一個空閑端口,監(jiān)聽范圍為本機(jī)127.0.0.1,修改為0.0.0.0以使外網(wǎng)主機(jī)可以連接。后面會講對于只支持SSH協(xié)議的情況下,如何通過SSH隧道連接,所以是否設(shè)置為0.0.0.0沒有影響,但能設(shè)置為0.0.0.0的話,還是設(shè)置為0.0.0.0,畢竟直接通過VNC連接更加方便。這些參數(shù)也可以在/etc/libvirt/qemu.conf中修改,以使其對所有虛擬機(jī)生效,VNC默認(rèn)連接沒有密碼。VNC可以理解為linux下的遠(yuǎn)程桌面。
--disk path=/home/xxxxx/kvm/images/win7.img,size=30,bus=virtio,format=qcow2: 指定虛擬機(jī)所使用的存儲路徑,大小為30G,bus類型為virtio(當(dāng)然也可以為ide),磁盤格式為qcow2,如果不指定fortmat,則默認(rèn)格式即為raw。網(wǎng)絡(luò)和磁盤建議都設(shè)置為virtio,virtio即啟動優(yōu)化的虛擬機(jī)專用IO驅(qū)動,性能更好。磁盤格式使用qcow2更好,因為qcow2格式即QEMU支持的QEMU Copy On Write磁盤格式,是優(yōu)化后的磁盤格式,支持快照,并且是使用多少占用多少空間。例如你分配了20G大小,如果是raw格式,則立即占用20G,而qcow2則是從很小開始,用多少,占用多少。之前有些人說qcow2性能不如raw,這兩種格式可以使用qemu-img進(jìn)行轉(zhuǎn)換。
--disk /home/xxxxx/ISO/virtio-win-0.1.141_amd64.vfd:指定軟盤,添加驅(qū)動用,類型device=floppy軟驅(qū)。
--boot cdrom,hd --video qxl:--boot是指定boot啟動順序,不指定的話,只顯示硬盤。--video是指定顯卡為qxl,你也可以選擇vga,cirrus,vmware,virtio等。
啟動虛擬機(jī)
$chmod +x winkvm.sh
$./winkvm.sh //這一步可能不動的時候按Ctr + C,繼續(xù)下面
$virsh --connect qemu:///system list --all
VNC遠(yuǎn)程連接虛擬機(jī)
$~/noVNC/utils/launch.sh --vnc localhost:5910
在其它電腦上打開http://IP:6080/vnc.html,輸入password中設(shè)置的passwd123就可以連接上了。