一:kvm工具棧 kvm主要的工具棧,從大的類別可以分為libvirt和qemu這2大類,其中libvirt中分為virtual machine manager和virsh ,virtual machine manager中的virt-manager是基於圖形化界面的管理,其他的都是可以在命令直接使 ...
一: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 [email protected]'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 禁止自動啟動