2013年3月18日 星期一

KVM (Kernel based Virtual Machine) 常用指令解說

KVM(Kernel based Virtual Machine) 是一套基於 Linux Kernel 的虛擬化技術,與 QEMU, XEN, Oracle VirtualBox 一樣都已經是相當成熟的 Open Source 的虛擬化解決方案。值得一提的是,KVM, QEMU, XEN 三種不同的虛擬化解決方案能夠在 Linux 內兼容並蓄,並且透過 libvirt 達成統一的管理窗口,因此本篇會以 virsh 指令運用為主解說常用的 KVM 指令。

1. 列出主機(node host)相關資訊
p.s. node host 相當於 XEN 的 Domain0
virsh nodeinfo

2. 列出主機(node host)所有硬體裝置(device)
virsh nodedev-list --tree

3. 列出所有虛擬網路(virtual network)
p.s. 預設會有一個 default 的虛擬網路,使用 default 虛擬網路就是指使用 NAT 模式
virsh net-list --all

// result
Name                 State      Autostart
-------------------------------------------------------
default              active      no       

4. 啟用虛擬網路
p.s. 虛擬網路必須是啟用(active)的狀態才能夠被虛擬機器使用
virsh net-start <network_name>
例如
virsh net-start default

5. 停止虛擬網路
virsh net-destroy <network_name>

6. 設定虛擬網路自動啟動
virsh net-autostart <network_name>

7. 新增不同設定的虛擬網路
p.s. 虛擬網路的新增需透過 xml 檔,xml 檔的格式依不同的網路需求有不同的格式,在 libvirt 的官方網站 Network XML format 中有更詳細的說明可以參考,有需要的人可以前往一觀。
vim <network_name>.xml
virsh net-define <network_name>.xml

8. 編輯虛擬網路設定
p.s. 使用以下指令預設會以 vi 編輯器開啟設定檔,如要變更為偏好的編輯器,請變更 $VISUAL 或 $EDITOR 兩個環境變數
virsh net-edit <network_name>
例如
virsh net-edit default

9. 刪除虛擬網路
p.s. 在 Debian 環境中,虛擬網路的設定檔會存放在 /etc/libvirt/qemu/networks/ 下,如要備份,可複製一份到其他路徑存放
virsh net-undefine <network_name>

10. 匯出虛擬網路的 XML 內容
virsh net-dumpxml <network_name>
例如
virsh net-dumpxml default > my_default_backup.xml

11. 安裝虛擬機器
以下指令安裝一名稱為 vm001 、記憶體 1024 MB、支援原生寫入讀取且檔案格式為 qcow2 之硬碟 5GB、使用 /home/debian.iso 光碟映像檔、作業系統種類為 debiansqueeze、不要自動連線至 VM 、使用 VNC 顯示畫面,且 VNC 密碼為 your_vnc_password、虛擬網路為 default
virt-install --connect qemu:///system \
                --name vm001 \
                --ram 1024 \
                --disk path=/home/kvm/vm001/vm001.img,size=5,io=native,format=qcow2 \
                -c /home/debian.iso \
                --os-variant debiansqueeze \
                --noautoconsole \
                --graphics vnc,password=your_vnc_password \
                --network network=default

p.s. VNC 預設只提供本機端(127.0.0.1)連線,可修改以上的 --graphics 參數為 --graphics vnc,password=your_vnc_password,listen=<ip_address>
12. 列出所有的虛擬機器(Virtual Machine)
virsh list --all

// result
 Id    Name                           State
----------------------------------------------------
 -     debian                          shut off

13. 啟動虛擬機器
virsh start <virtual_machine_name>
例如
virsh start debian

14. 停止虛擬機器
virsh destroy <virtual_machine_name>

15. 編輯虛擬機器設定檔
virsh edit <virtual_machine_name>

16. 刪除虛擬機器
virsh undefine <virtual_machine_name>

17. 匯出虛擬機器 XML 內容
virsh dumpxml <virtual_machine_name>

18. 列出虛擬機器快照(Snapshot)
virsh snapshot-list <virtual_machine_name>

// result
 Name                 Creation Time                          State
--------------------------------------------------------------------------------------
 115444247     2012-12-15 15:57:27 +0800    running
p.s. Name 一欄會被使用作為指定快照還原、刪除的依據
p.s. 要使用 KVM 的快照功能,須確認虛擬機器的映像檔(image)為 qcow2 格式,可使用以下指令確認。
qemu-img info <image_path>
例如
qemu-img info /home/kvm/vm001/vm001.img

// result
file format: qcow2
virtual size: 5G (10737418240 bytes)
disk size: 2.0G
...

19. 建立虛擬機器快照
virsh snapshot-create <virtual_machine_name>

20. 還原虛擬機器快照
virsh snapshot-revert<virtual_machine_name> <snapshot_name>
例如
virsh snapshot-revert vm001 115444247

21. 刪除虛擬機器快照
virsh snapshot-delete<virtual_machine_name> <snapshot_name>

參考資料
http://www.linux-kvm.org/page/Main_Page

沒有留言: