一、LVM简介

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
简单来说,屏蔽底层磁盘布局,便于动态管理磁盘容量

二、一些术语

(1)物理存储设备(The physical media):指系统的存储设备文件,如:/dev/hda1、/dev/sda等等。
(2)物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
(3)卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义。
(4)PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
(5) 逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以属于同一个卷组,也可以属于不同的多个卷组。
(6)LE(logical extent)逻辑区域:逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域大小。LE的大小和PE的大小一样。
(7)VGDA(Volume Group Descriptor Area)卷组描述符区域:和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的卷组描述符区域中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符和一些PE描述符。

三、常用命令

任务

PV

VG

LV

创建

pvcreate

vgcreate

lvcreate

删除

pvremove

vgremove

lvremove

扫描列表

pvscan

vgscan

lvscan

显示属性

pvdisplay

vgdisplay

lvdisplay

显示相关信息

pvs

vgs

lvs

扩展


vgextend

lvextend

缩减


vgreduce

lvreduce

创建逻辑卷三步骤
1.创建pv
2.创建vg
3.创建lv
删除逻辑卷三步骤
1.删除lv
2.删除vg
3.删除pv

四、创建逻辑卷

volume1在那个文件夹下 volume program_逻辑卷


以此图说明

1.添加三块硬盘大小分别为3G,2G,1G

[root@server ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   30G  0 disk
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sdb      8:16   0    3G  0 disk
sdc      8:32   0    2G  0 disk
sdd      8:48   0    1G  0 disk

2.将sdb划分为三个分区,打标签8e,sdc划分为两个分区,打标签8e,sdd不变
[root@server ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   30G  0 disk
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sdb      8:16   0    3G  0 disk
├─sdb1   8:17   0    1G  0 part
├─sdb2   8:18   0    1G  0 part
└─sdb3   8:19   0 1023M  0 part
sdc      8:32   0    2G  0 disk
├─sdc1   8:33   0    1G  0 part
└─sdc2   8:34   0 1023M  0 part
sdd      8:48   0    1G  0 disk

3.按图示创建pv
[root@server ~]# pvcreate /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2 /dev/sdd

Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
  Physical volume "/dev/sdd" successfully created

[root@server ~]# pvs

PV         VG   Fmt  Attr PSize    PFree
  /dev/sdb2       lvm2 ---     1.00g    1.00g
  /dev/sdb3       lvm2 ---  1023.00m 1023.00m
  /dev/sdc1       lvm2 ---     1.00g    1.00g
  /dev/sdc2       lvm2 ---  1023.00m 1023.00m
  /dev/sdd        lvm2 ---     1.00g    1.00g

4.创建vg
[root@server ~]# vgcreate vg0 /dev/sdb2 /dev/sdb3 /dev/sdc1 Volume group “vg0” successfully created
[root@server ~]# vgcreate vg1 /dev/sdc2 /dev/sdd Volume group “vg1” successfully created
[root@server ~]# vgs

VG   #PV #LV #SN Attr   VSize VFree
  vg0    3   0   0 wz--n- 2.99g 2.99g
  vg1    2   0   0 wz--n- 1.99g 1.99g

注:使用 -s 可指定pe大小,默认为4MB
比如[root@server ~]# vgcreate -s 8M vg1 /dev/sdc2 /dev/sdd5.创建lv
[root@server ~]# lvcreate -n lv1 -L 1G vg0 Logical volume “lv1” created.
[root@server ~]# lvcreate -n lv2 -L 1G vg0 Logical volume “lv2” created.
[root@server ~]# lvcreate -n lv3 -L 1G vg1 Logical volume “lv3” created.
[root@server ~]# lvs

LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg0  -wi-a----- 1.00g
  lv2  vg0  -wi-a----- 1.00g
  lv3  vg1  -wi-a----- 1.00g

注:-l 可指定pe的个数的大小
比如[root@server ~]# lvcreate -n lv3 -l 100 vg1 使用100个pe(默认4MB),即大小为400MB

6.分区情况
[root@server ~]# lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   30G  0 disk
├─sda1        8:1    0  200M  0 part /boot
├─sda2        8:2    0   20G  0 part /
└─sda3        8:3    0    2G  0 part [SWAP]
sdb           8:16   0    3G  0 disk
├─sdb1        8:17   0    1G  0 part
├─sdb2        8:18   0    1G  0 part
│ └─vg0-lv1 253:0    0    1G  0 lvm
└─sdb3        8:19   0 1023M  0 part
  ├─vg0-lv1 253:0    0    1G  0 lvm
  └─vg0-lv2 253:1    0    1G  0 lvm
sdc           8:32   0    2G  0 disk
├─sdc1        8:33   0    1G  0 part
│ └─vg0-lv2 253:1    0    1G  0 lvm
└─sdc2        8:34   0 1023M  0 part
  └─vg1-lv3 253:2    0    1G  0 lvm
sdd           8:48   0    1G  0 disk
└─vg1-lv3   253:2    0    1G  0 lvm
sr0          11:0    1  3.8G  0 rom  /mnt

7.格式化

[root@server ~]# mkfs.ext4 /dev/vg0/lv1[root@server ~]# mkfs.ext4 /dev/vg0/lv2[root@server ~]# mkfs.ext4 /dev/vg1/lv3

8.挂载

[root@server ~]# mkdir /lv{1,2,3}[root@server ~]# mount /dev/vg0/lv1 /lv1/[root@server ~]# mount /dev/vg0/lv2 /lv2/[root@server ~]# mount /dev/vg1/lv3 /lv3/[root@server ~]# df -h | grep lv
/dev/mapper/vg0-lv1  976M  2.6M  907M   1% /lv1
/dev/mapper/vg0-lv2  976M  2.6M  907M   1% /lv2
/dev/mapper/vg1-lv3  976M  2.6M  907M   1% /lv3

9.测试

[root@server ~]# touch /lv1/test[root@server ~]# touch /lv2/test[root@server ~]# touch /lv3/test[root@server ~]# ls /lv1 /lv2 /lv3
/lv1:
lost+found  test

/lv2:
lost+found  test

/lv3:
lost+found  test


五、修改逻辑卷大小

这里只以ext4格式的文件系统为例,xfs的文件系统只支持扩大逻辑卷,ext4支持扩大和缩减
操作之前需要先卸载(扩大不需要卸载),这里以lv1为实例
1.扩大
需保证vg容量足够使用,这里lv1使用的vg0还剩余1012MB
[root@server ~]# vgs

VG   #PV #LV #SN Attr   VSize VFree
  vg0    3   2   0 wz--n- 2.99g 1012.00m
  vg1    2   1   0 wz--n- 1.99g 1016.00m

扩大100个pe大小,即400MB
[root@server ~]# lvextend -l +100 /dev/vg0/lv1 再扩大100M大小
[root@server ~]# lvextend -L +100M /dev/vg0/lv1 重新读取
[root@server ~]# resize2fs /dev/vg0/lv1 此时大小应该为1.5G,最开始的1G+400MB+100MB=1.5G
[root@server ~]# df -h /dev/vg0/lv1

Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1  1.5G  3.0M  1.4G   1% /lv1

指定大小1.8G
[root@server ~]# lvextend -L 1.8G /dev/vg0/lv1 重新读取
[root@server ~]# resize2fs /dev/vg0/lv1 再次查看大小
[root@server ~]# df -h /dev/vg0/lv1

Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1  1.8G  3.0M  1.7G   1% /lv1

2.缩减
减小逻辑卷可能造成数据损坏!
需先卸载
[root@server ~]# umount /lv1 使用e2fsck工具检查逻辑卷lv1
[root@server ~]# e2fsck -f /dev/vg0/lv1 确认缩小
[root@server ~]# resize2fs /dev/vg0/lv1 1G[root@server ~]# lvreduce -L 1G /dev/vg0/lv1 重新挂载
[root@server ~]# mount /dev/vg0/lv1 /lv1 再次查看大小
[root@server ~]# df -h /dev/vg0/lv1

Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1  976M  2.6M  912M   1% /lv1

3.扩大和缩减逻辑卷
可以使用lvresize -r的命令实现扩大或缩小,-r表示一并执行resize2fs
[root@server ~]# lvresize -r -L 1.5G /dev/vg0/lv1[root@server ~]# lvs vg0/lv1

LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg0  -wi-ao---- 1.50g

[root@server ~]# lvresize -r -L 1.1G /dev/vg0/lv1[root@server ~]# lvs vg0/lv1

LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg0  -wi-ao---- 1.10g

六、移除逻辑卷

1.卸载
[root@server ~]# umount /lv1/ /lv2/ /lv3/ 2.移除lv
[root@server ~]# lvremove vg0/lv1 vg0/lv2 vg1/lv3 3.移除vg
[root@server ~]# vgremove vg0 vg1 4.移除pv
[root@server ~]# pvremove /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2 /dev/sdd 5.分区标签改回83或格式化硬盘
[root@server ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   30G  0 disk
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    2G  0 part [SWAP]
sdb      8:16   0    3G  0 disk
sdc      8:32   0    2G  0 disk
sdd      8:48   0    1G  0 disk

注:
扩大卷组vg时需要有新的分区或硬盘,使用vgextend命令
缩小vg时使用vgremove命令

如:给vg0扩大
vgextend vg0 /dev/sde 缩小
vgreduce vg0 /dev/sdd