一、LVM簡介
LVM是邏輯卷管理(Logical Volume Manager)的簡寫,它最早是IBM爲自己的AIX系統研發的存儲管理機制。Heinz Mauelshagen於1998年在Linux2.4內核上實現了LVM,它是在物理硬盤和分區直接之間建立一個邏輯層,以此來提高硬盤分區管理的靈活性,比如動態擴容和縮減。
完美解決磁盤動態擴容縮減的方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,LogicalVolumeManager)機制就是一個完美的解決方案。
二、LVM相關術語介紹
物理存儲介質(The physical media):指系統的存儲設備,如硬盤等,是最低層的存儲單元。
物理卷(physical volume,PV):物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,包含有與LVM相關的管理參數。
卷組(Volume Group,VG):LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。
邏輯卷(logical volume,LV):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。
PE(physical extent,PE):每一個物理卷被劃分爲稱爲PE(PhysicalExtents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。
LE(logical extent,LE):邏輯卷也被劃分爲被稱爲LE(LogicalExtents)的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
三、LVM的創建
LVM的結構:
上圖所示:LV是創建在VG之上,而VG則是由一個個的PV組成。
一)PV的創建:
構成PV的可以是硬盤的物理分區,也可以是自行創建的RAID卷。本文先以分區爲例進行說明,待後續介紹了RAID後再做補充。
1)格式化硬盤
在創建PV之前先要對硬盤進行分區,詳細的分區步驟如下所示:
[root@Domain01 ~]# fdisk /dev/sdb #對/dev/sdb進行分區 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x38607615. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n #新建一個分區 Command action e extended p primary partition (1-4) p #選擇分區類型,如果主分區已不夠用,請選e來創建擴展分區 Partition number (1-4): 1 #主分區1 First cylinder (1-15665, default 1): #直接回車默認從剩餘的第一個磁柱開始 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G #選擇大小爲20G Command (m for help): t #調整爲LVM的ID號 Selected partition 1 #如果只要一個分區的時候會默認選擇 Hex code (type L to list codes): 8e #LVM的ID號 Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): n #繼續新增分區 Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (2613-15665, default 2613): Using default value 2613 Last cylinder, +cylinders or +size{K,M,G} (2613-15665, default 15665): +20G Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): w #保存並退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@Domain01 ~]# partx -a /dev/sdb #讓內核讀到分區信息,多執行幾次 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 [root@Domain01 ~]# cat /proc/partitions #內核已讀到/dev/sdb的分區信息 major minor #blocks name 8 0 125829120 sda 8 1 307200 sda1 8 2 123489280 sda2 8 3 2031616 sda3 8 16 125829120 sdb 8 17 20980858 sdb1 8 18 20980890 sdb2 8 32 125829120 sdc
以相同的方法對/dev/sdc進行分區得到/dev/sdc1和/dev/sdc2。
2)創建PV
創建物理卷,物理卷(Physical Volumes)簡稱PV,是在磁盤的物理分區或與磁盤分區具有同樣功能的設備(如RAID)上創建而來。它只是在物理分區中劃出了一個特殊的區域,用於記載與LVM相關的管理參數。創建PV的命令:pvcreate 很直白也很好記憶。
[root@Domain01 ~]# pvcreate --help pvcreate: Initialize physical volume(s) foruse by LVM #用於將物理硬盤分區初始化爲物理卷,以便被LVM使用 pvcreate [--norestorefile] [--restorefile file] [-d|--debug] #調試,基本用不到 [-f[f]|--force [--force]] #強制創建物理卷,無需用戶確認,慎用。 [-h|-?|--help] #獲取幫助 [--labelsector sector] [-M|--metadatatype 1|2] [--pvmetadatacopies #copies] [--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]] [--dataalignment Alignment[bBsSkKmMgGtTpPeE]] [--dataalignmentoffset AlignmentOffset[bBsSkKmMgGtTpPeE]] [--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE] [-t|--test] [-u|--uuid uuid] #指定設備的UUID [-v|--verbose] [-y|--yes] [-Z|--zero {y|n}] 是否利用前面四個扇區 [--version] PhysicalVolume [PhysicalVolume...] [root@Domain01 ~]# pvcreate /dev/sd[bc][12] #將格式化出來的物理磁盤分區創建爲PV Physical volume "/dev/sdb1"successfully created Physical volume "/dev/sdb2"successfully created Physical volume "/dev/sdc1"successfully created Physical volume "/dev/sdc2"successfully created
[root@Domain01 ~]# pvdisplay "/dev/sdb1"is a new physical volume of "20.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 20.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID FVz2es-Db5F-vEYN-AjVk-f4Ft-puB5-ATTpww
至此PV創建成功。
3)刪除PV
刪除PV使用pvremove。
[root@server ~]# pvremove /dev/sdb3 Labels on physical volume "/dev/sdb3" successfully wiped