linux?

LVM是Logical Volume Manager(邏輯卷管理器)的簡寫,它為主機提供了更高層次的磁盤存儲管理能力。LVM可以幫助系統管理員為應用與用戶方便地分配存儲空間。在LVM管理下的邏輯卷可以按需改變大小或添加移除。另外,LVM可以為所管理的邏輯卷提供定製的命名標識。因此,使用LVM主要是方便了對存儲系統的管理,增加了系統的擴展性。

目前LVM在Linux下有兩個版本,分別是LVM 1和LVM 2,LVM2不僅僅是Linux邏輯卷管理在版本與功能上的升級,而且是架構在一個新的內核存儲子系統(DM,device-mapper)之上的。這個存儲子系統提供了一個輕量級的、可擴展的卷管理設施。除了在原有LVM卷管理功能的基礎上,Linux的邏輯卷管理將會為用戶提供更多的存儲管理方案,如鏡像、加密卷、多路徑技術。所以在本節將以LVM 2為例來詳細介紹LVM的創建與管理。

工具/原料

電腦一臺

方法/步驟

LVM相關概念和術語

LVM是建立在磁盤分區和文件系統之間的一個邏輯層,來為文件系統屏蔽下層磁盤分區佈局,提供一個邏輯的盤卷,再在盤捲上來建立文件系統。LVM的結構如圖1如示:

圖1 LVM結構圖

在上面的LVM結構圖中,涉及到了很多LVM的相關術語,那麼關於這些術語的詳細說明如下:

物理卷(physical volume,PV)

物理卷就是指硬盤分區,也可以是整個硬盤或已創建的軟RAID ,是LVM的基本存儲設備,與普通物理存儲介質的區別是該設備包含有LVM相關的管理參數。

卷組(volume group,VG)

卷組是由一個或多個物理卷所組成的存儲池,在卷組上能創建一個或多個“LVM分區”(邏輯卷)。

邏輯卷(logical volume,LV)

LVM的邏輯卷類似於非LVM系統中的硬盤分區,它建立在卷組之上,是一個標準的塊設備,在邏輯卷之上可以建立文件系統。可以做這樣一個設想來理解以上三者的關係:如果把PV比做地球的一個板塊,VG則是一個地球,因為地球是由多個板塊組成的,那麼在地球上劃分一個區域並標記為亞洲,則亞洲就相當於一個LV。

物理塊(physical extent,PE)

物理卷以大小相等的物理塊為存儲的基本單位,同時也是LVM尋址的最小單元。

邏輯塊(logical extent,LE)

邏輯卷以大小相等的邏輯塊為存儲的基本單位,在同一個卷組中,LE的大小和PE是相等的,並且一一對應。

卷組描述區域(Volume Group Descriptor Area,VGDA)

和磁盤將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理卷的VGDA中。VGDA包括以下內容: PV描述符、VG描述符、LV描述符、和一些PE描述符。系統啟動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。

創建邏輯卷

創建邏輯卷通常包括如下步驟:

創建分區

創建物理卷

創建卷組

激活卷組

創建邏輯卷

創建文件系統

下面將通過一個具體的實例來詳細介紹創建邏輯卷的整個過程。

【實例1】

利用/dev/sdb、/dev/sdc、/dev/sdd這三塊磁盤創建一個卷組,再在卷組上創建兩個邏輯卷,並指定將其中一個邏輯卷的映射模式為條帶映射,實現的步驟如下:

1、創建物理卷

創建物理卷的命令是 “pvcreate”,該命令可以將需要添加到卷組的分區或磁盤創建為物理卷。操作如下:

# pvcreate /dev/sdb /dev/sdc /dev/sdd

Physical volume "/dev/sdb" successfully created

Physical volume "/dev/sdc" successfully created

Physical volume "/dev/sdd" successfully created

2、創建卷組

創建卷組的命令為“vgcreate”,將使用“pvcreate”建立的物理卷創建為一個完整的卷組,如下:

# vgcreate vgtest /dev/sdb /dev/sdc /dev/sdd

Volume group "vgtest" successfully created

其中vgcreate命令第一個參數是指定該卷組的名為“vgtest”,該名稱可以根據需要隨便定義,後面接添加到該卷組的物理卷。同時在使用vgcreate 在創建卷組時,還可以指定PE的大小,需要加上-s參數來實現,PE大小範圍為8 KB 到 16GB,並且必須總是2的倍數。一個卷組裡面最多允許65534個PE存在。默認設置的PE大小為4 MB,這表示卷組上創建的所有邏輯卷都以 4 MB 為增量單位來進行擴充或縮減,所以4 MB 的PE決定了單個邏輯卷最大容量為 256 GB,若要創建更大的邏輯卷則創建卷組時需要指定更大的PE。

3、創建邏輯卷

創建完卷組後,現在就可通過“lvcreate”命令來創建邏輯捲了,同時在創建邏輯卷的時候,還可以指定邏輯塊與物理塊映射的模式,邏輯卷的映射模式共有如下兩種:

線性模式――按照順序把一定範圍內的物理塊與邏輯塊映射,這也是默認的映射方式。例如,把邏輯卷中1-25的LE映射到PV1,把26-50的LE映射到PV2上。

條帶模式――將把邏輯塊以條帶的形式映射到不同的物理卷中,這種方式與前面講到的RAID 0有些類似,這種方式可以提高邏輯卷讀寫的性能。例如,將邏輯卷的LE 1映射為PV1的PE1,LE 2映射為PV2的PE1,LE 3映射為PV3的PE1。

那麼創建邏輯卷的操作如下:

# lvcreate -i 3 -I 4 -L 180M -n lvtest1 vgtest

Logical volume "lvtest1" created

上面的提示信息表明成功創建了一個名為“lvtest1”的邏輯卷,其命令中的幾個參數的說明如下:

-i:採用條帶模式的映射方式創建邏輯卷,該參數的值用於指定所創建的邏輯卷將映射在幾個PV上。

-I:指定使用條帶模式時所採用塊的大小,單位為KB,其值必須是:2N(N≥2)。

-L:指定創建邏輯卷的大小,單位的可以用K、M、G、T表示KB、MB、GB及TB。

-n:用來指定所創建的邏輯卷名稱,該名稱可以根據需要隨便定義。

在使用“-i”參數指定PV的個數時,一定要確認所指定的這些PV是沒有完全被分配給任何邏輯卷的,否則將創建失敗,其次若這些PV的大小不等,那麼所創建的邏輯卷只能取最小值。

下面再使用剩餘的空間來創建第二個邏輯卷,通過“vgdisplay”命令可查看當前卷組剩餘的空間,如下:

# vgdisplay

--- Volume group ---

VG Name vgtest

System ID

Format lvm2

Metadata Areas 3

Metadata Sequence No 11

VG Access read/write

VG Status resizable

MAX LV 0

Cur LV 1

Open LV 0

Max PV 0

Cur PV 3

Act PV 3

VG Size 300.00 MB

PE Size 4.00 MB

Total PE 75

Alloc PE / Size 45 / 180.00 MB

Free PE / Size 30 / 120.00 MB

VG UUID 1Nbgxo-U4Ux-Y5Hb-TDzT-d5Fp-Iov7-wKFHG5

從如上的信息可瞭解到“vgtest”卷組還剩餘30個空閒的PE,那麼將這些空閒的空間全部劃分給另一個邏輯卷,操作如下:

# lvcreate -l 30 -n lvtest2 vgtest

Logical volume "lvtest2" created

其中“-l”用於指定邏輯卷的LE數量,默認為4MB,所以此次創建的邏輯卷的大小是120M,該參數與“-L”效果一樣。

4、創建文件系統

在邏輯捲上創建文件系統和在分區上創建文件系統方法是一樣,例如,在邏輯捲上創建ext3格式的文件系統,命令如下:

# mkfs.ext3 /dev/vgtest/lvtest1

# mkfs.ext3 /dev/vgtest/lvtest2

以上就是在Linux下創建邏輯卷的整個步驟。

LVM的維護

在LVM的日常維護工作中,通常會需要對邏輯卷擴容、添加新的物理卷等操作,下面將結合【實例1】中所創建的邏輯捲來介紹LVM常用的管理操作,如下:

1、激活卷組

卷組若不被激活,卷組和邏輯卷是不能被訪問的,在LVM 2裡創建的卷組默認是激活的,那麼手動激活卷組的命令是:

# vgchange -a y vgtest

2 logical volume(s) in volume group "vgtest" now active

其中“-a”用於設置指定的卷組是否可用,參數“y”表示激活卷組,若設置為“n”則表示暫停卷組使用。

2、為卷組增加新的物理卷

當卷組空間不足時,可以加入新的物理捲來擴大卷組容量,這時可用“vgextend”命令來實現,如下:

# vgextend vgtest /dev/sde

Volume group "vgtest" successfully extended

其中“/dev/sde”是新增的物理卷,前提該設備已經使用“pvcreate”進行了初始化了。

3、從卷組中移除物理卷

要從一個卷組中移除一個物理卷,首先要確認要移除的物理卷沒有被任何邏輯卷正在使用,通過“pvdisplay”命令可查看到該物理卷信息,如下:

# pvdisplay /dev/sde

--- Physical volume ---

PV Name /dev/sde

VG Name vgtest

PV Size 100.00 MB / not usable 0

Allocatable yes

PE Size (KByte) 4096

Total PE 25

Free PE 25

Allocated PE 0

PV UUID ee2IFC-UHUq-Xg67-icwt-AhdJ-7kRz-JdDjiq

若其中的“Total PE”與“ Free PE”相等,表明該物理卷沒有被使用,如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據轉移到其它地方,然後再移除。移除物理卷的命令為“vgreduce”,如下:

# vgreduce vgtest /dev/sde

Removed "/dev/sde" from volume group "vgtest"

4、在物理卷間轉移數據

當發現邏輯卷下的某個磁盤有錯誤,或有其它需求要轉移其中物理卷的數據時(如,更換大容量或更高速的物理設備),那麼可通過“pvmove”來實現在物理卷之間轉移數據,例如,將物理卷“/dev/sdd”上的數據轉移到“/dev/sde”具體操作如下:

# pvmove /dev/sdd /dev/sde

/dev/sdd: Moved: 100.0%

其中/dev/sde的大小一定要大於或等於/dev/sdd,其次在使用“pvmove ”前需要用 “modprobe dm-mirror”命令來加載dm-mirror模塊,因為“pvmove”在轉移數據時需要用到該模塊,而默認系統是不加載該模塊的。

5、擴展邏輯卷

在前面提到過,LVM提供了方便調整邏輯卷大小的功能,擴展邏輯卷大小的命令是“lvextent”,例如,將“lvtest2”的空間大小調整到160M,操作如下:

# lvextend -L 160M /dev/vgtest/lvtest2

Extending logical volume lvtest2 to 160.00 MB

Logical volume lvtest2 successfully resized

也可以在原來的基礎增加相應的大小,如下:

# lvextend -L +40M /dev/vgtest/lvtest2

Extending logical volume lvtest2 to 160.00 MB

Logical volume lvtest2 successfully resized

邏輯卷擴展後並不會馬上生效,需要使用“resize2fs”命令重新加載邏輯卷的大小,該命令只針對ext2/ext3的文件系統(若是reiserfs的文件系統,則使用“resize_reiserfs”命令),如果該邏輯卷正在使用中,就應該先將該邏輯卷卸載後再執行“resize2fs”命令,操作如下:

# umount /dev/vgtest/lvtest2

# resize2fs /dev/vgtest/lvtest2

resize2fs 1.35 (28-Feb-2004)

The filesystem is already 163840 blocks long. Nothing to do!

# mount /dev/vgtest/lvtest2 /mnt/lvtest2/

以上這些操作可以通過“ext2online”命令直接來實現,這樣就不用做卸載邏輯卷等操作了,如下:

# ext2online /dev/vgtest/lvtest2

ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b

6、刪除邏輯卷

刪除邏輯卷前首先需要將其卸載,其命令是“lvremove”,如下:

# lvremove /dev/vgtest/lvtest2

Do you really want to remove active logical volume "lvtest2"? [y/n]: y

Logical volume "lvtest2" successfully removed

其中輸入“y”確認確認刪除該邏輯卷。

7、移除卷組

在移除卷組前首先要確認該卷組中已沒有任何的邏輯捲了,或者可使用“vgchange”手工將卷組停止,移除卷組的具體操作如下:

# vgremove vgtest

Volume group "vgtest" successfully removed

8、刪除物理卷

在刪除物理卷前,必須確認該物理卷已從卷組中移除了,刪除物理卷的命令是“pvremove”,如下:

# pvremove /dev/sde

Labels on physical volume "/dev/sde" successfully wiped

除此之外,LVM還可以提供snapshot(快照)等功能,其snapshot能夠快速的備份當前邏輯卷中的數據,從而大大減輕備份數據的負擔,只是目前來說技術並不是很成熟。

相關問題答案