LVM

對磁碟分區進行管理的機制

LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁碟分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。

Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬碟空間。普通的磁碟分區管理方式在邏輯分區劃分好之後就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁碟上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶在無需停機的情況下可以方便地調整各個分區大小。

前言


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

簡介


邏輯卷管理器(LogicalVolumeManager)本質上是一個虛擬設備驅動,是在內核中塊設備和物理設備之間添加的一個新的抽象層次,如圖所示。它可以將幾塊磁碟(物理卷,PhysicalVolume)組合起來形成一個存儲池或者卷組(VolumeGroup)。LVM可以每次從卷組中劃分出不同大小的邏輯卷(LogicalVolume)創建新的邏輯設備。底層的原始的磁碟不再由內核直接控制,而由LVM層來控制。對於上層應用來說卷組替代了磁碟塊成為數據存儲的基本單元。LVM管理著所有物理卷的物理盤區,維持著邏輯盤區和物理盤區之間的映射。LVM邏輯設備向上層應用提供了和物理磁碟相同的功能,如文件系統的創建和數據的訪問等。但LVM邏輯設備不受物理約束的限制,邏輯卷不必是連續的空間,它可以跨越許多物理卷,並且可以在任何時候任意的調整大小。相比物理磁碟來說,更易於磁碟空間的管理。
從用戶態應用來看,LVM邏輯卷相當於一個普通的塊設備,對其的讀寫操作和普通的塊設備完全相同。而從物理設備層來看,LVM相對獨立於底層的物理設備,並且屏蔽了不同物理設備之間的差異。因而在LVM層上實現數據的連續保護問題,可以不需要單獨考慮每一種具體的物理設備,避免了在數據複製過程中因物理設備之間的差異而產生的問題。從LVM的內核實現原理上看,LVM是在內核通用塊設備層到磁碟設備驅動層的請求提交流之間開闢的另外一條路徑,即在通用塊設備層到磁碟設備驅動層之間插入了LVM管理映射層用於截獲一定的請求進行處理,如圖所示。
用戶通過lvm提供介面,依靠內核創建一系列LVM邏輯卷,所有對lvm邏輯卷的讀寫操作最終都會由LVM在通用塊設備層下方截獲下來,進行更進一步的處理。這裡的進一步處理主要指的是完成寫請求的映射,是將請求的數據根據實際情況進行一些拆分和重定位操作,從而可以將請求和數據分發到實際的物理設備中去。
LVM
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
每一個物理卷PV被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM定址的最小單元。PE的大小是可配置的,默認為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
*邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分為可被定址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應
圖所示LVM抽象模型,展示了PV、VG、LV三者之間關係:
LVM
LVM
和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理捲起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系統啟動LVM時激活VG,並將VGDA載入至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。

處理流程


從讀寫請求處理流程上看,支持邏輯卷管理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映射層設計一定的策略和機制,實現連續數據保護功能。

優點


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