KVM虛擬機器的管理

m0_46289868發表於2020-10-21

1、使用virsh來管理虛擬機器

(1)立即模式
virsh list --all
(2)互動模式
# virsh
歡迎使用 virsh,虛擬化的互動式終端。

輸入:'help' 來獲得命令的幫助資訊
       'quit' 退出

virsh #

常見的基本操作

virsh start 虛擬機器名
#啟動虛擬機器
virsh shutdown 虛擬機器名
#關閉虛擬機器
virsh destroy 虛擬機器名
#強制關閉虛擬機器
virsh vncdisplay 虛擬機器名
#查詢虛擬機器的VNC埠號
#[root@KVM01 images]# virsh vncdisplay name\=CentOS-7 
#:600
virsh dumpxml 
#匯出主機配置資訊
virsh undefine 
#刪除主機
virsh define 
#匯入主機配置
virsh domrename 
#對虛擬機器進行重新命名
virsh suspend 
#掛起虛擬機器
virsh resume 
#恢復虛擬機器
virsh autostart 
#虛擬機器開機啟動



更多引數:
virsh --help
[root@KVM01 images]# virsh --help

virsh [options]... [<command_string>]
virsh [options]... <command> [args...]

  options:
    -c | --connect=URI      hypervisor connection URI
    -d | --debug=NUM        debug level [0-4]
    -e | --escape <char>    set escape sequence for console
    -h | --help             this help
    -k | --keepalive-interval=NUM
                            keepalive interval in seconds, 0 for disable
    -K | --keepalive-count=NUM
                            number of possible missed keepalive messages
    -l | --log=FILE         output logging to file
    -q | --quiet            quiet mode
    -r | --readonly         connect readonly
    -t | --timing           print timing information
    -v                      short version
    -V                      long version
         --version[=TYPE]   version, TYPE is short or long (default short)
  commands (non interactive mode):

 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                    在一個XML檔案中定義(但不啟動)一個池或已有的池
    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

2、管理虛擬儲存

**虛擬化專案中儲存的注意事項**
(1)儲存的效能幾乎總是虛擬化的瓶頸
(2)通過多個硬碟驅動以分佈磁碟I/O來實現儲存解決方案
(3)考慮部署集中化的SAN/NFS來實現高可用性和實時遷移

**KVM儲存模式**
(1)基於檔案系統的儲存
	dir:Filesystem Directory 虛擬檔案系統目錄
	fs:Pre-Formatted Block Device
	netfs:Network Exported Directory
(2) 基於裝置的儲存
	Disk:Physical Disk Device
	Iscsi:iSCSI Target
	logical:LVM Volume Group

**虛擬磁碟型別**
(1) 固定 Fixed
	在配置時,指定磁碟大小
	不管在虛擬磁碟上實際儲存多少資料,都將佔用相同大小主機磁碟空間
(2) 動態 Dynamic
	增長到最大容量,但是隻根據需求使用更多的空間
(3) 差異 Differencing
	因為建立是差異磁碟,所以只儲存變更的資料

**KVM支援的虛擬磁碟型別**
(1) raw
	這並非是一種真正的磁碟格式,而是代表虛擬機器所使用的原始映象;它並不儲存後設資料,因此可以作為保證虛擬機器相容性的候選方案。然而,也正因為它不儲存後設資料;因此不能自持某些高階特性,比如快照和壓縮等。格式簡單,容易轉換為其他的格式。需要檔案系統的支援才能支援sparse file
(2) cow:copy-on-write格式,曇花一現
(3) qcow:QEMU早期的copy-on-write格式,過渡性方案
(4) qcow2
	按需進行分配磁碟空間,不管檔案系統是否支援;支援快照;支援zlib的磁碟壓縮;支援AES的加密
(5) vmdk(Virtual Machine Disk)
	VMware環境當中預設使用的磁碟格式
(6) vhd vhdx(Virtual Hard Disk)

**微軟預設採用的檔案格式**
可以通過qemu-img --help檢視支援的格式
qemu-img --help | grep Supported
#支援的格式: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

使用qemu-img管理虛擬磁碟
qemu-img 是一個功能強制磁碟映象管理工具

(1)常用的命令:
check 檢查完整性
create 建立映象
commit 提交更改
compare 比較
convert 轉換
info 獲得資訊
map 對映
snapshot 快照管理
rebase 在已有的映象的基礎上建立新的映象
resize 調整大小
amend 修訂映象格式選項

(2)建立磁碟格式:只輸入磁碟名和大小建立
qemu-img create t1.img 2g
#Formatting 't1.img', fmt=raw size=2147483648
#預設的磁碟格式fmt=raw

(3)檢視虛擬磁碟的資訊
qemu-img info t1.img 
#image: t1.img  #檔名稱
#file format: raw  #檔案格式
#virtual size: 2.0G (2147483648 bytes)   #虛擬磁碟的大小
#disk size: 0   #磁碟空間尺寸是0

(4)檢查虛擬磁碟
qemu-img check t1.img 
#qemu-img: This image format does not support checks
check一般不支援raw格式,支援其他格式

qemu-img check windowsxp.img 
#No errors were found on the image.
#131072/131072 = 100.00% allocated, 0.00% fragmented, 0.00% compressed clusters
#Image end offset: 8591507456

根據以上測試,預設情況下qemu-img建立的磁碟檔案的型別是動態的(Dynamic 空洞)會根據真實存放資料 的大小進行動態擴容直到磁碟空間設定值的大小。

預分配磁碟策略(qcow2)

(1) off
		預設策略,即不使用預分配策略
(2) metadata
		分配後設資料(metadata),預分配後的虛擬磁碟仍然屬於稀疏映像型別(空洞檔案)
(3) full
		分配所有磁碟空間並置零,預分配後的虛擬磁碟屬於非稀疏映像型別
(4)falloc
		分配檔案的塊並標示它們的狀態為未初始化,相對full模式來說,建立虛擬磁碟的速度要快很多。
preallocation='預分配策略' -- 建立時指定引數
		預分配策略裡,off和metadata預分配策略都屬於空洞檔案,而falloc和full屬於非空洞檔案

登入內嵌的虛擬機器

[root@KVM01 images]# ssh 192.168.122.66
The authenticity of host '192.168.122.66 (192.168.122.66)' can't be established.
ECDSA key fingerprint is SHA256:IVdQC4wtAamQDwOTGFdF7PkJSxMN1UgHlv2g7WE/0qY.
ECDSA key fingerprint is MD5:4a:bc:6f:1c:92:16:80:52:6e:5a:3b:5d:8b:6c:8a:52.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.66' (ECDSA) to the list of known hosts.
root@192.168.122.66's password: 
Last login: Mon Oct 19 20:37:51 2020
[root@kvm03 ~]# exit
登出

虛擬機器的遷移(不同格式虛擬機器的遷移)
1、VMware Workstation虛擬機器中找一個關閉狀態的虛擬機器進行匯出
選擇要匯出的虛擬機器—點選檔案—點選匯出OVF
在這裡插入圖片描述
正在匯出
在這裡插入圖片描述
匯出的磁碟檔案
在這裡插入圖片描述
將磁碟檔案匯入到KVM虛擬機器中
匯入到該路徑下:/var/lib/libvirt/images,注意此時格式為vmdk
在這裡插入圖片描述
進行格式的修改:

qemu-img convert -O qcow2 x3-disk1.vmdk x3-disk1.img

在這裡插入圖片描述

檢視匯入的詳情
qemu-img info KVM02_.44-disk1.img 
#image: KVM02_.44-disk1.img
#file format: qcow2
#virtual size: 80G (85899345920 bytes)
#disk size: 127M
#cluster_size: 65536
#Format specific information:
#   compat: 1.1
#   lazy refcounts: false

建立虛擬機器環境:
virt-install --import --name=KVM02.44 --vcpus=1 --ram=1024 --disk  bus=scsi,path=/var/lib/libvirt/images/KVM02_.44-disk1.img --network type=bridge,source=virbr0 --network network=default --graphics vnc,listen=0.0.0.0 --os-type=linux --os-variant=rhel7 --noautoconsole
#不設定埠,預設5900埠
netstat -lnupt | grep 59
#tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      3562/qemu-kvm  

用VNC連線5900埠的虛擬機器:在這裡插入圖片描述
調整虛擬磁碟的大小(qcow2只能調大)

(1) 語法格式
	qemu-img --help | grep resize resize [-q] filename [+ | -]size
(2) 操作之前,一定要做好資料備份
(3) 增加檔案大小後,需要在客戶機中使用fdisk,parted等分割槽工具進行相應操作才能真正讓客戶機使用到增加後的映象空間。
(4) 縮小映象之前,要在客戶機中保證裡面的檔案系統有空餘空間,否則會資料丟失
(5) qcow2不支援縮小映象的操作

qemu-img resize KVM02_.44-disk1.img +1G
qemu-img info KVM02_.44-disk1.img   #檢視是否修改成功

儲存池
儲存池的基礎概念
(1) libvirt可以以儲存池的形式對儲存進行統一管理,簡化操作
(2) 對於虛擬機器操作來說,儲存池和卷並不是必須的
(3) 支援以下儲存池

dir:Filesystem Directory   #檔案系統目錄
disk:Physical Disk Device   #磁碟裝置
fs:Pre-Formatted Block Device  
gluster:Gluster FileSystem
iscsi:iSCSI Target
logical:LVM Volume Group
mpath:Multipath Device Enumerator  #多路徑裝置
netfs:Network Export Directory
rbd:RADOS Block Device/Ceph
scsi:SCSI Host Adapter
sheepdog:Sheepdog Filesystem

儲存池的相關命令
在這裡插入圖片描述
儲存池建立:

顯示池與卷的資訊 # virsh pool-list --help
檢視所有的儲存池 # virsh pool-list
檢視某個儲存池的詳細資訊 # virsh pool-list
檢視某個儲存池中的所有儲存卷 # virsh vol-list vm
檢視所有的儲存池 # virsh pool-list
檢視某個儲存池的詳細資訊 # virsh pool-list
檢視某個儲存池中的所有儲存卷 # virsh vol-list vm
**1、基於目錄的儲存池**
(1) 準備目錄
# mkdir /guest_images 
(2)設定目錄許可權
# chown root:root /guest_images/ 
# chmod 700 /guest_images
(3)通過virsh建立一個自定義儲存池
# virsh pool-define-as guest_images dir --target "/guest_images"
(4)啟動儲存池
# virsh pool-start guest_images
(5)刪除自定義的儲存池
# virsh pool-destroy guest_images #銷燬池 
# virsh pool-delete guest_images #刪除池目錄 
# virsh pool-undefine guest_images #清除儲存池配置檔案

**2、基於分割槽的儲存池**
(1)libvirtd會自動mount分割槽
(2) 準備分割槽並建立檔案系統
# fdisk /dev/sdb
# mkfs.xfs /dev/sdb1
(3)通過virsh建立:
Source Path:塊裝置名
Target Path:mount到的目錄名
# virsh pool-define-as guest_images_fs fs --source-dev "/dev/sdb1" --target "/guest_images2" 
# virsh pool-build guest_images_fs #建立儲存池儲存目錄 
# virsh pool-start guest_images_fs #啟動儲存 
# virsh pool-autostart guest_images_fs #標記儲存池開機自啟動 
# mount | grep /dev/sdb1 #已經自動掛載 
/dev/sdb1 on /guest_images2 type xfs (rw,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)
例如:
[root@KVM01 ~]# virsh pool-define-as guest_images_fs fs --source-dev "/dev/sdb1" --target "/guest_images2"
定義池 guest_images_fs

[root@KVM01 ~]# virsh pool-build guest_images_fs 
構建池 guest_images_fs

[root@KVM01 ~]# virsh pool-start guest_images_fs 
池 guest_images_fs 已啟動

[root@KVM01 ~]# virsh pool-autostart guest_images_fs 
池 guest_images_fs 標記為自動啟動

[root@KVM01 ~]# mount | grep /dev/sdb1
/dev/sdb1 on /guest_images2 type xfs (rw,nosuid,nodev,noexec,relatime,seclabel,attr2,inode64,noquota)
[root@KVM01 ~]# virsh pool-list 
 名稱               狀態     自動開始
-------------------------------------------
 guest_images_fs      活動     是       
 images               活動     是       
 iso                  活動     是       

[root@KVM01 ~]# virsh pool-destroy guest_images_fs 
銷燬池 guest_images_fs

[root@KVM01 ~]# virsh pool-delete guest_images_fs 
池 guest_images_fs 被刪除

[root@KVM01 ~]# virsh pool-undefine guest_images_fs 
池 guest_images_fs 已經被取消定義


**3、基於LVM的儲存池**
(1) 基於LVM的儲存池要求使用全部磁碟分割槽
(2) 建立時儲存池,有兩種方法
使用現有的VG
建立新的VG
Target Path:新的卷組名
Source Path:儲存裝置的位置
Build Pool:會建立新的VG
(3)通過virsh命令建立vg並建立基於LVM的儲存池
# virsh pool-define-as guest_images_lvm3 logical --source-dev=/dev/sdc --source- name=libvirt_lvm --target=/dev/libvirt_vg
(4)virsh命令建立卷組libvirt_lvm
# virsh pool-build guest_images_lvm3
(5)啟動LVM儲存池並標記開機自啟動
# virsh pool-start guest_images_lvm3 
# virsh pool-autostart guest_images_lvm3

**4、基於NFS的儲存池**
(1)# virsh pool-define-as --name nfstrial2 --type netfs --source-host 192.168.150.132 --source-path /nfsshare --target /nfstrial2

[root@KVM01 ~]# systemctl is-active firewall.sevice
#關閉防火牆
[root@KVM01 ~]# sed -i '/^SELINUX=/ cSELINUX=disable'  /etc/selinux/config 
#禁用SELinux
[root@KVM01 ~]# setenforce 0
#臨時禁用SELinux
[root@KVM01 ~]# yum install -y nfs-utils rpcbind
#下載NFS包
[root@KVM01 ~]# setenforce 0
#建立一個目錄
[root@KVM01 ~]# vim /etc/exports
/vm  192.168.16.0/24(rw,sync,all_squash,anonuid=0,anongid=0)
#共享/vm 目錄
[root@KVM01 ~]# mkdir /vm
#建立/VM 目錄
[root@KVM01 ~]# systemctl restart rpcbind
[root@KVM01 ~]# systemctl restart nfs-server.service 
#重啟rpcbind nfs服務
[root@KVM01 ~]# showmount -e localhost
Export list for localhost:
/vm 192.168.16.0/24
#檢視是否成功

[root@KVM01 ~]#  virsh pool-define-as --name nfstrial2 --type netfs --source-host 192.168.16.55 --source-path /nfsshare --target /nfstrial2
定義池 nfstrial2

分割槽並建立檔案系統
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

儲存卷
(1)儲存池被分割為儲存卷(Storage Volume)
(2)儲存卷
檔案
塊裝置(如物理分割槽,LVM邏輯卷等)
libvirt管理的其他型別儲存的抽象

儲存卷的相關命令
在這裡插入圖片描述
儲存卷的建立

**基於目錄建立vm儲存池**
[root@KVM01 ~]# virsh pool-define-as vm dir --target "/vm"
定義池 vm
[root@KVM01 ~]# mkdir /vm
[root@KVM01 ~]# virsh pool-build vm 
構建池 vm
[root@KVM01 ~]# virsh pool-start vm 
池 vm 已啟動
[root@KVM01 ~]# virsh pool-autostart vm
池 vm 標記為自動啟動
[root@KVM01 ~]# virsh pool-list 
 名稱               狀態     自動開始
-------------------------------------------
 images               活動     是       
 iso                  活動     是       
 vm                   活動     是 

**基於目錄的儲存池中的儲存卷管理**
(1)向vm儲存池中建立一個儲存卷
[root@KVM01 ~]# virsh vol-create-as vm test1.qcow2 1G --format qcow2
建立卷 test1.qcow2
(2)檢視test1.qcow2的卷資訊:兩種方式
方式一:
	[root@KVM01 ~]# virsh vol-info /vm/test1.qcow2 
方式二:
	[root@KVM01 ~]# virsh vol-info test1.qcow2 --pool vm

**儲存卷的克隆**
[root@KVM01 ~]# virsh vol-clone test1.qcow2 test2.qcow2 --pool vm
使用 test2.qcow2 克隆的卷 test1.qcow2 
[root@KVM01 ~]# virsh vol-info test2.qcow2 --pool vm
名稱:       test2.qcow2
型別:       檔案
容量:       1.00 GiB
分配:       196.00 KiB

**刪除基於目錄的儲存池的儲存卷**
[root@KVM01 vm]# virsh vol-delete /vm/test2.qcow2 /vm/test2.qcow2 被刪除
[root@KVM01 vm]# virsh vol-delete /vm/test1.qcow2 /vm/test1.qcow2 被刪除

管理快照

**快照概念**
(1)磁碟快照
	對磁碟資料進行快照
	主要用於虛擬機器備份等場合
(2)記憶體快照
	對虛擬機器的記憶體/裝置資訊進行儲存
	該機制同時用於休眠恢復,遷移等場景
	主要使用virsh save(qemu migrate to file)實現,只能對執行的虛擬機器進行
(3)檢查點快照
	同時儲存虛擬機器的磁碟快照和記憶體快照
	用於將虛擬機器恢復到某個時間點
	可以保證資料的一致性

**磁碟快照分類**
(1) 按快照資訊儲存分為:
	內建快照:快照資料和base磁碟資料放在一個qcow2檔案中
	外接快照:快照資料單獨的qcow2檔案存放
(2)按虛擬機器狀態可以分為:
	關機態快照:資料可以保持一致性
	執行態快照:資料無法保持一致性,類似與系統crash後的磁碟資料。使用是可能需要fsck等操作。
(3)按磁碟數量可以分為:
	單盤:單盤快照不涉及原子性
	多盤:涉及原子性。主要分兩個方面:1,是所有盤快照點相同 2,所有盤要麼都快照成功,要麼都快
	     照失敗。主要依賴於qemu的transaction實現

**格式**
[root@KVM01 vm]# qemu-img --help | grep snapshot
  snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
  '-a'  #快照回滾
  '-c'  #建立快照
  '-d'  #刪除快照
  '-l'  #顯示快照列表
[root@KVM01 images]# qemu-img snapshot -c s1  centos7u6.img
[root@KVM01 images]# qemu-img snapshot -l centos7u6.img
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         s1                        0 2020-10-21 20:17:03   00:00:00.000
[root@KVM01 images]# qemu-img snapshot -d s1 centos7u6.img
 #刪除快照
[root@KVM01 images]# qemu-img snapshot -a s1 centos7u6.img 
#在虛擬機器中刪除一個檔案然後進行磁碟迴滾
注:進行磁碟快照回滾時需要關閉虛擬機器,回滾後,資料已經恢復qemu-img方式的磁碟快照只能支援原生態的qcow2格式,不支援從raw格式轉換而來的qcow2不然會出現問題

相關文章