qemu-kvm命令


 

 

三種方式創建虛擬機

 

1.qemu-kvm來創建虛擬機

通過閱讀man qemu-kvm手冊而清楚的。  於20160430閱讀

[root@kvm1 ~]# /usr/libexec/qemu-kvm -machine help [root@kvm1 ~]# /usr/libexec/qemu-kvm -M ? [root@kvm1 ~]# /usr/libexec/qemu-kvm -cpu help [root@kvm1 ~]# /usr/libexec/qemu-kvm -cpu ? [root@kvm1 ~]# /usr/libexec/qemu-kvm -net nic,model=help qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio centos7 圖形界面下創建kvm虛擬機步驟 1.創建一個硬盤文件,三條命令效果一樣,dd命令只能創建raw格式盤,不能創建qcow2格式盤 dd if=/dev/zero of=centos.img bs=1M count=10240 qemu-img create -f raw centos7.img 10G qemu-img create -f qcow2 centos65-64.qcow2 10G 2.安裝系統,不需要指定顯示選項,默認是SDL /usr/libexec/qemu-kvm -boot order=dc -hda centos65-64.qcow2 -cdrom CentOS-6.5-x86_64-minimal.iso -m 512 -smp 2 order=dc The x86 PC uses: a, b (floppy 1 and 2), c (first hard disk), d (first CD-ROM), n-p (Etherboot from network adapter 1-4), hard disk boot is the default. To apply a particular boot order only on the first startup, specify it via once. -display sdl|vnc -nographic -curses -vnc :0 -daemonize后台運行 -full-screen 3.啟動系統,不加-boot c(這個選項是過時的,不推薦使用)也可以(應該是默認的) /usr/libexec/qemu-kvm -boot c -hda test.img -m 512 & /usr/libexec/qemu-kvm -hda test.img -m 512 & 下面這個也能啟動,不過沒有啟動盤 /usr/libexec/qemu-kvm -m 512

4.在本機用vinagre去連接localhost:5900,便能安裝與查看系統,但此時沒有弄網絡,所以宿主機與虛擬機互不相通



centos7 命令行界面下創建kvm虛擬機步驟

在cs72-minimal下不使用libvirt的方式,還是比較不懂,會創建,但沒辦法去連接管理來安裝os

yum install qemu-kvm
yum install mlocate
ll /var/lib/mlocate/
updatedb
locate kvm
rpm -ql qemu-kvm-common|more
rpm -ql qemu-kvm|more
[root@2nd-kvm ~]# /usr/libexec/qemu-kvm -version
QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-105.el7_2.4), Copyright (c) 2003-2008 Fabrice Bellard
mkdir /root/iso
mkdir /root/disk
cd /root/disk;qemu-img create -f qcow2 cs65.qcow2 10G
[root@2nd-kvm disk]# /usr/libexec/qemu-kvm
-boot order=dc
-hda cs65.qcow2 -cdrom ../iso/CentOS-6.5-x86_64-minimal.iso
-m 512 -smp 2 -name cs65
上面這個命令默認在本地啟動一個ipv6 vnc連接,並且網絡參數默認是-net nic -net user
[root@localhost ~]# /usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -m 1024
VNC server running on `::1:5900'
如果在安裝系統時不指定相關參數,那么kvm就采用默認的顯示-SDL(SDL這個必須有圖形界面,就直接彈出一個窗口,等待用戶交互安裝),默認的網絡(-net nic -net user)
所以就要對顯示,網絡進行指定參數,滿足自己的需要。


加入這個,監聽在ipv4的5900上,不加這個,直接在桌面環境下彈出一個窗口,這就是默認的sdl輸出,此時不是vnc
-display vnc=:0
-vnc :0 -daemonize后台運行
上面兩個參數的區別是-display是為了兼容xxx,可以看man手冊,一般直接用-vnc :0或-spice port=9987,password=1234

-vga cirrus -vnc :0
-net bridge -net nic,model=virtio
-vga qxl -spice port=9987,password=1234  這兩個通常連用


在qemu-kvm命令行中,添加“-nographic”參數可以完全關閉QEMU的圖形界面輸出,從而讓QEMU在該模式下完全成為簡單的命令行工具。而QEMU中模擬產生的串口被重定向到了當前的控制台(console)中,所以如果在客戶機中對其內核進行配置從而讓內核的控制台輸出重定向到串口后,就依然可以在非圖形模式下管理客戶機系統或調試客戶機的內核。
[root@my-host ~]# qemu-system-x86_64 --enable-kvm -m 1024 -smp 2 vm2.img -cdrom /data/nfs/images/CentOS-6.4-x86_64-minimal.iso --nographic -bios /usr/local/share/qemu/bios.bin -append console=ttyS0 -kernel /mnt/isolinux/vmlinuz -initrd /mnt/isolinux/initrd.img


在命令行直接安裝虛擬機
mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /mnt
qemu-img create -f qcow2 cs66.qcow2 8G
/usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -cdrom CentOS-6.5-x86_64-bin-DVD1.iso -m 1024 -nographic -append console=ttyS0 -kernel /mnt/isolinux/vmlinuz -initrd /mnt/isolinux/initrd.img
kill 掉上面的進程,重啟去掉一些參數再如下啟動
/usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -m 1024 -nographic

宿主機是cs72,虛擬機是cs65
安裝好系統之后,先用spice啟動
1.先啟動/usr/libexec/qemu-kvm -boot order=dc -hda cs65.qcow2 -m 1024 -spice port=9987,password=1234
2.windows的spice客戶端去連接,進去之后,vi /boot/grub/grub.cfg,在內核行后加入console=ttyS0然后保存關機
3.再加-nographic參數后啟動,/usr/libexec/qemu-kvm -boot order=dc -hda cs65.qcow2 -m 1024 -nographic
這樣就在宿主機本地啟動了

 

 

2.用virsh來創建

[root@2nd-kvm ~]# virsh start cs65
error: Failed to start domain cs65
error: Cannot access storage file '/root/disk/cs65.qcow2' (as uid:107, gid:107): Permission denied


Changing /etc/libvirt/qemu.conf make working things.
Uncomment user/group to work as root.


第一步:
[root@kvm1 kvm]# qemu-img create -f qcow2 win7.qcow2 10G Formatting 'win7.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
第二步:
更多參數設置可參考liibvirt官網http://libvirt.org/drvqemu.html#xmlconfig [root@kvm1 kvm]# vi text.xml <domain type='qemu'> <name>win7</name> <uuid></uuid> <memory>2048000</memory> <currentMemory>2048000</currentMemory> <vcpu>1</vcpu> <os> <type arch='x86_64' machine='pc'>hvm</type> <boot dev='hd'/> <boot dev='cdrom'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='cdrom'> <source file='/root/iso/win7.iso'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/kvm/win7.qcow2'/> <target dev='hda' bus='ide'/> </disk> <interface type='bridge'> <source bridge='br0'/> <mac address="00:16:3e:5d:aa:a8"/> </interface> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'/> </devices> </domain>
第三步: [root@kvm1 kvm]# virsh define test.xml Domain win7 defined from test.xml 如果修改了xml文件,需要以下操作,先撤銷再重定義 [root@kvm1 kvm]# virsh undefine win7 Domain win7 has been undefined [root@kvm1 kvm]# virsh define test.xml Domain win7 defined from test.xml [root@kvm1 kvm]# virsh list --all Id Name State ---------------------------------------------------- 2 opensuse running - win7 shut off [root@kvm1 kvm]# virsh start win7 Domain win7 started [root@kvm1 kvm]# virsh vncdisplay win7 :1
第四步: 用vinagre去連接localhost:5901 登錄后能看到操作系統安裝的初始界面,開始安裝系統,安裝完成即表示鏡像制作完成 但是出現藍屏,懷疑machine有問題,不支持win7 <type arch='x86_64' machine='pc'>hvm</type>





注解:
virsh shutdown test_ubuntu //關閉虛擬機,如果關閉不了,可以查看http://blog.csdn.net/gg296231363/article/details/6891380
virsh destory test_ubuntu  //強制關閉虛擬機
virsh undefine test_ubuntu //刪除虛擬機

kvm環境下可以使用shutdown命令讓虛擬機關機,但不生效。
virsh shutdown vm-name
由於關機通過acpi電源管理接口來實現的
  3.1 首先配置文件里需要有這個選項
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  3.2 虛擬機內部需要有acpi服務並運行
    Windowns的虛擬機一般情況是默認已安裝且運行的
    linux虛擬機例如Ubuntu虛擬機如果沒有安裝acpi服務,
    先執行apt-get install acpid進行安裝並啟動該服務,即可讓虛擬機響應shutdown命令
 

 

3.virt-manager來創建

 

 

 

 

 

[root@kvm1 kvm]# qemu-img snapshot -c cen centos.raw
qemu-img: Could not create snapshot 'cen': -95 (Operation not supported)
快照這個功能只支持qcow2格式,raw不支持。其中-c是創建快照,-l是查看快照,-a是恢復快照,-d是刪除快照。注意,創建磁盤快照時虛擬機需要處理關閉的狀態。
[root@kvm1 kvm]# qemu-img convert -c -O qcow2 centos.raw centos.qcow2
[root@kvm1 kvm]# qemu-img snapshot -c centos-ori centos.qcow2
[root@kvm1 kvm]# qemu-img snapshot -l centos.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         centos-ori                0 2016-05-02 19:23:24   00:00:00.000
[root@kvm1 kvm]# qemu-img snapshot -a 1 centos.qcow2
qemu-img: Could not open 'centos.qcow2': Could not read snapshots: File too large
有兩種解決辦法
升級qemu-img為1.7以上,
或者因為centos.qcow2是從raw轉換過來的,如果直接創建的是qcow2格式的,可能不會有這個問題(可以試一試)


各部分所對應的包

1.http://linux-kvm.org/
kvm陣營。
命令名qemu-kvm---同名包名或qemu-img---同名包名
安裝qemu-kvm或者kvm,它們是kvm內核的用戶空間工具

2.http://libvirt.org/index.html
libvirt陣營。
命令名virsh---包名libvirt-client
命令名libvirtd---包名libvirt-daemon

3.https://virt-manager.org/
virt-manager陣營。
命令名virt-manager---同名包名
命令名virt-install---包名在6和7下不一樣

virt-install是rpm包python-virtinst里的一個工具,其實就是一個python寫的腳本。它是qemu-kvm工具的人性化實現。可以利用該工具在終端下創建KVM guest主機。
centos6.5下面是這個包
python-virtinst
[root@localhost ~]# rpm -ql  python-virtinst|more
/usr/bin/virt-clone
/usr/bin/virt-convert
/usr/bin/virt-image
/usr/bin/virt-install
centos7下面是這個包
virt-install
[root@kvm1 ~]# rpm -ql virt-install
/usr/bin/virt-clone
/usr/bin/virt-install
/usr/bin/virt-xml


4.加載網橋模塊和kvm模塊
http://wiki.libvirt.org/page/Networking    橋網絡相關設置

[root@localhost ~]# lsmod |grep brid
[root@localhost ~]# modprobe bridge
[root@localhost ~]# lsmod |grep brid
bridge                 83177  0
stp                     2218  1 bridge
llc                     5546  2 bridge,stp
[root@localhost ~]# lsmod |grep kvm
[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm
kvm                   333172  0

brctl addbr br0
#> ifconfig
eth0      Link encap:Ethernet  HWaddr 00:CC:D0:99:EB:26
          inet6 addr: fe80::2b0:d0ff:fe99:eb26/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:86208855 errors:0 dropped:0 overruns:63 frame:0
          TX packets:77098217 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3871506445 (3692.1 Mb)  TX bytes:266311184 (253.9 Mb)
          Interrupt:5 Base address:0xec00
eth1      Link encap:Ethernet  HWaddr 00:CC:03:D8:3A:1A
          inet6 addr: fe80::201:3ff:fed8:3a1a/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:77087614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:85110321 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:264995582 (252.7 Mb)  TX bytes:3672580334 (3502.4 Mb)
          Interrupt:9 Base address:0xec80
/etc/sysconfig/networking-scripts/ifcfg-eth0:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static

/etc/sysconfig/networking-scripts/ifcfg-eth1:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static

#> brctl addif br0 eth0
#> brctl addif br0 eth1
#> ip link set br0 up
#> ip addr add 10.1.1.18/16  dev br0
#> route add default gw 10.1.1.1 dev br0
#> brctl show
bridge name  bridge id          STP enabled  interfaces
br0          8000.0030843e5aa2  no            eth0
                                                   eth1

 

ip addr help

ip link set dev br0 down

 

 

centos7桌面安裝好后
網絡橋接三步走,接着創建disk與iso目錄,接着傳iso,接着用virt-manager來建虛擬機就完事了。 [root@kvm1 img]# vi /etc/sysconfig/network-scripts/ifcfg-eno1 TYPE=Ethernet DEVICE=eno1 ONBOOT=yes BRIDGE=br0 [root@kvm1 img]# vi /etc/sysconfig/network-scripts/ifcfg-br0 TYPE=Bridge
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.10.199
PREFIX=24
GATEWAY=192.168.10.6
DNS1=8.8.8.8 service network restart與 systemctl restart NetworkManager沒用 用下面的就可以了 systemctl restart network

另外,在RHEL系列系統中最好將NetworkManager這個程序結束掉,因為它並不能管理bridge的網絡配置,反而它在后台運行則可能對網絡設置有些干擾。
http://smilejay.com/2012/08/kvm-bridge-networking/

 

設置linux讓網橋運行    配置網橋

1.我們需要讓linux知道網橋,首先告訴它,我們想要一個虛擬的以太網橋接口:(這將在主機bridge上執行,不清楚的看看測試場景)
root@bridge:~> brctl addbr br0
2.其次,我們不需要STP(生成樹協議)等。因為我們只有一個路由器,是絕對不可能形成一個環的。我們可以關閉這個功能。(這樣也可以減少網絡環境的數據包污染):
root@bridge:~> brctl stp br0 off
3.經過這些准備工作后,我們終於可以做一些立竿見影的事了。我們添加兩個(或更多)以太網物理接口,意思是:我們將他們附加到剛生成的邏輯(虛擬)網橋接口br0上。
root@bridge:~> brctl addif br0 eth0
root@bridge:~> brctl addif br0 eth1
4.現在,原來我們的兩個以太網物理接口變成了網橋上的兩個邏輯端口。那兩個物理接口過去存在,未來也不會消失。要不信的話,去看看好了。.現在他們成了邏輯網橋設備的一部分了,所以不再需要IP地址。下面我們將這些IP地址釋放掉
root@bridge:~> ifconfig eth0 down
root@bridge:~> ifconfig eth1 down
root@bridge:~> ifconfig eth0 0.0.0.0 up
root@bridge:~> ifconfig eth1 0.0.0.0 up

好了!我們現在有了一個任何IP地址都沒有的box w/o了。好了,這下如果你想通過TP配置你的防火牆或路由器的話,你就只能通過本地的控制端口了。你不會告訴我你的機器上連串行端口都沒有吧?
注:上面紅色部分其實是可選的,在試驗中,我發現,就算不把原有的網卡地址釋放掉,網橋也能工作!但是,為了更規范,或者說
為了避免有什幺莫名其妙的問題,最好還是按要求做,執行這四步吧!

5.最后,啟用網橋root@bridge:~> ifconfig br0 up
可選:    我們給這個新的橋接口分配一個IP地址
root@bridge:~> ifconfig br0 10.0.3.129
或者把最后這兩步合成一步:
root@bridge:~> ifconfig br0 10.0.3.129 up
 
關閉網橋命令
     brctl delif ena eth1;
     brctl delif ena eth0;
     ifconfig ena down;
     brctl delbr ena;

 

 

kvm管理工具之webvirtmgr

webvirtmgr管理kvm工具,只有web界面。

http://www.linux-kvm.org/page/Management_Tools
WebVirtMgr     Web service for managing VMs based on the KVM     WEB     Active     Only KVM; use libvirt     Apache License v2

https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

下面是在管理機上做的
  271  yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
  272  yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
  274  yum -y install gcc python-devel
  388  pip install numpy



  279  git clone git://github.com/retspen/webvirtmgr.git
  279  cd webvirtmgr
  285  less requirements.txt
  286  pip install -r requirements.txt
  287  ./manage.py syncdb
  288  ./manage.py collectstatic
  352  mv webvirtmgr/ /var/www/


  296  vi /etc/nginx/conf.d/webvirtmgr.conf
  306  vi /etc/nginx/nginx.conf
  311  getenforce
  312  setenforce 0
  315  chkconfig supervisord on
  316  systemctl status supervisord
  317  systemctl start nginx
  318  systemctl status nginx

  358  ssh root@192.168.10.115:8000 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
  360  chown -R nginx:nginx /var/www/webvirtmgr
  365  vi /etc/supervisord.d/webvirtmgr.ini

 

下面是在kvm機上做的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM