歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 基於LVM的快照實現原理分析

基於LVM的快照實現原理分析

日期:2017/2/28 13:48:36   编辑:Linux教程

1.LVM介紹

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。

LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。比如說我增加一個物理硬盤,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。

LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。 基本的邏輯卷管理概念:

PV(Physical Volume)- 物理卷

物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid備。

VG(Volumne Group)- 卷組

卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理卷到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。

LV(Logical Volume)- 邏輯卷

邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。

2,LVM快照原理

LVM對LV提供的快照功能,只對LVM有效。

當一個snapshot創建的時候,僅拷貝原始卷裡數據的元數據(meta-data)。創建的時候,並不會有數據的物理拷貝,因此snapshot的創建幾乎是實時的,當原始卷上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始卷上將要改變的數據在改變之前被拷貝到snapshot預留的空間裡,因此這個原理的實現叫做寫時復制(copy-on-write)。

在寫操作寫入塊之前,將原始數據移動到 snapshot空間裡,這樣就保證了所有的數據在snapshot創建時保持一致。而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始卷上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。

創建snapshot的大小並不需要和原始卷一樣大,其大小僅僅只需要考慮兩個方面:從shapshot創建到釋放這段時間內,估計塊的改變量有多大;數據更新的頻率。一旦 snapshot的空間記錄滿了原始卷塊變換的信息,那麼這個snapshot立刻被釋放,從而無法使用,從而導致這個snapshot無效。

2.1 創建快照

在快照創建的時候,僅拷貝原始卷裡數據的元數據(meta-data),並生成位圖記錄原始卷的塊數據變化。

2.2 讀寫原始卷

在創建完快照後,對原始卷的讀寫請求處理流程如下。

1,寫原始卷 在原始卷的寫入數據

1) 檢查Chunk位圖中要寫入數據所在的Chunk所對應的bitmap是否被置位; 2) 如果已被置位,直接寫入該Chunk;如果未被置位,將拷貝該Chunk的數據到快照備份卷;

3) 將Chunk位圖中對應的bitmap置位。 4) 將數據寫入原始卷。

2,讀原始卷

直接從原始卷對應的Chunk中讀取數據。

2.3 讀寫快照

1,讀快照

在處理快照的讀請求時,檢查Chunk位圖是否置位,如果置位從快照讀取數據;如果未置位,則從原始卷讀取數據。如下圖所示:

2,寫快照

在處理快照的寫請求時,

1) 檢查Chunk位圖是否置位,如果置位直接寫快照;

2) 如果未置位,則從原始卷讀取該Chunk的數據,拷貝到快照卷; 3) 將Chunk位圖中對應的位圖置位; 4) 將數據寫入快照卷。

3,LVM快照實驗

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

Copyright © Linux教程網 All Rights Reserved