首頁 > 軟體

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

2020-06-16 17:32:12

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-09/135484.htm


IT145.com E-mail:sddin#qq.com