一:kvm工具棧
kvm主要的工具棧,從大的類別可以分為libvirt和qemu這2大類,其中libvirt中分為virtual machine manager和virsh ,virtual machine manager中的virt-manager是基於圖形化介面的管理,其他的都是可以在命令直接使用命令來管理虛擬機器,virsh是基於圖形化介面的管理,2者都是透過libvirt連線至libvirtd進行管理;對於qemu來說 ,它管理虛擬機器上直接呼叫kvm核心中模組的API進行管理
二:virsh工具的使用說明
1、檢視virsh命令幫助的資訊
都是透過分組來進行管理的
[root@server /]# virsh help 分組的命令: Domain Management (help keyword 'domain'): attach-device 從一個XML檔案附加裝置 attach-disk 附加磁碟裝置 attach-interface 獲得網路介面 autostart 自動開始一個域 blkdeviotune 設定或者查詢塊裝置 I/O 調節引數。 blkiotune 獲取或者數值 blkio 引數 blockcommit 啟動塊提交操作。 blockcopy 啟動塊複製操作。 blockjob 管理活躍塊操作 blockpull 使用其後端映像填充磁碟。 blockresize 創新定義域塊裝置大小 change-media 更改 CD 介質或者軟盤驅動器 console 連線到客戶會話 cpu-stats 顯示域 cpu 統計資料 create 從一個 XML 檔案建立一個域 define 從一個 XML 檔案定義(但不開始)一個域 desc 顯示或者設定域描述或者標題 destroy 銷燬(停止)域 detach-device 從一個 XML 檔案分離裝置 detach-device-alias detach device from an alias detach-disk 分離磁碟裝置 detach-interface 分離網路介面 domdisplay 域顯示連線 URI domfsfreeze Freeze domain's mounted filesystems. domfsthaw Thaw domain's mounted filesystems. domfsinfo Get information of domain's mounted filesystems. domfstrim 在域掛載的檔案系統中呼叫 fstrim。 domhostname 輸出域主機名 domid 把一個域名或 UUID 轉換為域 id domif-setlink 設定虛擬介面的連結狀態 domiftune 獲取/設定虛擬介面引數 domjobabort 忽略活躍域任務 domjobinfo 域任務資訊 domname 將域 id 或 UUID 轉換為域名 domrename rename a domain dompmsuspend 使用電源管理功能掛起域 dompmwakeup 從 pmsuspended 狀態喚醒域 domuuid 把一個域名或 id 轉換為域 UUID domxml-from-native 將原始配置轉換為域 XML domxml-to-native 將域 XML 轉換為原始配置 dump 把一個域的核心 dump 到一個檔案中以方便分析 dumpxml XML 中的域資訊 edit 編輯某個域的 XML 配置 event Domain Events inject-nmi 在虛擬機器中輸入 NMI iothreadinfo view domain IOThreads iothreadpin control domain IOThread affinity iothreadadd add an IOThread to the guest domain iothreaddel delete an IOThread from the guest domain send-key 向虛擬機器傳送序列號 send-process-signal 向程序傳送訊號 lxc-enter-namespace LXC 虛擬機器進入名稱空間 managedsave 管理域狀態的儲存 managedsave-remove 刪除域的管理儲存 managedsave-edit edit XML for a domain's managed save state file managedsave-dumpxml Domain information of managed save state file in XML managedsave-define redefine the XML for a domain's managed save state file memtune 獲取或者數值記憶體引數 perf Get or set perf event metadata show or set domain's custom XML metadata migrate 將域遷移到另一個主機中 migrate-setmaxdowntime 設定最大可耐受故障時間 migrate-getmaxdowntime get maximum tolerable downtime migrate-compcache 獲取/設定壓縮快取大小 migrate-setspeed 設定遷移頻寬的最大值 migrate-getspeed 獲取最長遷移頻寬 migrate-postcopy Switch running migration from pre-copy to post-copy numatune 獲取或者數值 numa 引數 qemu-attach QEMU 附加 qemu-monitor-command QEMU 監控程式命令 qemu-monitor-event QEMU Monitor Events qemu-agent-command QEMU 虛擬機器代理命令 reboot 重新啟動一個域 reset 重新設定域 restore 從一個存在一個檔案中的狀態恢復一個域 resume 重新恢復一個域 save 把一個域的狀態儲存到一個檔案 save-image-define 為域的儲存狀態檔案重新定義 XML save-image-dumpxml 在 XML 中儲存狀態域資訊 save-image-edit 為域儲存狀態檔案編輯 XML schedinfo 顯示/設定日程安排變數 screenshot 提取當前域控制檯快照並儲存到檔案中 set-lifecycle-action change lifecycle actions set-user-password set the user password inside the domain setmaxmem 改變最大記憶體限制值 setmem 改變記憶體的分配 setvcpus 改變虛擬 CPU 的號 shutdown 關閉一個域 start 開始一個(以前定義的)非活躍的域 suspend 掛起一個域 ttyconsole tty 控制檯 undefine 取消定義一個域 update-device 從 XML 檔案中關係裝置 vcpucount 域 vcpu 計數 vcpuinfo 詳細的域 vcpu 資訊 vcpupin 控制或者查詢域 vcpu 親和性 emulatorpin 控制火車查詢域模擬器親和性 vncdisplay vnc 顯示 guestvcpus query or modify state of vcpu in the guest (via agent) setvcpu attach/detach vcpu or groups of threads domblkthreshold set the threshold for block-threshold event for a given block device or it's backing chain element Domain Monitoring (help keyword 'monitor'): domblkerror 在塊裝置中顯示錯誤 domblkinfo 域塊裝置大小資訊 domblklist 列出所有域塊 domblkstat 獲得域裝置塊狀態 domcontrol 域控制介面狀態 domif-getlink 獲取虛擬介面連結狀態 domifaddr Get network interfaces' addresses for a running domain domiflist 列出所有域虛擬介面 domifstat 獲得域網路介面狀態 dominfo 域資訊 dommemstat 獲取域的記憶體統計 domstate 域狀態 domstats get statistics about one or multiple domains domtime domain time list 列出域 Host and Hypervisor (help keyword 'host'): allocpages Manipulate pages pool size capabilities 效能 cpu-baseline 計算基線 CPU cpu-compare 使用 XML 檔案中描述的 CPU 與主機 CPU 進行對比 cpu-models CPU models domcapabilities domain capabilities freecell NUMA可用記憶體 freepages NUMA free pages hostname 列印管理程式主機名 hypervisor-cpu-baseline compute baseline CPU usable by a specific hypervisor hypervisor-cpu-compare compare a CPU with the CPU created by a hypervisor on the host maxvcpus 連線 vcpu 最大值 node-memory-tune 獲取或者設定節點記憶體引數 nodecpumap 節點 cpu 對映 nodecpustats 輸出節點的 cpu 狀統計資料。 nodeinfo 節點資訊 nodememstats 輸出節點的記憶體狀統計資料。 nodesuspend 在給定時間段掛起主機節點 sysinfo 輸出 hypervisor sysinfo uri 列印管理程式典型的URI version 顯示版本 Interface (help keyword 'interface'): iface-begin 生成當前介面設定快照,可在今後用於提交 (iface-commit) 或者恢復 (iface-rollback) iface-bridge 生成橋接裝置併為其附加一個現有網路裝置 iface-commit 提交 iface-begin 後的更改並釋放恢復點 iface-define define an inactive persistent physical host interface or modify an existing persistent one from an XML file iface-destroy 刪除物理主機介面(啟用它請執行 "if-down") iface-dumpxml XML 中的介面資訊 iface-edit 為物理主機介面編輯 XML 配置 iface-list 物理主機介面列表 iface-mac 將介面名稱轉換為介面 MAC 地址 iface-name 將介面 MAC 地址轉換為介面名稱 iface-rollback 恢復到之前儲存的使用 iface-begin 生成的更改 iface-start 啟動物理主機介面(啟用它請執行 "if-up") iface-unbridge 分離其輔助裝置後取消定義橋接裝置 iface-undefine 取消定義物理主機介面(從配置中刪除) Network Filter (help keyword 'filter'): nwfilter-define 使用 XML 檔案定義或者更新網路過濾器 nwfilter-dumpxml XML 中的網路過濾器資訊 nwfilter-edit 為網路過濾器編輯 XML 配置 nwfilter-list 列出網路過濾器 nwfilter-undefine 取消定義網路過濾器 nwfilter-binding-create create a network filter binding from an XML file nwfilter-binding-delete delete a network filter binding nwfilter-binding-dumpxml XML 中的網路過濾器資訊 nwfilter-binding-list list network filter bindings Networking (help keyword 'network'): net-autostart 自動開始網路 net-create 從一個 XML 檔案建立一個網路 net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy 銷燬(停止)網路 net-dhcp-leases print lease info for a given network net-dumpxml XML 中的網路資訊 net-edit 為網路編輯 XML 配置 net-event Network Events net-info 網路資訊 net-list 列出網路 net-name 把一個網路UUID 轉換為網路名 net-start 開始一個(以前定義的)不活躍的網路 net-undefine undefine a persistent network net-update 更新現有網路配置的部分 net-uuid 把一個網路名轉換為網路UUID Node Device (help keyword 'nodedev'): nodedev-create 根據節點中的 XML 檔案定義生成裝置 nodedev-destroy 銷燬(停止)節點中的裝置 nodedev-detach 將節點裝置與其裝置驅動程式分離 nodedev-dumpxml XML 中的節點裝置詳情 nodedev-list 這臺主機中中的列舉裝置 nodedev-reattach 重新將節點裝置附加到他的裝置驅動程式中 nodedev-reset 重置節點裝置 nodedev-event Node Device Events Secret (help keyword 'secret'): secret-define 定義或者修改 XML 中的 secret secret-dumpxml XML 中的 secret 屬性 secret-event Secret Events secret-get-value secret 值輸出 secret-list 列出 secret secret-set-value 設定 secret 值 secret-undefine 取消定義 secret Snapshot (help keyword 'snapshot'): snapshot-create 使用 XML 生成快照 snapshot-create-as 使用一組引數生成快照 snapshot-current 獲取或者設定當前快照 snapshot-delete 刪除域快照 snapshot-dumpxml 為域快照轉儲 XML snapshot-edit 編輯快照 XML snapshot-info 快照資訊 snapshot-list 為域列出快照 snapshot-parent 獲取快照的上級快照名稱 snapshot-revert 將域轉換為快照 Storage Pool (help keyword 'pool'): find-storage-pool-sources-as 找到潛在儲存池源 find-storage-pool-sources 發現潛在儲存池源 pool-autostart 自動啟動某個池 pool-build 建立池 pool-create-as 從一組變數中建立一個池 pool-create 從一個 XML 檔案中建立一個池 pool-define-as 在一組變數中定義池 pool-define define an inactive persistent storage pool or modify an existing persistent one from an XML file pool-delete 刪除池 pool-destroy 銷燬(刪除)池 pool-dumpxml XML 中的池資訊 pool-edit 為儲存池編輯 XML 配置 pool-info 儲存池資訊 pool-list 列出池 pool-name 將池 UUID 轉換為池名稱 pool-refresh 重新整理池 pool-start 啟動一個(以前定義的)非活躍的池 pool-undefine 取消定義一個不活躍的池 pool-uuid 把一個池名稱轉換為池 UUID pool-event Storage Pool Events Storage Volume (help keyword 'volume'): vol-clone 克隆卷。 vol-create-as 從一組變數中建立卷 vol-create 從一個 XML 檔案建立一個卷 vol-create-from 生成卷,使用另一個卷作為輸入。 vol-delete 刪除卷 vol-download 將卷內容下載到檔案中 vol-dumpxml XML 中的卷資訊 vol-info 儲存卷資訊 vol-key 為給定金鑰或者路徑返回卷金鑰 vol-list 列出卷 vol-name 為給定金鑰或者路徑返回卷名 vol-path 為給定金鑰或者路徑返回卷路徑 vol-pool 為給定金鑰或者路徑返回儲存池 vol-resize 創新定義卷大小 vol-upload 將檔案內容上傳到卷中 vol-wipe 擦除卷 Virsh itself (help keyword 'virsh'): cd 更改當前目錄 echo echo 引數 exit 退出這個非互動式終端 help 列印幫助 pwd 輸出當前目錄 quit 退出這個非互動式終端 connect 連線(重新連線)到 hypervisor
分為domain management(域管理),domain monitoring(域監控),Host and Hypervisor(主機及虛擬化),interface(網路卡介面),network filter(網路防火牆),networking(網路),node device(節點裝置驅動),secret,snapshot(快照),storage pool(儲存池或儲存策略),storage volume(儲存卷),virsh itself(virsh shell自身相關的組),檢視特定的幫助資訊,可以使用,virsh help +組名,比如檢視storage volume組相關的命令,可以使用virsh help volume來進行檢視
2:命令模式建立虛擬機器
錯誤的示範,先建立一個新的磁碟檔案,然後再來建立一個虛擬機器,發現啟動不了,原因就是這個在建立虛擬機器的時候,沒有指定這個映象檔案在哪裡,因此啟動不來
方法:在建立磁碟檔案的時候,需要將系統(映象)裝進磁碟裡面才行,否則建立不出來
正確的示範,直接複製已有的虛擬機器的配置檔案,和已有的磁碟檔案,修改一些小的引數即可
操作:
#複製已有的配置檔案 [root@server qemu]# ls c7-1.xml networks [root@server qemu]# cp c7-1.xml c7-2.xml [root@server images]# pwd /var/lib/libvirt/images [root@server images]# cp c7-1.qcow2 c7-2.qcow2 [root@server images]# ls c7-1.qcow2 c7-2.qcow2 #修改虛擬機器的配置檔案 虛擬機器的名字,uuid,磁碟的存放的路徑,mac地址(網路卡的地址,實體地址) <name>c7-2</name> <uuid>4743040a-6a6c-4259-b29d-e5d3798667e4</uuid> <source file='/var/lib/libvirt/images/c7-2.qcow2'/> <mac address='52:54:00:32:16:db'/> #基於xml配置檔案建立虛擬機器 [root@server qemu]# virsh create c7-2.xml 域 c7-2 被建立(從 c7-2.xml) [root@server qemu]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 2 c7-1 running 3 c7-2 running
這種建立,不需要再次進行安裝的流程,建立後,就能直接使用,並且使用的都是一個磁碟,原來的資料檔案也被保留在上面
建立一個虛擬磁碟的命令為:
檢視虛擬磁碟的命令:
virsh-define:從指定的配置檔案中建立虛擬機器,但是不執行,create是建立並執行
3:連線虛擬機器(virsh console)
從宿主機連線到指定虛擬的序列控制檯
[root@server qemu]# virsh help console NAME console - 連線到客戶會話 SYNOPSIS console <domain> [--devname <string>] [--force] [--safe] DESCRIPTION 連線客戶真實序列控制檯 OPTIONS [--domain] <string> domain name, id or uuid --devname <string> 字元裝置名稱 --force 強制控制檯連線(斷開已連線的會話) --safe 只有在支援安全控制檯處理時方可連線
直接進行連線的話,會一直處於卡死的狀態,因為centos7上預設沒有允許ttySO
在宿主機用ssh連線至虛擬機器(當然,svn或者使用virt-manager也行),修改核心的引數,然後重啟虛擬機器
[root@server qemu]# ssh 172.25.250.130 root@172.25.250.130's password: Last login: Sun Apr 28 10:06:37 2024 from 172.25.250.10 [root@localhost ~]# grep "ttyS0" /etc/securetty //這個檔案裡面定義一些能被root使用者直接登入的終端 ttyS0 [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0" [root@localhost ~]# reboot ##進行連線的操作 [root@server qemu]# virsh console c7-1 連線到域 c7-1 換碼符為 ^] CentOS Linux 7 (Core) Kernel 3.10.0-862.el7.x86_64 on an x86_64 localhost login: root Password: Last login: Sun Apr 28 10:10:10 from 172.25.250.10 [root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:32:16:da brd ff:ff:ff:ff:ff:ff
宿主機連上虛擬機器後,退出控制檯使用ctrl+]
4:virsh常見的操作
1、virsh shutdown(關閉虛擬機器)
[root@server qemu]# virsh help shutdown NAME shutdown - 關閉一個域 SYNOPSIS shutdown <domain> [--mode <string>] DESCRIPTION 在目標域中執行關閉行為。 OPTIONS [--domain] <string> domain name, id or uuid --mode <string> shutdown mode: acpi|agent|initctl|signal|paravirt [root@server qemu]# virsh shutdown c7-1 域 c7-1 被關閉 [root@server qemu]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 3 c7-2 running - c7-1 關閉
有的時候使用shutdown關機的時候,關不掉,需要使用destory來進行強制的關機
當然,如果對於已經關機的虛擬機器,使用destory的話,會將這個虛擬機器刪除掉,直接使用destory的話,會進行強制關機的操作
[root@server qemu]# virsh shutdown c7-2 域 c7-2 被關閉 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 3 c7-2 running virsh destory c7-2
2、啟動非活動的虛擬機器(virsh start)
[root@server qemu]# virsh start c7-1 域 c7-1 已開始 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 4 c7-1 running
3、掛起和恢復掛起的(virsh suspend 和virsh resume)
掛起就是把指定的虛擬機器掛起,就是把執行狀態的虛擬機器暫停,並把當前執行狀態儲存到記憶體,外部的客戶端對它訪問也不會響應,如果此時宿主機斷電,那麼之前儲存在記憶體中執行狀態資料也會隨之丟失
[root@server qemu]# virsh suspend c7-1 域 c7-1 被掛起 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 5 c7-1 暫停 [root@server qemu]# virsh resume c7-1 域 c7-1 被重新恢復 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 5 c7-1 running
4、基於磁碟的掛起和取消(virsh save和virsh restore)
virsh save:把指定的虛擬機器執行狀態的資訊儲存到指定的檔案,vmware的掛起操作是把執行狀態儲存到磁碟,宿主機掉電,它不會丟失資料
virsh restore:從指定檔案恢復虛擬機器(該檔案是使用save命令儲存下來的虛擬機器執行狀態資訊檔案)
[root@server qemu]# virsh help save NAME save - 把一個域的狀態儲存到一個檔案 SYNOPSIS save <domain> <file> [--bypass-cache] [--xml <string>] [--running] [--paused] [--verbose] DESCRIPTION 儲存執行中的域 的 RAM 狀態 OPTIONS [--domain] <string> domain name, id or uuid [--file] <string> 資料存到什麼地方 --bypass-cache 儲存時避免檔案系統快取 --xml <string> 包含為目標更新的 XML 的檔名 --running 設定要在還原中執行的域 --paused 設定要在還原中暫停的域 --verbose 顯示儲存程序 [root@server qemu]# virsh save c7-1 /opt/c2.bin --paused 儲存到 c7-1 的域 /opt/c2.bin [root@server qemu]# ls /opt/ c2.bin rh [root@server qemu]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- - c7-1 關閉 #恢復 [root@server qemu]# virsh restore /opt/c2.bin 從 /opt/c2.bin 恢復域 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 6 c7-1 暫停
恢復C7-1變成了暫停的狀態,這是因為在儲存狀態資訊時,指定了恢復的狀態,當然我們也可以在恢復的時候使用選項來進行指定虛擬機器的狀態
[root@server qemu]# virsh restore /opt/c2.bin --running 從 /opt/c2.bin 恢復域 [root@server qemu]# virsh list Id 名稱 狀態 ---------------------------------------------------- 7 c7-1 running
5、重啟虛擬機器(virsh reboot,virsh reset)
virsh reboot重啟虛擬機器
virsh reset:對指定的虛擬機器執行強制重啟的操作
[root@server qemu]# virsh reboot c7-1 域 c7-1 正在被重新啟動 您在 /var/spool/mail/root 中有郵件 [root@server mail]# virsh reset c7-1 重新設定域 c7-1
6、檢視虛擬機器詳細資訊(virsh dumpxml)
[root@server mail]# virsh dumpxml c7-1 <domain type='kvm' id='7'> <name>c7-1</name> <uuid>4743040a-6a6c-4259-b29d-e5d3798667e3</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <resource>
7、刪除虛擬機器(virsh undefine)
刪除的時候,配置檔案都會被刪除掉,如果還要刪除儲存卷的話,需要加上選項即可
現將虛擬機器進行關機的操作,然後取消定義,即可刪除虛擬機器,網路的配置檔案也一樣
[root@server mail]# virsh help undefine NAME undefine - 取消定義一個域 SYNOPSIS undefine <domain> [--managed-save] [--storage <string>] [--remove-all-storage] [--delete-snapshots] [--wipe-storage] [--snapshots-metadata] [--nvram] [--keep-nvram] DESCRIPTION 取消定義一個域或者將持久轉換為臨時。 OPTIONS [--domain] <string> domain name, id or uuid --managed-save 刪除域管理的狀態檔案 --storage <string> 刪除關聯的儲存卷(用逗號分開的目標或者源路徑列表)(檢視 domblklist) --remove-all-storage 刪除關聯的儲存卷(小心使用) --delete-snapshots delete snapshots associated with volume(s), requires --remove-all-storage (must be supported by storage driver) --wipe-storage 擦除刪除卷中的資料 --snapshots-metadata 如果不活躍則刪除所有域快照後設資料 --nvram remove nvram file, if inactive --keep-nvram keep nvram file, if inactive [root@server qemu]# virsh shutdown c7-1 域 c7-1 被關閉 [root@server qemu]# ls c7-1.xml c7-2.xml networks [root@server qemu]# ls /var/lib/libvirt/images/ c7-1.qcow2 c7-2.qcow2 [root@server qemu]# virsh undefine c7-1 域 c7-1 已經被取消定義 [root@server qemu]# ls c7-2.xml networks [root@server qemu]# ls /var/lib/libvirt/images/ c7-1.qcow2 c7-2.qcow2 [root@server qemu]# virsh list --all Id 名稱 狀態 ----------------------------------------------------
8、設定虛擬機器開機自啟(virsh autostart)
[root@server qemu]# virsh help autostart NAME autostart - 自動開始一個域 SYNOPSIS autostart <domain> [--disable] DESCRIPTION 設定一個域在啟動時自動開始. OPTIONS [--domain] <string> domain name, id or uuid --disable 禁止自動啟動