複製鏈接
請複製以下鏈接發送給好友

LVM

鎖定
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用户安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好之後就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨着Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用户在無需停機的情況下可以方便地調整各個分區大小。
中文名
邏輯卷管理
外文名
Logical Volume Manager
簡    稱
LVM
最新版本
穩定版1.0.5
分    類
計算技術語
作    用
磁盤分區

LVM前言

LVM模型 LVM模型
每個Linux使用者在安裝Linux時都會遇到這樣的困境:在為系統分區時,如何精確評估和分配各個硬盤分區的容量,因為系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因為如果估 計不準確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然後恢復數據到新分區。
雖然有很多動態調整磁盤的工具可以使用,例如PartitionMagic等等,但是它並不能完全解決問題,因為某個分區可能會再次被耗盡;另外一個方面這需要 重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解 決問題。
因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,LogicalVolumeManager)機制就是一個完美的解決方案。

LVM簡介

邏輯卷管理器(LogicalVolumeManager)本質上是一個虛擬設備驅動,是在內核中塊設備和物理設備之間添加的一個新的抽象層次,如圖4-1所示。它可以將幾塊磁盤(物理卷,PhysicalVolume)組合起來形成一個存儲池或者卷組(VolumeGroup)。LVM可以每次從卷組中劃分出不同大小的邏輯卷(LogicalVolume)創建新的邏輯設備。底層的原始的磁盤不再由內核直接控制,而由LVM層來控制。對於上層應用來説卷組替代了磁盤塊成為數據存儲的基本單元。LVM管理着所有物理卷的物理盤區,維持着邏輯盤區和物理盤區之間的映射。LVM邏輯設備向上層應用提供了和物理磁盤相同的功能,如文件系統的創建和數據的訪問等。但LVM邏輯設備不受物理約束的限制,邏輯卷不必是連續的空間,它可以跨越許多物理卷,並且可以在任何時候任意的調整大小。相比物理磁盤來説,更易於磁盤空間的管理。 [1] 
圖4-1 圖4-1
從用户態應用來看,LVM邏輯卷相當於一個普通的塊設備,對其的讀寫操作和普通的塊設備完全相同。而從物理設備層來看,LVM相對獨立於底層的物理設備,並且屏蔽了不同物理設備之間的差異。因而在LVM層上實現數據的連續保護問題,可以不需要單獨考慮每一種具體的物理設備,避免了在數據複製過程中因物理設備之間的差異而產生的問題。從LVM的內核實現原理上看,LVM是在內核通用塊設備層到磁盤設備驅動層的請求提交流之間開闢的另外一條路徑,即在通用塊設備層到磁盤設備驅動層之間插入了LVM管理映射層用於截獲一定的請求進行處理,如圖4-2所示。 [1] 
圖4-2 圖4-2
用户通過lvm提供接口,依靠內核創建一系列LVM邏輯卷,所有對lvm邏輯卷的讀寫操作最終都會由LVM在通用塊設備層下方截獲下來,進行更進一步的處理。這裏的進一步處理主要指的是完成寫請求的映射,是將請求的數據根據實際情況進行一些拆分和重定位操作,從而可以將請求和數據分發到實際的物理設備中去。 [1] 

LVM基本術語

前面談到,LVM是在磁盤分區和文件系統之間添加的一個邏輯層,來為文件系統屏蔽下層磁盤分區佈局,提供一個抽象的存儲卷,在存儲捲上建立文件系統。首先我們討論以下幾個LVM術語:
  • 物理存儲介質(PhysicalStorageMedia)
指系統的物理存儲設備:磁盤,如:/dev/hda、/dev/sda等,是存儲系統最底層的存儲單元
  • 物理卷(Physical Volume,PV)
指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
  • 卷組(Volume Group,VG)
類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。
  • 邏輯卷(Logical Volume,LV)
類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。
  • 物理塊(Physical Extent,PE)
PE是物理卷PV的基本劃分單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
  • 邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分為可被尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
圖1所示LVM抽象模型,展示了PV、VG、LV三者之間關係:
圖1 LVM抽象模型 圖1 LVM抽象模型
和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理捲起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系統啓動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。

LVM處理流程

從讀寫請求處理流程上看,支持邏輯卷管理LVM機制的Linux的I/O子系統對邏輯卷請求的處理流程大致如下:
(1) 文件系統首先調用具體的文件讀寫過程,將偏移和文件的起始位置轉換為具體文件系統的數據塊,同時將這些信息以buffer-head結構的形式傳遞到文件緩衝層(BUFFER層)。
(2) 緩衝層根據數據塊的邏輯設備號和塊號,將buffer-head結構轉換成一個代表請求的bio結構,發向ivm映射層。
(3)Lvm內核處理程序,分析該請求,同時根據需要決定是否進行一些拆分操作,將該拆分後的請求轉化到各自對應的磁盤,並將轉換後的請求掛到真正的設備上。
(4) 最後由磁盤驅動程序完成讀寫過程,然後再將處理後的結構依次上上層傳送到達文件系統。
上圖中,ll-rw-block ()是文件系統和塊設備的請求傳遞接口,所有塊設備的讀寫請求都會首先由這個函數進行處理。文件系統提供給ll-rw-block ()的是一個buffer-head的數組,ll-rw-block ()對其中的每一個buffer_head結構調用submit_bh,將每一個buffer-head緩存結構封裝成bio請求結構,然後調用submit—bio下發到具體的塊設備。submit—bio會調用一個通用的generic_make_request 0方法,根據bio結構中指定的設備,調用該設備隊列的make_request函數將請求掛載到相應的設備隊列中去。對於LVM映射驅動來説,邏輯卷lvm設備隊列的make_request函數就是lvm_make_request_fn。也就是説,對LVM的讀寫操作最終都會在這個地方被截獲處理。內核在這裏完成請求的拆分和重定向工作,進而調用generic make request重新確定請求的發送設備,通過具體設備隊列操作函數make_request將請求發送到實際物理快設備中去。SnapCDP的主要工作就是在LVM映射層設計一定的策略和機制,實現連續數據保護功能。 [1] 

LVM優點

LVM通常用於裝備大量磁盤的系統,但它同樣適於僅有一、兩塊硬盤的小系統。
小系統使用LVM的益處
傳統的文件系統是基於分區的,一個文件系統對應一個分區。這種方式比較直觀,但不易改變:
1.不同的分區相對獨立,無相互聯繫,各分區空間很易利用不平衡,空間不能充分利用;
2.當一個文件系統/分區已滿時,無法對其擴充,只能採用重新分區/建立文件系統,非常麻煩;或把分區中的數據移到另一個更大的分區中;或採用符號連接的方式使用其它分區的空間。
3.如果要把硬盤上的多個分區合併在一起使用,只能
LVM LVM
採用再分區的方式,這個過程需要數據的備份與恢復。當採用LVM時,情況有所不同:
1.硬盤的多個分區由LVM統一為卷組管理,可以方便的加入或移走分區以擴大或減小卷組的可用容量,充分利用硬盤空間;
2.文件系統建立在邏輯捲上,而邏輯卷可根據需要改變大小(在卷組容量範圍內)以滿足要求;
3.文件系統建立在LVM上,可以跨分區,方便使用;
大系統使用LVM的益處
在使用很多硬盤的大系統中,使用LVM主要是方便管理、增加了系統的擴展性。
在一個有很多不同容量硬盤的大型系統中,對不同的用户的空間分配是一個技巧性的工作,要在用户需求與實際可用空間中尋求平衡。
用户/用户組的空間建立在LVM上,可以隨時按要求增大,或根據使用情況對各邏輯捲進行調整。當系統空間不足而加入新的硬盤時,不必把用户的數據從原硬盤遷移到新硬盤,而只須把新的分區加入卷組並擴充邏輯卷即可。同樣,使用LVM可以在不停服務的情況下。把用户數據從舊硬盤轉移到新硬盤空間中去。
參考資料
  • 1.    王鋒.基於LVM的連續數據保護系統的設計與實現[D].天津:南開大學,2008. DOI:10.7666/d.y1379875.