LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。比如說我增加一個物理硬盤,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。
LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。 基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理卷到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
LVM對LV提供的快照功能,只對LVM有效。
當一個snapshot創建的時候,僅拷貝原始卷裡數據的元數據(meta-data)。創建的時候,並不會有數據的物理拷貝,因此snapshot的創建幾乎是實時的,當原始卷上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始卷上將要改變的數據在改變之前被拷貝到snapshot預留的空間裡,因此這個原理的實現叫做寫時復制(copy-on-write)。
在寫操作寫入塊之前,將原始數據移動到 snapshot空間裡,這樣就保證了所有的數據在snapshot創建時保持一致。而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始卷上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。
創建snapshot的大小並不需要和原始卷一樣大,其大小僅僅只需要考慮兩個方面:從shapshot創建到釋放這段時間內,估計塊的改變量有多大;數據更新的頻率。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那麼這個snapshot立刻被釋放,從而無法使用,從而導致這個snapshot無效。
在快照創建的時候,僅拷貝原始卷裡數據的元數據(meta-data),並生成位圖記錄原始卷的塊數據變化。
在創建完快照後,對原始卷的讀寫請求處理流程如下。
1,寫原始卷 在原始卷的寫入數據
1) 檢查Chunk位圖中要寫入數據所在的Chunk所對應的bitmap是否被置位; 2) 如果已被置位,直接寫入該Chunk;如果未被置位,將拷貝該Chunk的數據到快照備份卷;
3) 將Chunk位圖中對應的bitmap置位。 4) 將數據寫入原始卷。
2,讀原始卷
直接從原始卷對應的Chunk中讀取數據。
1,讀快照
在處理快照的讀請求時,檢查Chunk位圖是否置位,如果置位從快照讀取數據;如果未置位,則從原始卷讀取數據。如下圖所示:
2,寫快照
在處理快照的寫請求時,
1) 檢查Chunk位圖是否置位,如果置位直接寫快照;
2) 如果未置位,則從原始卷讀取該Chunk的數據,拷貝到快照卷; 3) 將Chunk位圖中對應的位圖置位; 4) 將數據寫入快照卷。
1) 創建1G大小的LV,名稱為lvData1,在該lv上創建文件系統,並創建文件。
2) 創建500M大小的快照LV(lvcreate –L 500M -s -n snaplv /dev/vg/lvData1),名稱為snaplv。
創建過程很快,可以看到該LV的LVSize和原始卷是一樣的,多了一些快照的屬性,其LV snapshot status 為active,distination為LVData1。
3) 在原始卷lvData1中寫入新的文件,可以看到快照卷的Allocated to snapshot 會逐漸
變大。
如何調整LVM 邏輯分區的大小? http://www.linuxidc.com/Linux/2016-06/132709.htm
LVM2詳解 http://www.linuxidc.com/Linux/2015-09/122976.htm
Ubuntu 上使用 LVM 輕松調整分區並制作快照 http://www.linuxidc.com/Linux/2015-09/122563.htm
使用LVM創建彈性磁盤存儲——第一部分 http://www.linuxidc.com/Linux/2014-10/107697.htm
在Linux中擴展/縮減LVM(第二部分) http://www.linuxidc.com/Linux/2014-10/107786.htm
在 LVM中 錄制邏輯卷快照並恢復(第三部分) http://www.linuxidc.com/Linux/2014-11/108867.htm
在LVM中設置精簡資源調配卷(第四部分) http://www.linuxidc.com/Linux/2014-11/109757.htm
使用條塊化I/O管理多個LVM磁盤(第五部分) http://www.linuxidc.com/Linux/2014-12/110532.htm