前言
Logical Volume Manager (LVM) 重点在于 可以弹性的调整 文件系统 的容量!
LVM 可以整合多个硬盘 分区在一起, 让这些 分区 看起来就像是一个磁盘一样!
传统分区使用固定大小分区,重新调整大小十分麻烦,但是LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘,可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷,LVM并不需要重启就可以让内核知道分区的存在。
LVM 可用来创建和弹性的调整 分区大小
LVM基本组成
LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间, LVM是用来方便管理的,不会提供额外的性能与安全保证。 需要文件的读写性能或者是数据的可靠性,请配置RAID或分布式文件系统。
LVM的基本组成块(building blocks)如下:
物理卷Physical volume (PV) :可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。
卷组Volume group (VG) :将一组物理卷收集为一个管理单元。
逻辑卷Logical volume (LV) :虚拟分区,由物理区域(physical extents)组成。
物理区域Physical extent (PE) :硬盘可供指派给逻辑卷的最小单位(通常为4MB)。
LVM优点
比起正常的硬盘分区管理,LVM更富于弹性:
- 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
- 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
- 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
- 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
- 可以在线对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
- 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线/动态迁移至别的硬盘上。
- 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间降低到最小。
LVM配置
新建分区 修改分区格式 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p #主分区
Partition number (1-4): 1 #分区号
First cylinder (1-1044, default 1): #回车用默认的1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): #大小
Command (m for help): t #改变类型
Selected partition 1
Hex code (type L to list codes): 8e #LVM 的分区代码
Changed system type of partition 1 to 8e (Linux LVM)
w #保存
q #退出
创建物理卷(PV)1
pvcreate /dev/sdb1
1 | pvscan |
删除物理卷1
pvremove /dev/sdb1
创建卷组(VG)1
2vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda{6,7,8}
扩展VG1
vgextend vg_data /dev/hda9
查看VG信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg_data" using metadata type lvm2
Found volume group "VolGroup" using metadata type lvm2
vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
--- Volume group ---
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 5
Open LV 5
Max PV 0
Cur PV 1
Act PV 1
VG Size 89.51 GiB
PE Size 4.00 MiB
Total PE 22914
Alloc PE / Size 22528 / 88.00 GiB
Free PE / Size 386 / 1.51 GiB
VG UUID i0qDld-uOz4-P1BS-2gN8-2vhj-5gdc-DnHfa4
删除VG1
vgremove vg_data
创建逻辑卷(LV)1
2lvcreate -L 20g -n lv_oracle vg_data
lvcreate -l 100%FREE -n lv_oracle vg_data
查看LV1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24lvscan
ACTIVE '/dev/vg_data/lv_oracle' [20.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_root' [50.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_home' [10.00 GiB] inherit
lvdisplay
--- Logical volume ---
LV Path /dev/vg_data/lv_oracle
LV Name lv_oracle
VG Name vg_data
LV UUID P3jVXt-92Lp-QElD-ddl8-lW4r-okz7-n8fdXD
LV Write Access read/write
LV Creation host, time capdb, 2016-03-17 17:12:43 +0800
LV Status available
# open 1
LV Size 20.00 GiB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5
格式化逻辑卷1
2mkfs -t ext4 vg_data/lv_oracle
mkfs.ext4 vg_data/lv_oracle
挂载逻辑卷1
2
3
4mkdir /oracle
#修改fstab
vi /etc/fstab
/dev/vg_data/lv_oracle /oracle ext4 dafualts 0 0
测试lv是否可以挂载1
2
3mount -a
mount /dev/vg_data/lv_oracle /oracle
df -h
删除逻辑卷1
2
3fuser -m /oracle
umount /oracle
lvremove /dev/vg_data/lv_oracle
LVM扩展
LVM特点就是支持在线动态扩容,如果为了稳妥也可以先umount
查看Free PE / Size可用空间1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
设置逻辑卷的大小1
2lvresize -L 40g vg_data/lv_oracle
lvresize -L +20g vg_data/lv_oracle
检查磁盘错误,等待时间较长可以考虑跳过1
e2fsck -f /dev/vg_data/lv_oracle
更新文件系统信息1
resize2fs /dev/vg_data/lv_oracle
检查逻辑卷状态 1
lvdisplay vg_data
LVM缩减
注意减少的大小,实施前umount逻辑卷
卸载LV1
umount /oracle
检查磁盘错误1
e2fsck -f /dev/vg_data/lv_oracle
缩小文件系统,更新文件系统信息1
resize2fs /dev/vg_data/lv_oracle 10g
减少LV大小1
2lvresize -L 10g vg_data/lv_oracle
lvresize -L -30g vg_data/lv_oracle
检查逻辑卷大小1
2lvdisplay
df -h
扩展卷组
步骤和创建VG类似
创建一个2GB分区sdc1,类型为LVM(8e1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
创建一个物理卷 /dev/sdc11
pvcreate /dev/sdc1
增加到已存在的卷组1
vgextend vg_data /dev/sdc1
验证卷组大小 1
vgdisplay
删除卷组
卸载逻辑卷1
umount /oracle
删除逻辑卷1
lvremove /dev/vg_data/lv_oracle
取消激活卷组1
vgchange -a n vg_data
删除卷组1
vgremove vg_data
删除物理卷1
2pvremove /dev/sdb1
pvremove /dev/hda{6,7,8}
普通磁盘类型是831
2fdisk /dev/sdb
t 83
lvchange
在做HA共享存储时需要配合lvchange激活lv
1 | lvscan |
命令总结
任务 | PV 阶段 | VG 阶段 | LV 阶段 | |
---|---|---|---|---|
扫描 (scan) | pvscan | vgscan | lvscan | |
创建 (create) | pvcreate | vgcreate | lvcreate | |
列出 (display) | pvdisplay | vgdisplay | lvdisplay | |
扩展 (extend) | vgextend | lvextend (lvresize) | ||
减少 (reduce) | vgreduce | lvreduce (lvresize) | ||
删除 (remove) | pvremove | vgremove | lvremove | |
改变容量 (resize) | lvresize | |||
改变属性 (attribute) | pvchange | vgchange | lvchange |
转载自:https://wsgzao.github.io/post/lvm/