【IT168 专稿】Red hat 下的LVM 上 LVM是Logical Volume Manager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力。LVM可以帮助系统管理员为应用与用户方便地分配存储空间。在LVM管理下的逻辑卷可以按需改变大小或添加移除。另外,LVM可以为所管理的逻辑卷提供定制的命名标识。因此,使用LVM主要是方便了对存储系统的管理,增加了系统的扩展性。
Linux,AIX,Hp-uinx平台下的LVM 命令是不一样的。下面以Redhat 下的命令来做一些说明。
一. LVM 理论知识
1. 先来看一下LVM创建的流程: PV-->VG-->LV.
PV(Physical Volume) :物理卷,可以是单独磁盘,也可以是硬盘分区。
VG(Volume Group) :卷组,是PV的组合,可以看成单独的逻辑磁盘。
LV(Logical Volume) :逻辑分区,当于物理分区的/dev/hdaX,只有逻辑卷才可以写数据。
PE(Physical Extent) :物理范围。VG单元,类似于RAID的条带大小。 当多个PV组成一个VG时,LVM会在所有PV上做类似格式化的动作,将每个PV切成一块块的空间,这一块块的空间就称为PE, 通常是4MB。
LE(Logical Extent) :逻辑范围。LV的组成单位。大小为PE的倍数(通常为1:1)。
2. 工作原理
LVM 在每个物理卷头部都维护了一个 metadata,每个 metadata 中都包含了整个 VG 的信息,包括每个 VG 的布局配置、PV 的编号、LV 的编号,以及每个 PE 到 LE 的映射关系。同一个 VG 中的每个 PV 头部的信息是相同的,这样有利于故障时进行数据恢复。
LVM 对上层文件系统提供 LV 层,隐藏了操作细节。对文件系统而言,对 LV 的操作与原先对 Partition 的操作没有差别。当对 LV 进行写入操作时,LVM 定位相应的 LE,通过 PV 头部的映射表,将数据写入到相应的 PE 上。
LVM 实现的关键在于在 PE 和 LE 间建立映射关系,不同的映射规则决定了不同的 LVM 存储模型。LVM 支持多个 PV 的 Stripe 和 Mirror,这点和软 Raid 的实现十分相似。
使用 LVM 的优势:
•文件系统可以跨多个磁盘,因此大小不会受物理磁盘的限制。
•可以在系统运行状态下动态地扩展文件系统大小。
•可以增加新磁盘到 LVM 的存储池中。
•可以以镜像的方式冗余重要数据到多个物理磁盘上。
•可以很方便地导出整个卷组,并导入到另外一台机器上。
使用 LVM 的限制:
•在从卷组中移除一个磁盘时必须使用 reducevg,否则会出问题。
•当卷组中的一个磁盘损坏时,整个卷组都会受影响。
•不能减小文件系统大小(受文件系统类型限制)。
•因为加入了额外的操作,存储性能会受影响(使用 Stripe 的情况另当别论)。
二. 创建相应的磁盘分区
1. 修改磁盘,创建相应的分区
[root@san iscsi]# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 255 2048256 83 Linux
/dev/sda2 256 382 1020127+ 82 Linux swap / Solaris
/dev/sda3 383 5221 38869267+ 5 Extended
/dev/sda5 383 395 104391 83 Linux
/dev/sda6 396 408 104391 83 Linux
/dev/sda7 409 421 104391 83 Linux
/dev/sda8 422 434 104391 83 Linux
这里创建了4个扩展分区,每个100M。 用fdisk /dev/sda创建的。 分区没有格式化。
2. 使用磁盘分区生效
#partprobe
三. 创建PV
1.相关命令
pvcreate 创建PV
pvscan 扫描PV
pvdisplay 显示PV
pvremove 删除PV
partprobe
2.创建物理卷
[root@san iscsi]# pvcreate /dev/sda5 /dev/sda6
Physical volume "/dev/sda5" successfully created
Physical volume "/dev/sda6" successfully created
[root@san iscsi]# pvscan
PV /dev/sda5 lvm2 [101.94 MB]
PV /dev/sda6 lvm2 [101.94 MB] Total: 2 [203.89 MB] / in use: 0 [0 ] / in no VG: 2 [203.89 MB]
[root@san iscsi]# pvdisplay
"/dev/sda5" is a new physical volume of "101.94 MB"
--- NEW Physical volume ---
PV Name /dev/sda5
VG Name
PV Size 101.94 MB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID hDtAhK-adlx-5Ex0-ogc1-Alvm-H274-a8u7c2
"/dev/sda6" is a new physical volume of "101.94 MB"
--- NEW Physical volume ---
PV Name /dev/sda6
VG Name
PV Size 101.94 MB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Sy1wPG-XnjQ-eYD5-91vj-Ug5b-EGgU-i30lCS
四. 创建VG
1.相关命令
vgcreate 创建VG
vgscan 扫描VG
vgdispaly
vgextend
vgreduce
vgchange
vgremove
2.创建逻辑卷VG
[root@san iscsi]# vgcreate vg0 /dev/sda5 /dev/sda6
Volume group "vg0" successfully created
[root@san iscsi]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg0" using metadata type lvm2
Device '/dev/sda6' has been left open.
Device '/dev/sda5' has been left open.
[root@san iscsi]# vgdisplay
--- 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 200.00 MB
PE Size 4.00 MB /*分配的块大小默认为4M*/ Total PE 50
Alloc PE / Size 0 / 0
Free PE / Size 50 / 200.00 MB
VG UUID iE7uoy-boR3-N6Cv-91Gf-G5vE-ftD6-gSGVlB
3.删除与添加逻辑卷
[root@san iscsi]# vgreduce vg0 /dev/sda5
Removed "/dev/sda5" from volume group "vg0"
[root@san iscsi]# vgextend vg0 /dev/sda5
Volume group "vg0" successfully extended
4. PE 和LV 大小的关系
In order to limit the Linux kernel memory usage, there is a limit of 65,536 physical extents (PE) per logical volume (LV). Hence, the LVM PE size will directly determine the maximum size of a logical volume (LV)! For example, 4MB PE size (the default PE size) will limit single logical volume (LV) to 256GB, 16MB PE size will limit single LV to grow beyond 1TB, etc.
Beside the PE size, the maximum size of single LV is also limited by CPU architecture and Linux kernel version:
Linux kernel version 2.4.x limit the maximum LV size to 2TB.
Some older Linux kernel prior to 2.4.x, the maximum LV size is limited to 1TB (caused by the integer signedness problems in the block layer).
The combination of 32-bit CPU and Linux kernel version 2.6.x, the limit of logical volume size is maximized at 16TB.
For Linux kernel 2.6.x running on 64-bit CPU, the maximum LV size is 8EB (extremely terrible big storage for this time being!)
这段问题里有如下2个重点信息:
1. PE 的大小决定LV 的容量,默认4M 的PE 最大支持的256G 的LV。 16M的PE 最大支持1TB的LV。
2. 影响LV 容量的还有CPU 架构。 对于32bit 下,Linux 内核为2.6.X的支持16TB,64bit 下,Linux 内核为2.6.x的支持8EB。
所以如果要想支持大量的LV。 那么对在创建LV 的时候,还需要指定PE 的大小。 这个我们在vgcreate命令中加一个-s 参数即可:
[root@san iscsi]# vgremove vg0
Volume group "vg0" successfully removed
[root@san iscsi]# vgcreate -s 16MB vg0 /dev/sda5 /dev/sda6
Volume group "vg0" successfully created
[root@san iscsi]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg0" using metadata type lvm2
Device '/dev/sda6' has been left open.
Device '/dev/sda5' has been left open.
[root@san iscsi]# vgdisplay
--- 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 192.00 MB
PE Size 16.00 MB -这里我们看到PE 改成16MB了。
Total PE 12
Alloc PE / Size 0 / 0
Free PE / Size 12 / 192.00 MB
VG UUID A9w4ho-3Fdo-ELYl-VRqY-yhaZ-61rt-68sXsi