章 15. 透過 virsh 來管理客座端
virsh
是個用來管理客座端和 hypervisor(管理程序)的指令列介面工具。
virsh
這項工具建置於 libvirt
管理 API 上,並且可作為替代 xm
工具和圖形化客座端管理程式(virt-manager
)的額外選項來進行作業。無權限的使用者只可使用 virsh
的唯讀模式。您可使用 virsh
來執行客座端機器的 script。
下列表格提供了所有 virsh 指令列選項的快速參照指南。
指令
|
Description
|
---|
help
|
印出基本協助資訊。
|
list
|
列出所有客座端。
|
dumpxml
|
輸出客座端的 XML 配置檔案。
|
create
|
由一個 XML 配置檔案來建立客座端並啟用新的客座端。
|
start
|
啟用一個未啟用中的客座端。
|
destroy
|
強制客座端停下。
|
define
|
輸出客座端的 XML 配置檔案。
|
domid
|
顯示客座端的 ID。
|
domuuid
|
顯示客座端的 UUID。
|
dominfo
|
顯示客座端的相關資訊。
|
domname
|
顯示客座端的名稱。
|
domstate
|
顯示客座端的狀態。
|
quit
|
退出互動式終端機。
|
reboot
|
重新啟動客座端。
|
restore
|
恢復之前已儲存於一個檔案中的客座端。
|
resume
|
恢復一個暫停中的客座端。
|
save
|
將客座端目前的狀態儲存至一個檔案中。
|
shutdown
|
正常地停用客座端。
|
suspend
|
將客座端暫停。
|
undefine
|
刪除與某個客座端有關聯的所有檔案。
|
migrate
|
將客座端遷移至另一部主機上。
|
表格 15.1. 客座端管理指令
請使用下列 virsh
指令選項來管理客座端和 hypervisor 資源:
指令
|
Description
|
---|
setmem
|
為客座端設置分配記憶體。
|
setmaxmem
|
設定 hypervisor 所能使用的記憶體最大限制。
|
setvcpus
|
更改分配給客座端的虛擬 CPU 數量。
|
vcpuinfo
|
顯示有關於客座端的虛擬 CPU 資訊。
|
vcpupin
|
控制客座端的虛擬 CPU 相似性。
|
domblkstat
|
顯示正在執行中的客座端的區塊裝置數據。
|
domifstat
|
顯示執行中的客座端的網路介面卡數據。
|
attach-device
|
透過使用某個 XML 檔案中的裝置定義來將裝置附加至客座端上。
|
attach-disk
|
附加新磁碟裝置至客座端。
|
attach-interface
|
附加新網路介面卡至客座端。
|
detach-device
|
將裝置從客座端上分離,接受與 attach-device 指令相同類型的 XML 描述。
|
detach-disk
|
將磁碟裝置由客座端上移除。
|
detach-interface
|
將網路介面卡由客座端上移除。
|
表格 15.2. 資源管理選項
以下為其它的 virsh
指令:
指令
|
Description
|
---|
version
|
顯示 virsh 的版本
|
nodeinfo
|
輸出有關於 hypervisor 的相關資訊
|
表格 15.3. 其它選項
透過 virsh
來連至一個 hypervisor session:
# virsh connect {hostname OR URL}
<name>
為 hypervisor 的機器名稱。若您希望進行唯讀的連線,請搭配使用上述指令與 -readonly
。
透過 virsh
來輸出客座端的 XML 配置檔案:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
這項指令會將客座端的 XML 配置檔案輸出至標準輸出(
stdout
)中。您可透過將輸出傳送至一個檔案來儲存這些資料。以下為傳送輸出至一個名為
guest.xml
的檔案的範例:
# virsh dumpxml GuestID
> guest.xml
guest.xml
這個檔案可被用來重新建立客座端(請參閱
編輯客座端的配置檔案)。您可編輯此 XML 配置檔案來設定額外的裝置或是建置額外的客座端。欲取得更多有關於修改透過
virsh dumpxml
所建立的檔案的相關資訊,請參閱
節 18.1, “搭配使用 virsh 與 XML 配置檔案”。
virsh dumpxml
輸出的範例:
# virsh dumpxml r5b2-mySQL01
<domain type='xen' id='13'>
<name>r5b2-mySQL01</name>
<uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid>
<bootloader>/usr/bin/pygrub</bootloader>
<os>
<type>linux</type>
<kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel>
<initrd>/var/lib/libvirt/initrd.UQafMw</initrd>
<cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline>
</os>
<memory>512000</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<interface type='bridge'>
<source bridge='xenbr0'/>
<mac address='00:16:3e:49:1d:11'/>
<script path='vif-bridge'/>
</interface>
<graphics type='vnc' port='5900'/>
<console tty='/dev/pts/4'/>
</devices>
</domain>
# virsh create configuration_file.xml
# virsh edit softwaretesting
這將會開啟一個文字編輯器。預設文字編輯器為 $EDITOR
shell 參數(預設值為 vi
)。
透過 virsh
來中止客座端:
# virsh suspend {domain-id, domain-name or domain-uuid}
當客座端為中止狀態時,它仍會消耗系統記憶體不過卻不會消耗處理器資源。當客座端中止時,磁碟與網路的 I/O 將不會發生。這項作業會即刻執行,而客座端也可透過
resume
(
復原客座端)選項來重新啟動。
透過 virsh
指令和 resume
選項來恢復使用一個中止的客座端:
# virsh resume {domain-id, domain-name or domain-uuid}
這項作業會即刻執行,而客座端參數會被保存來進行 suspend
和 resume
作業。
透過使用 virsh
指令來將客座端目前的狀態儲存至一個檔案中:
# virsh save {domain-name, domain-id or domain-uuid} filename
這將會停止您所指定的客座端,並將資料儲存至一個檔案中。根據客座端所使用的記憶體用量,這也許會花上一些時間。您可透過使用
restore
(
復原客座端)選項來恢復客座端的狀態。儲存與暫停相似,除了只將客座端暫停之外,它還會儲存客座端的目前狀態。
# virsh restore filename
這會重新啟動事先儲存的客座端,但可能會花上一段時間。客座端的名稱與 UIDD 將會被保留住但會被分配一組新的 id。
透過使用 virsh
指令來關閉客座端:
# virsh shutdown {domain-id, domain-name or domain-uuid}
您可以透過修改客座端配置檔案中的 on_shutdown
參數來控制重新啟動中的客座端之特性。
使用 virsh
指令來重新啟動客座端:
#virsh reboot {domain-id, domain-name or domain-uuid}
您可以透過修改客座端配置檔案中的 on_reboot
參數來控制重新啟動中的客座端之特性。
透過使用 virsh
指令來停止客座端:
# virsh destroy {domain-id, domain-name or domain-uuid}
使用這項指令會造成立即的關閉,並停止指定的客座端。使用
virsh destroy
極有可能造成客座端檔案系統損毀。您應該僅在客座端沒有回應時才使用
destroy
選項。若是半虛擬化客座端的話,您則應使用
shutdown
選項(
shutdown
option(
關閉客座端)來代替。
若要取得客座端的網域 ID:
# virsh domid {domain-name or domain-uuid}
若要取得客座端的網域名稱:
# virsh domname {domain-id or domain-uuid}
若要取得客座端的 UUID:
# virsh domuuid {domain-id or domain-name}
virsh domuuid
指令輸出的範例:
# virsh domuuid r5b2-mySQL01
4a4c59a7-ee3f-c781-96e4-288f2862f011
您可透過使用 virsh
以及客座端的網域 ID、網域名稱或 UUID 來顯示特定客座端上的資訊:
# virsh dominfo {domain-id, domain-name or domain-uuid}
以下為來自 virsh dominfo
指令的輸出範例:
# virsh dominfo r5b2-mySQL01
id: 13
name: r5b2-mysql01
uuid: 4a4c59a7-ee3f-c781-96e4-288f2862f011
os type: linux
state: blocked
cpu(s): 1
cpu time: 11.0s
max memory: 512000 kb
used memory: 512000 kb
若要顯示主機的相關資訊:
# virsh nodeinfo
virsh nodeinfo
指令輸出的範例:
# virsh nodeinfo
CPU model x86_64
CPU (s) 8
CPU frequency 2895 Mhz
CPU socket(s) 2
Core(s) per socket 2
Threads per core: 2
Numa cell(s) 1
Memory size: 1046528 kb
這會顯示節點的資訊,以及支援虛擬化程序的主機。
透過使用 virsh
來顯示客座端清單以及它們目前的狀態:
# virsh list
其它可用選項包含:
--inactive
選項可列出非啟用中的客座端(也就是已定義但尚未啟用的客座端),以及
--all
選項將會列出所有客座端。例如:
# virsh list --all
Id Name State
----------------------------------
0 Domain-0 running
1 Domain202 paused
2 Domain010 inactive
3 Domain9600 crashed
來自於 virsh list
的輸出被分為下列六個狀態的其中之一。
running
狀態代表 CPU 上正啟用中的客座端。
被列為 blocked
的客座端已被封鎖,並且沒有在執行中或是無法執行。這可能是因為客座端等待 I/O(傳統的等待狀態)或是客座端進入睡眠模式所造成的。
paused
狀態會列出被暫停的網域。若是有位系統管理員使用了 virt-manager
中的 pause 按鈕、xm pause
或 virsh suspend
的話,這就有可能會發生。當客座端暫停時,它會消耗記憶體與其它資源,不過它無法透過 hypervisor 來進行記憶體與 CPU 資源的排程。
shutdown
狀態為正在進行關閉程序的客座端。客座端會收到一則關閉訊號,並且應該要正常地進行它的作業關閉程序。這也許無法適用於所有客座端作業系統;有些作業系統不會回應這些訊號。
狀態為 dying
的網域正處於關閉狀態中,在此狀態下,網域還未完全關閉或當機。
狀態為 crashed
的客座端在執行時發生了錯誤並且已不再運作了。此狀態只可能在客座端被設為當機時不會重新啟動的情況下才會發生。
透過 virsh
來由客座端顯示虛擬 CPU 資訊:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
virsh vcpuinfo
指令的輸出範例:
# virsh vcpuinfo r5b2-mySQL01
VCPU: 0
CPU: 0
State: blocked
CPU time: 0.0s
CPU Affinity: yy
設定虛擬 CPU 和實體 CPU 的相似性:
# virsh vcpupin {domain-id, domain-name or domain-uuid} vcpu, cpulist
vcpu
為虛擬 VCPU 的數量,而 cpulist
則會列出 CPU 的實體數量。
透過 virsh
來修改指定給客座端的 CPU 數量:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
新的 count
計數值不可超過當您建立客座端時所指定的數值。
透過 virsh
來修改客座端的記憶體配置:
# virsh setmem {domain-id or domain-name} count
您必須以 kb 為單位來指定計數。新計數不可超過當您建立客座端時所指定的數值。低於 64 MB 的數值也許無法運作於大部分客座端作業系統上。較高的最大記憶體數值不會影響目前啟用中的客座端,除非新的數值較低,因為這會將可用的記憶體使用率縮小。
請使用 virsh domblkstat
來顯示啟用中的客座端的區塊裝置數據。
# virsh domblkstat GuestName block-device
使用 virsh domifstat
來顯示執行中的客座端的網路介面卡數據。
# virsh domifstat GuestName interface-device
客座端可藉由使用 virsh
來被遷移至另一部主機上。將網域遷移至另一部主機上。附加 --live 來進行即時遷移。migrate
指令接受下列格式的參數:
# virsh migrate --live GuestName DestinationURL
--live
參數為可選用的參數。請附加 --live
參數來進行即時遷移。
The GuestName
parameter represents the name of the guest which you want to migrate.
The DestinationURL
parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt
running.
Once the command is entered you will be prompted for the root password of the destination system.
此部份涵蓋了如何透過 virsh
指令來管理虛擬網路。若要列出虛擬網路請輸入:
# virsh net-list
您可以使這項指令來產生類似以下的輸出:
# virsh net-list
Name State Autostart
-----------------------------------------
default active yes
vnet1 active yes
vnet2 active yes
欲瀏覽特定虛擬網路的網路資訊:
# virsh net-dumpxml NetworkName
這會以 XML 格式顯示有關於所指定的虛擬網路之資訊:
# virsh net-dumpxml vnet1
<network>
<name>vnet1</name>
<uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
<forward dev='eth0'/>
<bridge name='vnet0' stp='on' forwardDelay='0' />
<ip address='192.168.100.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.128' end='192.168.100.254' />
</dhcp>
</ip>
</network>
其它使用來管理虛擬網路的 virsh
指令還包括:
virsh net-autostart 網路名稱
— 自動啟用一個被指定為網路名稱
的網路。
virsh net-create XMLfile
— 透過使用現有的 XML 檔案來產生並啟用一個新的網路。
virsh net-define XMLfile
— 透過現有的 XML 檔案產生新的網路裝置不過不啟用該裝置。
virsh net-destroy 網路名稱
— 刪除一個被指定為網路名稱
的網路。
virsh net-name networkUUID
— 將一個指定的 networkUUID
轉換成網路名稱。
virsh net-uuid 網路名稱
— 將一個指定的網路名稱
轉換成網路 UUID。
virsh net-start 未啟用的網路之名稱
— 啟用一個未啟用的網路。
virsh net-undefine 未啟用的網路之名稱
— 將未啟用的網路的定義移除。