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