閱讀目錄
LVM相關概念介紹請自行Google,
這里僅給出簡單的介紹:
基本的邏輯卷管理概念:
- 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 6.x 以后,由於直接使用 lvm2 的各項格式功能,因此這個限制已經不存在了。

創建LVM系統分區方式的主要步驟如下:
1. 添加新的物理磁盤
2. 創建新的分區,最多可分配【3個主分區,1個擴展分區】 或 【4個主分區】,擴展分區又可以有多個分區;
window常見的分配方式:
方式1:[1個主分區(C盤)+1個擴展分區(包括3個分區,D,E,F盤)]
方式2:[4個主分區,分別作為:C、D、E、F盤]
若是使用LVM方式分區,分區時最好選擇LVM分區方式;
3. 創建PV;
4. 創建VG;
5. 創建LV;
6. 格式化LV,ext3,ext4等格式;
7. 掛載LV到指定目錄;
8. 將掛載信息寫入:/etc/fstab;
9. LVM擴容操作
9.1 LV的擴容;
(1) 使用VG的Free空間,對LV擴容;
(2) 完成后需要在對文件系統擴容;
9.2 VG的擴容
方式1: 通過增加PV來實現
方式2: 通過擴展raid(磁盤陣列)設備的容量來間接對VG擴容
10. LVM縮減操作
10.1 LV的縮減
10.2 VG的縮減
11. 刪除LVM
其他說明:
凡是以“#”開頭的行,都表示linux指令,如:
# fdisk -l
表示的是:
[root@localhost ~]# fdisk -l
如下是最初的系統基本信息:
操作系統:Centos7;
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 1.3G 46G 3% /
devtmpfs 911M 0 911M 0% /dev
tmpfs 921M 0 921M 0% /dev/shm
tmpfs 921M 8.5M 912M 1% /run
tmpfs 921M 0 921M 0% /sys/fs/cgroup
/dev/sda1 477M 142M 310M 32% /boot
/dev/mapper/centos-home 47G 251M 44G 1% /home
tmpfs 185M 0 185M 0% /run/user/0
[root@localhost ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 209592319 104283136 8e Linux LVM
--------LVM分區測試時,主要使用了sd{b,c,d,e,f,g}等----
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 16.1 GB, 16106127360 bytes, 31457280 sectors
Disk /dev/sde: 16.1 GB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdf: 16.1 GB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdg: 10.7 GB, 10737418240 bytes, 20971520 sectors
-----下面是系統安裝后存在的,為方便說明,后面將其顯示省略-----
Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/centos-home: 50.9 GB, 50944016384 bytes, 99500032 sectors
說明:
上面這些是安裝完系統時就存在的,為方便后續的描述,在進行“df -h”時,省略掉了這些,其他指令也有部分省略。
# fdisk /dev/sdb
Command (m for help): n (創建新分區)
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p (選擇創建主分區)
Partition number (1-4, default 1): 1 (分區號選擇1)
First sector (2048-31457279, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279):
Using default value 31457279
Partition 1 of type Linux and of size 15 GiB is set
Command (m for help): p (查看已經創建的分區)
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Device Boot Start End Blocks Id System
/dev/sdb1 2048 31457279 15727616 83 Linux (系統默認為83,即:Linux)
Command (m for help): t (修改分區格式)
Selected partition 1
Hex code (type L to list all codes): 8e (8e為Linux LVM格式)
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Device Boot Start End Blocks Id System
/dev/sdb1 2048 31457279 15727616 8e Linux LVM
Command (m for help): w
二、創建PV
首先說明一些簡單指令,常見的查看指令包括如下三種:
1. pv相關:pvdisplay、pvs、pvscan,pvcreate
2. vg相關:vgdisplay、vgs、vgscan,vgcreate
3. lv相關:lvdisplay、lvs、lvscan,lvcreate
# pvcreate /dev/sdb1 (創建PV)
# pvdisplay
"/dev/sdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID dZRM2W-X2Lz-I3Jz-i4S4-E8fN-BF4K-oZqhd3
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 10.00g 10.00g
# pvscan
PV /dev/sdb1 lvm2 [10.00 GiB]
三、創建VG
創建VG時,可以使用如下幾種方式來創建
- raid:磁盤陣列;
- 分區,如:/dev/sdb1;
- 整個磁盤,如:/dev/sdc;
由於我們事先沒有准備好磁盤陣列RAID,所以這里僅僅演示使用
分區和
整個磁盤來創建VG。
下面將使用“
分區/dev/sdb1” 和 “磁盤
/dev/sdc” 創建VG,並設置
PE大小為64M。
# vgcreate vg0 /dev/sdb1 /dev/sdc -s 64M
Physical volume "/dev/sdc" successfully created
Volume group "vg0" successfully created
使用分區/dev/sdb1 和 磁盤/dev/sdc 來創建vg,並設置PE大小為64M
# pvsPV VG Fmt Attr PSize PFree/dev/sdb1 vg0 lvm2 a-- 10.00g 10.00g/dev/sdc vg0 lvm2 a-- 10.00g 10.00g
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 19.99g 19.99g
上面知道:/dev/sdb1和/dev/sdb都是10G,所以vg0的大小為19.99G;
- # vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 19.99 GiB
PE Size 64.00 MiB
Total PE 320
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID m58K2q-eIsC-1Z3T-DySZ-cgKb-Sd3L-UbrW2z
四、創建LV-->格式化LV-->掛載LV
關於LV的操作主要有3個步驟,分別為:
- 創建LV;
- 格式化LV,如:ext3,ext4等;
- 掛載LV到指定目錄下;
使用vg0創建lv1,初始大小設置為8G
# lvcreate -L 8G -n lv1 vg0
Logical volume "lv1" created.
從vg0中分出8G的空間給lv1使用
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 19.99g 11.99g
由於分出了8G給lv1,所以VFree之剩下:11.99G
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-a----- 8.00g
# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/lv1
LV Name lv1
VG Name vg0
LV UUID wevRbf-Iy3b-wPfa-mK4a-DFoq-A24w-8q5axT
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2016-09-08 09:58:34 +0800
LV Status available
# open 0
LV Size 8.00 GiB
Current LE 2048
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
使用ext3文件系統對LV進行格式化
# mkfs.ext3 /dev/vg0/lv1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2097152 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
將lv1掛載到/mnt/lv1目錄下
# mkdir /mnt/lv1
# mount /dev/vg0/lv1 /mnt/lv1
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 ext3 7.8G 19M 7.4G 1% /mnt/lv1
五、LV擴容
LV的擴容主要分2個步驟:
- 使用VG的Free空間,對LV擴容;
- 完成后需要在對文件系統擴容;
查看vg的容量,考慮從vg中再分配一些空間給LV
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 19.99g 11.99g
現在還有11.99G可用
# lvextend -L +3G /dev/vg0/lv1
Size of logical volume vg0/lv1 changed from 8.00 GiB (2048 extents) to 11.00 GiB (2816 extents).
Logical volume lv1 successfully resized.
將lv1添加3G容量
# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 99.45g 4.00m
vg0 2 1 0 wz--n- 19.99g 8.99g
由原先的11.99G可用變為8.99G可用
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-ao---- 11.00g
由原先的8G增加到了11G
對文件系統進行擴容
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 ext3 7.8G 19M 7.4G 1% /mnt/lv1
可是發現實際容量並沒有變化,還是7.8G
這時需要對文件系統進行擴容
下面是擴容指令:
# resize2fs /dev/vg0/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv1 is now 2883584 blocks long.
對文件系統擴容
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 ext3 11G 21M 11G 1% /mnt/lv1
發現此時lv1的容量變為了11G
<方式1>: 通過增加PV來實現
使用/dev/sdd來創建一個PV
# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created
創建PV
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg0 lvm2 a-- 10.00g 0
/dev/sdc vg0 lvm2 a-- 10.00g 8.99g
/dev/sdd lvm2 --- 15.00g 15.00g
新增加的PV有15G
# vgextend vg0 /dev/sdd
Volume group "vg0" successfully extended
使用PV對VG擴容
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 1 0 wz--n- 34.99g 23.99g
擴容后的vg0由19.99G變為了34.99G
<方式2>: 通過擴展raid(磁盤陣列)設備的容量來間接對VG擴容
這里不進行闡述