lvm

LVM逻辑卷管理配置

Posted by Sunday on 2018-08-23

11

前言

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
16
fdisk /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
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
pvscan

PV /dev/sdb1 VG vg_data lvm2 [200.00 GiB / 30.00 GiB free]
PV /dev/sda2 VG VolGroup lvm2 [89.51 GiB / 1.51 GiB free]
Total: 2 [289.50 GiB] / in use: 2 [289.50 GiB] / in no VG: 0 [0 ]

pvdisplay

--- Physical volume ---
PV Name /dev/sdb1
VG Name vg_data
PV Size 200.00 GiB / not usable 1.34 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 7679
Allocated PE 43520
PV UUID c9js6G-WP93-ug9b-aXe-unnZ-doWQ-AkzOKf

--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup
PV Size 89.51 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 22914
Free PE 386
Allocated PE 22528
PV UUID bFne0f-RnL8-vut2-AcKr-fr9k-VfeG-C8OHSR

删除物理卷

1
pvremove /dev/sdb1

创建卷组(VG)

1
2
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda{6,7,8}

扩展VG

1
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
49
vgscan

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

删除VG

1
vgremove vg_data

创建逻辑卷(LV)

1
2
lvcreate -L 20g -n lv_oracle vg_data
lvcreate -l 100%FREE -n lv_oracle vg_data

查看LV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
lvscan

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
2
mkfs -t ext4 /dev/vg_data/lv_oracle
mkfs.ext4 /dev/vg_data/lv_oracle

挂载逻辑卷

1
2
3
4
mkdir /oracle
#修改fstab
vi /etc/fstab
/dev/vg_data/lv_oracle /oracle ext4 dafualts 0 0

测试lv是否可以挂载

1
2
3
mount -a
mount /dev/vg_data/lv_oracle /oracle
df -h

删除逻辑卷

1
2
3
fuser -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
22
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

设置逻辑卷的大小

1
2
lvresize -L 40g /dev/vg_data/lv_oracle
lvresize -L +20g /dev/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逻辑卷

卸载LV

1
umount /oracle

检查磁盘错误

1
e2fsck -f /dev/vg_data/lv_oracle

缩小文件系统,更新文件系统信息

1
resize2fs /dev/vg_data/lv_oracle 10g

减少LV大小

1
2
lvresize -L 10g /dev/vg_data/lv_oracle
lvresize -L -30g /dev/vg_data/lv_oracle

检查逻辑卷大小

1
2
lvdisplay
df -h

扩展卷组

步骤和创建VG类似

创建一个2GB分区sdc1,类型为LVM(8e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fdisk /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/sdc1

1
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
2
pvremove /dev/sdb1
pvremove /dev/hda{6,7,8}

普通磁盘类型是83

1
2
fdisk /dev/sdb
t 83

lvchange

在做HA共享存储时需要配合lvchange激活lv

1
2
lvscan
lvchange -a y /dev/vg_data/lv_oradata

命令总结

任务 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/