我們在使用linux的時候,有的時候會發現系統盤不夠用的情況。如果系統盤或者其它盤能夠做到彈性就好了。也就是需要更多空間的時候可以動態擴容,而不需要的時候可以縮容。
有一種方法就是通過SAN存儲,因為存儲系統天然具有擴容和縮容的功能特性。但是SAN存儲需要一個獨立的設備,而且價格也很高,不太現實。其實在Linux中我們可以通過軟件實現,這就是Linux強大的地方。今天我們就介紹一下這方面的內容。
LVM的整體架構
在Linux實現動態擴容和縮容特性的軟件稱為LVM,其全稱是Logical Volume Manager,也就是邏輯卷管理。LVM不僅僅可以實現動態擴容和縮容,還可以實現其它一些特性,比如條帶化卷,鏡像卷等等。LVM的整體架構如圖所示。
通過上圖可以看到,LVM包含3個基本的概念,分別是Physical Volume(PV),Volume Group(VG)和Logical Volume (LV)。我們分別介紹一下這個三個概念。
物理卷(Physical Volume)
物理卷對應著一個塊設備,可以是整個磁盤,或者是磁盤分區。物理卷通過pvcreate創建,本質上是想塊設備寫入一些元數據。
卷組(Volume Group)
卷組是多個物理卷的集合,當我們創建一個卷組的時候需要指定包含的物理卷。此時,實際上是構建了一個物理卷的資源池。當后面創建邏輯卷的時候會從該資源池分配資源。
邏輯卷(Logical Volume)
邏輯卷本身是一個塊設備,是用戶看到的部分,我們可以將邏輯卷理解為一個硬盤。但是邏輯卷實際上是由底層的若干個物理卷構成。但是一個邏輯卷并非使用物理卷的所有空間,通常是部分空間。
LVM的操作
前文我們對LVM的基本概念和架構進行了介紹,接下來我們就實際操作一下。具體如下圖所示,每個概念對應著一個操作命令,分別是pvcreate,vgcreate和lvcreate。這些是創建的命令,從名稱上也可以很容易地明白其作用。
我們從下往上看看如何創建需要的資源,比如我們要創建一個1G的邏輯卷。
創建PV
首先是要創建PV,也就是準備物理的資源。在本文中我們假設有兩個物理磁盤,并且在整個磁盤上創建物理卷,而不是在分區上。
除了創建命令外,還有查詢命令,具體包括pvdisplay和pvs,分別顯示詳細信息和概要信息。
創建VG
完成PV的創建后,我們就可以創建卷組了。卷組的創建命令如下所示。
vgcreate vg-01 /dev/sdb /dev/sdc
創建完成后可以看一下信息:
創建LV
最后,我們就可以創建邏輯卷了。假設我們這里創建一個線性的邏輯卷,大小為1GB,具體命令如下所示。
lvcreate -L 1G -n lv_linear vg-01
Logical volume "lv_linear" created
通過lvdispaly命令可以看一下詳細信息。
除了線性卷之外,我們還可以創建條帶卷。關于具體什么是線性卷,什么是條帶卷,本文不做解釋,我們后面在介紹LVM的原理的時候再詳細介紹。
# lvcreate -L 1G -i2 -I64 -n lv_stripe vg-01
Logical volume "lv_stripe" created
創建完成后照例可以看一下詳細的信息。
LV創建成功后,我們就可以當做硬盤來使用了,用法跟普通硬盤沒有差別。
擴容操作
有了前面的知識,我們回歸主題,如何進行擴容呢?其實就比較簡單了。前文我們創建的VG的大小35G,而LV只用了1GB的空間。因此,我們可以直接對LV進行擴容,比如我們增加10GB的容量,可以執行如下命令。
lvextend -L+10G /dev/vg_01/lv_linear
是不是很簡單!
如果上面已經有文件系統了,只需要執行如下命令即可。
resize2fs /dev/vg_01/lv_linear
還有一種情況是VG的容量使用完了。也沒有關系,我們可以添加新的硬盤到VG,然后執行上面介紹的命令。
今天的內容就介紹到這里,相信大家對如何實現一個彈性容量的存儲有了清晰的認識了。我們在后續會逐步深入,介紹LVM的實現原理,并結合內核代碼介紹其代碼實現。