Libvirt有兩種控制方式,命令行和圖形界面
圖形界面:
通過執行名virt-manager,啓動libvirt的圖形界面,在圖形界面下可以一步一步的創建虛擬機,管理虛擬機,還可以直接控制虛擬機的桌面。
命令行:
virsh list #顯示本地活動虛擬機
virsh list –all #顯示本地所有的虛擬機(活動的+不活動的)
virsh define ubuntu.xml #通過配置文件定義一個虛擬機(這個虛擬機還不是活動的)
virsh start ubuntu #啓動名字爲ubuntu的非活動虛擬機
virsh create ubuntu.xml #創建虛擬機(創建後,虛擬機立即執行,成爲活動主機)
virsh suspend ubuntu #暫停虛擬機
virsh resume ubuntu #啓動暫停的虛擬機
virsh shutdown ubuntu #正常關閉虛擬機
virsh destroy ubuntu #強制關閉虛擬機
virsh dominfo ubuntu #顯示虛擬機的基本信息
virsh domname 2 #顯示id號爲2的虛擬機名
virsh domid ubuntu #顯示虛擬機id號
virsh domuuid ubuntu #顯示虛擬機的uuid
virsh domstate ubuntu #顯示虛擬機的當前狀態
virsh dumpxml ubuntu #顯示虛擬機的當前配置文件(可能和定義虛擬機時的配置不同,因爲當虛擬機啓動時,需要給虛擬機分配id號、uuid、vnc端口號等等)
virsh setmem ubuntu 512000 #給不活動虛擬機設置內存大小
virsh setvcpus ubuntu 4 #給不活動虛擬機設置cpu個數
virsh edit ubuntu #編輯配置文件(一般是在剛定義完虛擬機之後)
表28-5 virsh常用命令一覽表
命令 |
說明 |
help |
顯示該命令的說明 |
quit |
結束 virsh ,回到 Shell |
connect |
連接到指定的虛擬機服務器 |
create |
啓動一個新的虛擬機 |
destroy |
刪除一個虛擬機 |
start |
開啓(已定義的)非啓動的虛擬機 |
define |
從 XML 定義一個虛擬機 |
undefine |
取消定義的虛擬機 |
dumpxml |
轉儲虛擬機的設置值 |
list |
列出虛擬機 |
reboot |
重新啓動虛擬機 |
save |
存儲虛擬機的狀態 |
restore |
回覆虛擬機的狀態 |
suspend |
暫停虛擬機的執行 |
resume |
繼續執行該虛擬機 |
dump |
將虛擬機的內核轉儲到指定的文件,以便進行分析與排錯 |
shutdown |
關閉虛擬機 |
setmem |
修改內存的大小 |
setmaxmem |
設置內存的最大值 |
setvcpus |
修改虛擬處理器的數量 |
libvirt還提供了一個shell:virsh,直接執行名virsh即可獲得一個特殊的shell:virsh,在這個virsh裏面可以執行上面的命令(去掉前面的virsh)與本地libvirt交互,還可以通過命令connect命令連接遠程libvirt,與之交互,例如:connect xen+ssh://[email protected]。另外可以只執行一條遠程libvirt命令:virsh –c xen+ssh://[email protected] list --all
ubuntu.xml配置文件舉例:
<domain type='xen'> //域類型
<name>ubuntu</name> //虛擬機的名字
<memory>1048576</memory> //虛擬機的最大內存
<currentMemory>524288</currentMemory> //虛擬機當前的內存
<vcpu>2</vcpu> //該虛擬機的cpu數
<os>
<type>hvm</type> //hvm表示全虛擬化
<loader>/usr/lib/xen/boot/hvmloader</loader> //全虛擬化的守護進程所在的位置
<boot dev='hd'/> //hd表示從硬盤啓動
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/lib64/xen/bin/qemu-dm</emulator> //二進制模擬器設備的完整路徑。
<disk type='file' device='disk'> //disk是用來描述磁盤的主要容器
<driver name='file'/>
<source file='/opt/awcloud/ubuntu/ubuntu.img'/> //指定磁盤上文件的絕對路徑
<target dev='hda' bus='ide'/>
</disk>
<disk type='file' device='disk'>
<driver name='file'/>
<source file='/opt/awcloud/ubuntu/sdb.img'/>
<target dev='hdb' bus='ide'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='file'/>
<source file='/opt/awcloud/forest/ubuntu-10.04.3-desktop-i386.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
<serial type='pty'> //定義串口
<target port='0'/>
</serial>
<console type='pty'> //console用來代表交互性的控制檯
<target port='0'/>
</console>
<interface type='bridge'> //橋接設備
<mac address='00:16:36:1e:1d:04'/> //MAC地址
<source bridge='virbr0'/>
</interface>
<graphics type='vnc' autoport='yes' keymap='en-us'/> //圖形類型
</devices>
</domain>
注:
生成一個4G大小的空文件:dd if=/dev/zero of=./disk bs=1024 count=`expr 4 \* 1024 \* 1024`
修改虛擬機的啓動設備:<boot dev='hd'/>從硬盤啓動;<boot dev='cdrom'/>從CD啓動
網絡參數:
如ubuntu.xml配置文件,kvm虛擬機和xen虛擬機都只需要按照下面的模板進行配置,MAC地址是必須的,bridage的名字可能在不同的主機上是不一樣,可能是virbr0,也可能是br0,但類型一定要是橋接模式就可以了
<interface type='bridge'>
<mac address='00:16:36:1e:1d:04'/>
<source bridge='virbr0'/>
</interface>
KVM虛擬機遷移:
遷移命令:virsh migrate –live<id or name> qemu+ssh://<dstip>/system tcp://<dstip>:49152
遷移完之後,本地機器可能仍是定義狀態,要執行virsh undefine <name>清除。
注意:/dev/zero是一個輸入設備,用來初始化文件。
/dev/null是個無底洞,可以向它輸出任何數據,它通喫並且不會撐着。
實例:
1、使用ssh登入服務器:ssh 193.169=8.195.248
2、創建磁盤: qemu-img create -f qcow2 rhel6.5x64.img 15G
3、生成xml: virsh dumpxml rhel6.5x64 > rhelxml
4、編輯xml: vimrhelxml
a\修改name:rhel6.5x64
b\修改type: type=qcow2
c\修改mac地址: 改成不一樣的就可以:比如: a1->a2;
d\修改兩個source地址: iso img
e\去除uid那一行
5、定義xml:virsh define rhelxml
6、開啓rhel6.5x64:virsh start rhel6.5x64
另外一些查看命令:
virsh list --all:查看所有的虛擬機的信息
virsh vncdispaly ID;
vnc viewer address:oprt
1、直接通過virt-manager安裝、管理虛擬機(略)
2、通過命令行安裝guest虛擬機
qemu-img create -f qcow2 /images/centos6.3-x86_64.img 10G
chown qemu:qemu /images/centos6.3-x86_64.img
virt-install --name centos6.3 --ram=1024 --arch=x86_64 --vcpus=1 --check-cpu --os-type=linux --os-variant='rhel6' -c /tmp/CentOS-6.3-x86_64-minimal.iso --disk path=/images/centos6.3-x86_64.img,device=disk,bus=virtio,size=10,format=qcow2 --bridge=br100 --noautoconsole --vnc --vncport=5902 --vnclisten=0.0.0.0
二、利用virsh對虛擬機管理
2、開關機
virsh start centos6.3 #開機
virsh create /etc/libvirt/qemu/centos6.3.xml #直接通過主機配置文檔啓動主機
virsh shutdown centos6.3 #關機
virsh destroy centos6.3 #強制關閉電源
virsh list --all #查看虛擬機狀態
3、添加刪除虛擬機
virsh define /etc/libvirt/qemu/node5.xml #根據主機配置文檔添加虛擬機
virsh list --all #node5已經添加
virsh undefine node5 #移除虛擬機
ls /etc/libvirt/qemu
virsh list --all #node5已經被移除
4、使用已存在的虛擬機配置文檔安裝新的虛擬機
qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G#爲新建虛擬機生產磁盤鏡像文件
virsh list
virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml#導出虛擬機node6的硬件配置信息爲/etc/libvirt/qemu/node6.xml
vim /etc/libvirt/qemu/node6.xml
<domain type='kvm' id='20'> #修改node6的id號
<name>node6</name> #虛擬機node6的name
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid> #uuid必須修改,否則會和node4的衝突
<source file='/virhost/node4.img'/> #指定新虛擬機的硬盤文件
virsh define /etc/libvirt/qemu/node6.xml #使用虛擬描述文檔建立虛擬機,
可用virsh edit node6修改node6的配置文件
virsh start node6#啓動虛擬機
5 爲虛擬機開啓vnc
virsh edit node4 #編輯node4的配置文件;不建議直接通過vim node4.xml修改。
<graphics type='vnc' port='-1' listen='127.0.0.1' keymap='en-us'/>
#port='-1' :port自動分配,監聽迴環網絡(virt-manager管理需要listen='127.0.0.1'),無密碼
改爲
<graphics type='vnc' port='5904' listen='0.0.0.0' keymap='en-us' passwd='xiaobai'/>
#固定vnc管理端口5904,不自動分配,vnc密碼xiaobai,監聽所有網絡
遠程vnc訪問地址:192.168.32.40:5904
三、存儲池和存儲卷的管理
1.創建 KVM主機存儲池
virsh pool-define-as vmware_pool --type dir --target /virhost/vmware#定義存儲池vmware_pool或
virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware
#創建存儲池vmware_pool,類型爲文件目錄,/virhost/vmware,與pool-define-as結果一樣
2).創建基於文件系統的存儲池
virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware
或
virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware
3).查看存儲池信息
virsh pool-info vmware_pool #查看存儲域(池)
4).啓動存儲池
virsh pool-start vmware_pool #啓動存儲池
virsh pool-list
5)銷燬存儲域,取消存儲池
virsh pool-destroy vmware_pool #銷燬存儲池
virsh pool-list --all
virsh pool-undefine vmware_pool #取消存儲池的定義
virsh pool-list --all
2.創建了存儲池後,就可以創建一個卷,這個卷是用來做虛擬機的硬盤
virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2#創建卷 node6.img,所在存儲池爲vmware_pool,容量10G,初始分配1G,文件格式類型qcow2
virsh vol-info /virhost/vmware/node6.img #查看卷信息名稱: node6.img類型:文件容量: 10.00 GB分配: 136.00 KB
3.在存儲捲上安裝虛擬主機
virt-install --connect qemu:///system \-n node7 \-r 512 \-f /virhost/vmware/node7.img \--vnc \--os-type=linux \--os-variant=rhel6 \--vcpus=1 \--network bridge=br0 \-c /mnt/rhel-server-6.0-x86_64-dvd.iso
game over!
待續。。。。。
安裝虛擬機
從 6 系列開始 RedHat 推薦使用 virt-install/virsh 系列工具操作 kvm,而不是直接使用 qemu-kvm,所以 qemu-kvm 被移到一個不起眼的地方 /usr/libexec/:
# qemu-kvm
-bash: qemu-kvm: command not found
# ls /usr/libexec/qemu-kvm
/usr/libexec/qemu-kvm
VPSee 採用 RedHat 推薦的方式(virt-install)安裝虛擬機,這裏以安裝 Ubuntu-11.10-server-amd64.iso 爲例:
# virt-install \
--name ubuntu \
--ram 512 \
--vcpus=1 \
--disk path=/root/ubuntu.img,size=10 \
--accelerate \
--cdrom /root/ubuntu-11.10-server-amd64.iso \
--graphics vnc
開始安裝,創建硬盤 ubuntu.img 後就報錯,用的是 root 帳號居然還 Permission denied?!
Starting install...
Creating storage file ubuntu.img | 10.0 GB 00:00
ERROR internal error Process exited while reading console log output: char device redirected to /dev/pts/1
qemu-kvm: -drive file=/root/ubuntu.img,if=none,id=drive-ide0-0-0,format=raw,cache=none: could not open disk image /root/ubuntu.img: Permission denied
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
virsh --connect qemu:///system start ubuntu
otherwise, please restart your installation.
修改 qemu.conf 配置,把下面幾個地方的註釋去掉,然後把 dynamic_ownership 的值改成0,禁止 libvirtd 動態修改文件的歸屬:
# vi /etc/libvirt/qemu.conf
...
user = "root"
group = "root"
dynamic_ownership = 0
...
重啓 libvirtd 服務再用上面的 virt-install 命令安裝就應該可以了。這個時候 vnc 默認綁定的是本機 127.0.0.1,如果其他機器想用 vnc 客戶端訪問這臺 kvm 服務器正在安裝的 ubuntu 的話需要把 vnc 綁定到服務器的 IP 地址或者綁定到全局 0.0.0.0. 修改 qemu.conf 文件取消 vnc_listen 一行前面的註釋,記得重啓 libvirtd:
# vi /etc/libvirt/qemu.conf
...
vnc_listen = "0.0.0.0"