在 libvirt 上使用 LVM 存放裝置

來源:互聯網
上載者:User

簡介: 本文闡述了 libvirt 中管理及使用 LVM 儲存池的方法,並展示了 qemu 虛擬機器使用 LVM 儲存的方法。

轉載地址:http://www.ibm.com/developerworks/cn/linux/l-cn-libvirt-lvm/index.html

引言

libvirt 是一組可與 Linux 上多種虛擬機器互動的管理工具集。它支援的虛擬機器有 KVM/QEMU、Xen、LXC、OpenVZ、virtual Box、vmware ESX/GSX、Hyper-V 等。為了使虛擬機器獲得更強大的後端儲存能力,libvirt 提供了對各種儲存介質的支援,包括本地檔案系統,網路檔案系統,iSCSI,LVM 等多種後端儲存系統。LVM(Linux 卷管理)系統是如今 Linux 伺服器廣泛使用的存放裝置。本文闡述的方法適用於 KVM/QEMU 虛擬機器,主要涉及在 libvirt
中使用 LVM 存放裝置的方法,使用基於 libvirt 的命令列虛擬機器管理工具 virsh。

libvirt 中的儲存管理獨立於虛擬機器管理。也就是儲存池和儲存卷的操作獨立於虛擬機器的操作存在,因此進行儲存管理時,不需要有虛擬機器的存在,可以當虛擬機器需要儲存資源時再進行分配,非常靈活。

回頁首

libvirt 支援後端儲存的類型

為了將不同的後端存放裝置以統一的介面供虛擬機器使用,libvirt 將儲存管理分為兩個方面:儲存卷 (volume) 和儲存池 (pool)。

儲存卷是一種可以分配給虛擬機器使用的存放裝置。在虛擬機器中與一個掛載點對應,而物理上可以是一個虛擬機器磁碟檔案或一個真實的磁碟分割。

儲存池是一種可以從中產生儲存卷的儲存資源,後端可以支援以下儲存介質:

  • 目錄池:以主機的一個目錄作為儲存池,這個目錄中包含檔案的類型可以為各種虛擬機器磁碟檔案、鏡像檔案等。
  • 本地檔案系統池:使用主機已經格式化好的塊裝置作為儲存池,支援的檔案系統類型包括 ext2,ext3,vfat 等。
  • 網路檔案系統池:使用遠端網路檔案系統伺服器的匯出目錄作為儲存池。預設為 NFS 網路檔案系統。
  • 邏輯卷池:使用已經建立好的 LVM 卷組,或者提供一系列產生卷組的源裝置,libvirt 會在其上建立卷組,產生儲存池。
  • 磁碟卷池:使用磁碟作為儲存池。
  • iSCSI 卷池:使用 iSCSI 裝置作為儲存池。
  • SCSI 卷池:使用 SCSI 裝置作為儲存池。
  • 多路裝置池:使用多路裝置作為儲存池。

回頁首

Libvirt 中儲存物件的狀態轉換

Libvirt 中的三類儲存物件:儲存池、儲存卷、裝置的狀態轉換關係 1 所示。

圖 1.libvirt 中儲存物件狀態轉換圖

儲存卷從儲存池中劃分出來,儲存卷分配給虛擬機器成為可用的存放裝置。儲存池在 libvirt 中分配的 id 標誌著它成為 libvirt 可管理的對象,產生卷組 vg(volume group) 就有了可劃分儲存卷的儲存池,狀態為活躍 (active) 狀態才可以執行劃分儲存卷的操作。

回頁首

libvirt 使用邏輯卷池的準備

重新設定和編譯

由於 libvirt 預設編譯不支援 LVM,因此需要重新編譯 libvirt 方可使用。使用 --with-storage-lvm 選項重新設定 libvirt 源碼並重新編譯 libvirt:

清單 1. 重新編譯 libvirt

 $./autogen.sh --with-storage-lvm – system  $make 

準備產生卷組的物理磁碟

在 host 中使用 fdisk 工具將物理卷格式化為 Linux LVM 格式(ID 為 8e)。產生的物理卷應為以下格式:

清單 2. 物理卷格式

 $sudo fdisk -l  /dev/sdc1 1 478 963616+ 8e Linux LVM  /dev/sdc2             479         957      965664   8e  Linux LVM 

準備產生儲存池的 xml 檔案

將 xml 檔案放在主機目錄 /etc/libvirt/storage 下。以下給出 xml 檔案的例子:

清單 3. 產生儲存池的 xml 檔案

 <pool type="logical">  <name>lvm_pool</name>  <source>  <device path="/dev/sdc1"/>  <device path="/dev/sdc2"/>  </source>  <target>  <path>/lvm_pool</path>  </target>  </pool> 

pool 的類型為 logical 表示使用的儲存池類型為 LVM,源路徑為在 host 中物理卷所在的路徑,目的路徑為 host 機中產生儲存池的目標映射路徑,後續產生的邏輯卷將在 host 的該目錄下。

回頁首

建立 libvirt 儲存池

首次建立儲存池

先由之前的 xml 檔案定義一個儲存池,若 libvirtd 啟動之前 xml 檔案已在 /etc/libvirt/storage 目錄下,則 libvirtd 啟動之後會自動定義儲存池,可省去此步。

清單 4. 定義儲存池

 $virsh pool-define /etc/libvirt/storage/lvm_pool.xml 

完成後就會在 libvirt 中定義一個不活躍的儲存池,但這個池對應的卷組還未被初始化。可以看到產生的池狀態為不活躍的:

清單 5. 查看卷組的狀態

 $virsh pool-list – all 名稱 狀態 自動開始 -----------------------------------------  default 活動 yes  directory_pool 活動 yes  lvm_pool            不活躍     no 

建立儲存池將產生儲存池對應的卷組。

清單 6. 建立儲存池

 $virsh pool-build lvm_pool 

此步完成後, host 上就產生了一個名為 lvm_pool 的卷組。

清單 7. 查看 host 上產生的卷組

 $sudo vgdisplay  --- Volume group ---  VG Name lvm_pool  System ID  Format                lvm2 

以下命令在需要使用儲存池時讓儲存池處於活躍狀態

清單 8. 開始儲存池

 $virsh pool-start lvm_pool 

建立儲存池

建立儲存池的操作相當於 pool-define 操作和 pool-start 操作的組合,也就是說,建立操作適用於卷組已經產生但還沒有在 libvirt 中被管理起來的情況。

清單 9. 建立儲存池

 $virsh pool-create /etc/libvirt/storage/lvm_pool.xml 

清單 10. 完成建立後的狀態

 $virsh pool-list 名稱 狀態 自動開始 -----------------------------------------  default 活動 yes  directory_pool 活動 yes  lvm_pool            活動     no 

回頁首

從儲存池中分配卷

儲存池為活躍的且已經產生了對應的卷組時,便可從儲存池中劃分邏輯卷供後續使用。

清單 11. 建立卷

 $virsh vol-create-as --pool lvm_pool --name vol3 --capacity 30M 

其中 --pool 指定分配邏輯卷所屬儲存池(卷組),name 指定邏輯卷名稱,capacity 指定分配的卷大小。

清單 12. 查看儲存池中的卷組

 virsh # vol-list pic_pool2 名稱 路徑  -----------------------------------------  vol1 /dev/lvm_pool/vol1  vol2 /dev/lvm_pool2/vol2  vol3                 /dev/lvm_pool2/vol3 

回頁首

在虛擬機器中使用卷

清單 13. 將卷分配給虛擬機器

 $virsh attach-disk – domain dom1 – -source /dev/pic_pool2/vol1 – -target sda 

其中 domain 選項指定邏輯卷要附加的虛擬機器,source 選項指定邏輯卷在主機的路徑,target 指定在虛擬機器中的裝置名稱。

這一步完成之後,重啟虛擬機器就可以在虛擬機器中看到 /dev/sda 裝置。在虛擬機器中這個 /dev/sda 是一個裸裝置,只需要進一步分區格式化就可以掛載使用了。

清單 14. 查看卷分配是否成功

 $virsh domblklist dom1  Target Source  ------------------------------------------------  vda /var/lib/libvirt/images/redhat2.img  hdc -  sda        /dev/pic_pool2/vol3 

清單 15. 將卷從虛擬機器上分離

 virsh # detach-disk – -domain dom1 --target sda 

這時在虛擬機器上就看不到 /dev/sda 裝置了,邏輯卷已從虛擬機器中成功分離。

回頁首

刪除儲存池中的卷

卷被刪除之後,卷所對應的儲存空間即被歸還到儲存池內。

清單 16. 刪除儲存池中的卷

 virsh # vol-delete vol3 --pool pic_pool2 卷 vol3 被刪除

回頁首

儲存池的停用、刪除和取消定義

停用儲存池

儲存池停止使用之後,它上面的所有儲存卷的狀態都變得不可用,即使用它的虛擬機器都看不見這個裝置。也不能從這個儲存池中建立新卷。

清單 17. 停用儲存池

 virsh # pool-destroy pic_pool2 銷毀池 pic_pool2 

刪除儲存池

徹底刪除一個儲存池後,libvirt 就不再管理這個儲存池所對應的所有資源,儲存池在 host 機中對應的卷組也被刪除。

清單 18. 刪除儲存池

 virsh # pool-delete pic_pool2 池 pic_pool2 被刪除

取消儲存池定義

即使刪除了儲存池,它仍然在 libvirt 儲存驅動中佔有一定的資源,可以看到這個池。

清單 19. 刪除儲存池後的狀態

 $virsh pool-list – all 名稱 狀態 自動開始 -----------------------------------------  default 活動 yes  directory_pool 活動 yes  lvm_pool            不活躍     no 

使用 pool-undefine 取消儲存池的定義後,儲存池所佔用的資源完全被釋放,儲存磁碟機中查看不到該儲存池的存在了。

清單 20. 取消儲存池定義

 $virsh pool-undefine lvm_pool 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.