kvm.huge页、常用命令和桥接设置
詳細參考:http://qemu.weilnetz.de/qemu-doc.html
1.設置huge頁
????(1)查看默認頁大小:getconf PAGESIZE
????(2)掛載hugetlbfs文件系統:mount -t hugetlbfs hugetlbfs /dev/hugepages
????(3)設置huge頁大小:sysctl vm.nr_hugepages=512
????(4)查看是否成功:cat /proc/meminfo|grep HugePages
2.qemu-kvm命令
????-hda file:將file鏡像作為客戶機第一個IDE設備,客戶機表現為/dev/hda設備或/dev/sda
????-hdb file:同上,第二個IDE設備
????-fda file:第一個軟盤設備,表現為/dev/fd0
????-cdrom file:cdrom設備,客戶機表現為/dev/cdrom設備,不能與-hdc同時使用,因為-cdrom就是客戶機中第三個IDE設備
????-mtdblock file:使用file文件作為客戶機自帶的一個flash存儲器
????-sd file:file作為客戶機sD卡
????-pflash file:file作為客戶機并行flash存儲器
????-boot [order=drivers][,once=drivers][,menu=on|off][,splash=splashfile][,splash-time=sp-time]
????order表示設置啟動順序,drivers的值可以是a、b、c、n
????????a:第一個軟驅
????????b:第二個軟驅
????????c:第一個硬盤
????????d:第一個cdrom驅動器
????????n:網絡設備
????once表示設置第一次啟動的啟動順序,在系統重啟后該設置無效
????menu=on|off:設置交互啟動菜單選項,前提是使用的客戶機支持bios
????splash和splash-time都是在menu=on才有效,將splash的圖片作為logo傳遞給bios來顯示,sp-time是顯示splash圖片的時間單位是ms
???
?????-drive option[,option[,option[,...]]]:為客戶機定義一個新的驅動器,選項如下:
????????file=FILE:使用file文件作為鏡像文件加載到客戶機的驅動器中
????????if=INTERFACE:指定驅動器接口類型,可用的有:ide,scsi,sd,mtd,floopy,pflash,virtio等
????????bus=BUS NUM,unit=UNIT NUM:設置驅動器在客戶機中的總線編號和單元編號
????????index=INDEX NUM:設置在同一種接口的驅動器中的索引編號
????????media=disk|cdrom:設置驅動器中媒介的類型,其值為“disk”或“cdrom”
????????snapshot=on|off:是否啟用鏡像功能,啟用時,qemu不會將磁盤數據的更改寫回鏡像文件中,而是寫到臨時文件,也可以在qemu ????????monitor中使用commit命令強制將磁盤數據的更改保存回鏡像文件中
???? ? ?cache=writethrough|writeback|(none|off)
????????????writethrough:默認值,即直寫模式,它是在調用write寫入數據的同時將數據寫入磁盤緩存和后端塊設備中,優點:操作簡單,缺點:寫入數據速度較慢
????????????writeback:回寫模式,將數據寫入到磁盤緩存中即返回,只有數據被換出緩存的時候才寫入到后端塊設備中,優點:寫入速度快,缺點:可能造成數據丟失
????????????(none|off):設置none或者off表示不寫入緩存,直接寫入到塊設備中,優點是數據安全,缺點:速度太慢
????????aio=threads|native:默認threads,即讓一個線程池去處理異步io;而native只適用于cache=none的情況,就是使用linux原生的aio
????????format=FORMAT:使用的磁盤格式,默認qemu是自動檢測磁盤格式的
????????serial=SERIAL NUM:分配給設備的序列號
????????add=ADDR:分配給驅動器控制器的pci地址,該選項只有在使用virtio接口才適用
????????id=NAME:設置該驅動器的id,這個id可以在qemu monitor中用info block命令查看
3.qemu-img命令
qemu-img command [command option]
????-h:查看qemu支持的文件格式
???
?????check [-f fmt]filename: 對磁盤鏡像進行一致性檢查,目前僅支持qcow2、qed、vdi格式文件的檢查
????????-f fmt:指定格式,不指定qemu-img會自己檢測
????
????create [-f fmt][-o options]filename [size]: 創建一個格式為fmt,大小為size,文件名為filename的鏡像文件
????????-o
????????????backing_file=FILENAME:如果這個選項被指定,那么這個選項創建的鏡像文件僅記錄與后端鏡像文件(即backing_file指定的文件)的差異部分,而后端鏡像文件不會被修改,除非在qemu monitor中使用commit 或者使用qemu-img commit 命令手動提交
?????????????:查詢某種格式文件支持哪些選項
????????????size:指定鏡像文件的大小,默認單位bytes,也可以支持K、M、G、T即KB、MB、GB、TB大小
???
?????commit [-f fmt] filename:提交filename文件中的更改到后端支持鏡像文件(即backing_file指定的文件)中
?
????convert [-c] [-p] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_id_or_name] [-l ????????snapshot_param] [-S sparse_size] filename [filename2 [...]] output_filename: 將fmt格式的filename鏡像文件根據option選項轉化為格式為output_fmt的名為output_filename的鏡像文件,默認轉為raw文件格式
????????-c:對輸出的鏡像文件進行壓縮
????info [-f fmt] [--output=ofmt] [--backing-chain] filename: 顯示磁盤鏡像文件filename的信息
????snapshot [--object objectdef] [--image-opts] [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename :為鏡像文件創建、應用或者刪除一個快照
????????-a:applies 讓某個鏡像文件使用某個快照
????????-c:create 創建快照
????????-d:delete 刪除快照
????????-l:list 顯示所有快照
????rebase [--object objectdef] [--image-opts] [-q] [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filename: 改變鏡像文件的后端鏡像文件(即backing_file),只有qcow2和qed格式支持rebase命令,后端鏡像文件的格式也被轉化為“-F backing_fmt”指定的格式,有兩種模式:
????????安全模式:默認模式,qemu-img會根據比較后來的后端鏡像與現在的后端鏡像文件的不同進行合理的處理
?????????非安全模式:通過-u來指定,這種模式主要應用于將后端鏡像重命令或移動位置后對前端鏡像文件的修復處理,由用戶去保證后端鏡像的一致性
????resize filename [+ | -]size:改變鏡像文件大小,+-表示增量,使用這個命令時注意壓縮不能小于現有的,否則數據丟失
4.qemu支持的鏡像文件格式(qemu-img -h)可以查看:
????Supported formats: blkdebug blkreplay blkverify bochs cloop dmg file ftp ftps host_cdrom host_device http https luks nbd null-aio null-co parallels qcow qcow2 qed quorum raw replication sheepdog vdi vhdx vmdk vpc vvfat
常見的如下:
????raw:原始的磁盤鏡像格式,易移植,功能簡單
????稀疏文件(sparse file):只分配大小,并不實際占用空間,所以磁盤滿的時候會出錯
????dd命令創建的鏡像文件:預分配空間,給每個空間都填0,寫入較快
????host_device:在需要將鏡像轉化到不支持空洞的磁盤設備時需要使用這種格式來代替raw
????qcow2:qemu目前推薦的鏡像格式,也是功能最多的格式,在qemu-img支持的選項如下:
????backing_file:指定后端鏡像文件
????backing_fmt:指定后端鏡像文件格式
????cluster_size:設置簇的大小,取值在[512B,2MB]之間,默認為64kB,小簇節約空間,大簇性能好,按需取舍
????preallocation off|metadata:預分配空間,off表示不分配,metadata表示只分配元數據部分,有的版本還支持full,全分配
????encrytion:當它等于on時,鏡像被加密。加密后再使用鏡像啟動客戶機時需要在qemu monitor中輸入cont或c來喚醒客戶機輸入密碼后繼續執行
例子:
????qemu-img convert ?-o encryption -O qcow2 rhel6u5.img rhel6u5.qcow2
????qcow:比較舊的鏡像格式,,目前很少用,支持backing_file和encryption兩個選項
????cow:用戶模式的Copy-On-Write的鏡像文件格式
????vdi:兼容virtualBox的鏡像文件格式
????vmdk:兼容vmware
????vpc:兼容Virtual PC
5.客戶機存儲方式
????本地鏡像文件
????物理磁盤或磁盤分區
????lvm邏輯分區
????nfs
????iscsi
????本地或光纖鏈接的lun
????gfs2
????各種存儲方式各有千秋,其中nfs是使用非常廣泛的分布式文件系統,如果nfs服務器向客戶機開放了讀寫權限,那么可以直接掛載nfs,對鏡像文件進行讀寫,如果nfs服務器沒有開放權限,那么,我們可以把nfs的鏡像文件作為后端鏡像文件,本地再為這個后端鏡像文件創建鏡像文件,這樣涉及到寫操作直接寫入到本地鏡像文件,而nfs里面的文件不會被修改,這樣有個好處是,nfs上面的鏡像可以同時供許多客戶端進行使用,每個客戶端保存自己修改的那份本地鏡像,這樣效率大大提高而且更安全。命令如下:
????mount 192.168.2.11:/kvm ? /kvm_host
????qemu-img create -f qcow2 -o backing_file=/kvm_host/rhel6u5.img,size=4G ? ?local.img #size一般要大于等于鏡像本身,否則會報錯
6.qemu支持的網絡模式
????基于橋接的虛擬網卡
????基于nat
????qemu內置的用戶模式網絡
????直接分配網絡設備的網絡
qemu-system-x86_64 ?-net nic,model=?這條命令可以查看qemu支持模擬的網卡類型,默認為rtl8139,結果如下:
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
配置命令:
????qemu-system-x86_64 -net nic[,vlan=n][,macaddr=mac][,model=type] [,name=name][,addr=addr][,vectors=v]
????-net nic:這是必須的參數,表明這是一個網卡的配置
????vlan=n:將網卡放到編號為n的vlan,默認0
????macaddr=MAC:設置網卡的MAC地址,默認根據宿主機中網卡的地址來分配
????model=type :模擬網卡類型
????name=nic name:設置網卡別名
????addr=addr:設置網卡在客戶機中的pci設備地址為addr
????vectors=v:設置該網卡設備的MSI-X向量的數量為n,該選項僅對使用virtio驅動的網卡有效
如果需要向客戶機提供多網卡,可以多次使用-net nic參數
橋接模式命令:
????qemu-system-x86_64 -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile][,br=bridge][,helper=helper]
該配置表示鏈接宿主機的tap網絡接口道n好vlan中,并且使用file和dfile兩個腳本在啟動客戶機時配置網絡和在關閉客戶機時取消網絡配置
????tap:表明使用tap設備,類似tun,不過tap是對數據鏈路層的模擬,而tun是網絡層的模擬
????vlan=n:設置該設備的vlan號,默認0
????name=name:設置別名
????fd=h:鏈接到已經打開的tap接口的文件描述符,一般不設置,因為設置后ifname,script,downscript helper 等都不可以用了
????ifname=name:設置在宿主機中添加tap虛擬設備的名稱
????script=file:宿主機在啟動客戶機時自動執行的腳本,默認為/etc/qemu-ifup
????downscript=dfile:宿主機在客戶機關閉時自動執行的腳本,默認為/etc/qemu-downscript
????helper=helper:輔助程序,包括建立一個tap虛擬設備,默認為/usr/local/libexec/qemu-bridge-helper
例子:
????(1)安裝提供brctl和tunctl命令的rpm包
????????yum install brige-utils tunctl -y
????(2)查看tun模塊是否加載,沒有則modprobe tun
????????lsmod|grep tun
????????modprobe tun?
????(3)查看/dev/net/tun的權限,需要讓當前用戶擁有可讀寫的權限
????????ls -l /dev/net/tun
????(4)建立一個bridge,并將其綁定到一個可以正常工作的網絡接口上,同時讓bridge成為連接本機與外部網絡的接口
????????/etc/init.d/NetworkManager stop;chkconfig NetworkManager off#關閉NetworkManager,避免它的干擾
????????brctl addbr br0 ?#添加bridge 名為br0
????????brctl addif br0 em1 #將br0與em1綁定起來
????????brctl stp br0 on #將br0設置為啟用stp協議
????????ifconfig em1 0#將em1的ip設置為0
????????dhclient br0#將br0的網絡配置好,也可以使用ifconfig br0 192.168.2.188 netmask 255.255.255.0 up ;route add default gw ????????192.168.2.1 br0
????(5)準備qemu-ifup和qemu-ifdown腳本,默認都放在/etc下
????qemu-ifup腳本內容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash # switch=br0 if?[?-n?"$1"?];then ip?link?set?$1?up????#啟動$1,$1是qemu-kvm傳遞過來的虛擬設備名(ifname),由qemu-bridge-helper創建 sleep?1??????????????#有些版本沒有的話,可以使用tunctl?-u?$(whoami)?-t?$1?創建,-u指明屬主,-t?是設備名 brctl?addif?${switch}?$1????#將$1加入虛擬網橋br0中 exit?0 else echo?"Error,need?nic" exit?1 fi |
????qemu-ifdown腳本這個腳本不是必須的,因為qemu-kvm自帶的工具會解除tap設備的bridge綁定,也會自動刪除tap設備,這里提供腳本供查看過程
| 1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash # switch=br0 if?[?-n?"$1"?];then tunctl?-d?$1 brctl?delif?${switch}?$1 ip?link?set?$1?down exit?0 else echo?"error,need?nic" exit?1 fi |
????(6)啟動客戶機
????????記得先給予腳本執行權限:chmod +x ?/etc/qemu*
????????qemu-system-x86_64 -m 4096 -smp 6 -net nic -net tap,ifname=tap1,script=/etc/qemu-ifup redhat6.qcow2 -daemonize
????(7)查看是否橋接成功
????在客戶機:
????????可以利用ip a ;ifconfig;ping;route等命令查看是否能自動獲取ip并正常上網
????在宿主機:
????????利用brctl show 命令可以查看tap1接口的生成和刪除
????????或ls /sys/devices/virtual/net 查看相關信息
本文轉自biao007h51CTO博客,原文鏈接:?http://blog.51cto.com/linzb/1877456,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的kvm.huge页、常用命令和桥接设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win32系统下安装Win64补充说明
- 下一篇: [转载]Lua和C++交互详细总结