LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。
LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。
基本的邏輯卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。
VG(Volumne Group)- 卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理卷到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
關系圖如下:
PE(Physical Extent)- 物理塊
LVM 默認使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),因此默認的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像文件系統裡面的block 大小。所以調整PE 會影響到LVM 的最大容量!
系統平台:CentOS 7
LVM版本:lvm2-2.02.130-5.el7.x86_64
設備類型:分區、物理磁盤
磁盤准備:新增一塊磁盤做實驗
1、檢查系統中是否安裝了LVM管理工具
[root@bash ~]# rpm -qa |grep lvm mesa-private-llvm-3.6.2-2.el7.x86_64 lvm2-2.02.130-5.el7.x86_64 lvm2-libs-2.02.130-5.el7.x86_64
2、如果未安裝,則使用yum方式安裝
# yum -y install lvm* [root@localhost ~]# rpm -qa lvm2 lvm2-2.02.130-5.el7.x86_64
1、使用/dev/sdb模擬分區
# fdisk /dev/sdb
文件系統類型為:8e (Linux LVM)
[root@bash ~]# fdisk -l /dev/sdb Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x141c2b15 Device Boot Start End Blocks Id System /dev/sdb1 2048 10487807 5242880 8e Linux LVM /dev/sdb2 10487808 20973567 5242880 8e Linux LVM /dev/sdb3 20973568 31459327 5242880 8e Linux LVM /dev/sdb4 31459328 41943039 5241856 8e Linux LVM
命令介紹:
#pvs 查看pv狀態 # pvcreate 將物理分區新建成為PV # pvscan 查詢目前系統裡面任何具有PV的磁盤 # pvdisplay 顯示出目前系統上面的PV狀態 # pvremove 將PV屬性移除,讓該分區不具有PV屬性
1、將/dev/sdb1 - /dev/sdb4新建成為PV格式
[root@bash test]# pvcreate /dev/sdb{1..4} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created Physical volume "/dev/sdb4" successfully created
2、查詢目前系統裡面任何具有PV的磁盤
[root@bash test]# pvscan PV /dev/sdb3 lvm2 [5.00 GiB] PV /dev/sdb2 lvm2 [5.00 GiB] PV /dev/sdb1 lvm2 [5.00 GiB] PV /dev/sdb4 lvm2 [5.00 GiB] Total: 4 [20.00 GiB] / in use: 0 [0 ] / in no VG: 4 [20.00 GiB]
命令介紹:
# vgcreate 新建VG vgcreate [-s N[mgt]] VG名稱 設備名稱 -s 接PE的大小 # vgscan 查詢目前系統裡面是否有VG的磁盤 #vgs查看vg狀態 # vgdisplay 顯示出目前系統上面的VG狀態 # vgextend 在VG內增加額外的PV # vgreduce 在VG內刪除PV # vgchange 設置VG是否啟動(active) # vgremove 刪除一個VG
PV的名稱是分區的設備文件名字,VG名稱可以自定義的,我將VG的名稱定義為myvg
1、將/dev/sdb1-/dev/sdb3
新建為一個VG,且指定PE為15MB
[root@bash test]# vgcreate -s 15M "myvg" /dev/sdb{1..3} Volume group "myvg" successfully created
2、查看系統上的VG狀態
[root@bash test]# pvscan PV /dev/sdb1 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb2 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb3 VG myvg lvm2 [5.00 GiB / 5.00 GiB free] PV /dev/sdb4 lvm2 [5.00 GiB] Total: 4 [19.98 GiB] / in use: 3 [14.99 GiB] / in no VG: 1 [5.00 GiB]
3.顯示出目前系統上面的VG狀態
[root@bash test]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 14.99 GiB PE Size 15.00 MiB Total PE 1023 Alloc PE / Size 0 / 0 Free PE / Size 1023 / 14.99 GiB VG UUID CT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q
4、新增PV給myvg
[root@bash test]# vgextend "myvg" /dev/sdb4 Volume group "myvg" successfully extended
5、顯示出目前系統上面的VG狀態
[root@bash test]# vgdisplay --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 4 Act PV 4 VG Size 19.98 GiB PE Size 15.00 MiB Total PE 1364 Alloc PE / Size 0 / 0 Free PE / Size 1364 / 19.98 GiB VG UUID CT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q