LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上的一个逻辑层,使用户在无需停机的情况下可以方便地调整各个分区大小。


术语:

*物理存储介质(PhysicalStorageMedia)

指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

*物理卷(Physical Volume,PV)

指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

*卷组(Volume Group,VG)

类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

*逻辑卷(Logical Volume,LV)

类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

*物理块(Physical Extent,PE)

每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

*逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。


配置与管理:

一、测试环境:

[root@bright ~]# cat /etc/centos-release && uname -r
CentOS release 6.6 (Final)
2.6.32-504.el6.x86_64

二、创建分区。

分区步骤参考我的另一篇文章

linux  fdisk分区

三、创建LVM分区


1)创建逻辑卷

创建物理卷

[root@bright ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

列出已经创建的物理卷

[root@bright ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "1.53 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.53 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1RH1jY-4ybr-tL1L-NCn0-ArgQ-35uu-wMlYB3
   
  "/dev/sdb2" is a new physical volume of "1.53 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               1.53 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               dqXQgM-zL9b-fDv7-Cqct-J6gc-cw5n-QBAMno

创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组

[root@bright ~]# vgcreate vgdata /dev/sdb1  /dev/sdb2
  Volume group "vgdata" successfully created

列出已经建好的卷组

# 默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

[root@bright ~]# vgdisplay
  --- Volume group ---
  VG Name               vgdata
  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               3.05 GiB
  PE Size               4.00 MiB
  Total PE              782
  Alloc PE / Size       0 / 0   
  Free  PE / Size       782 / 3.05 GiB
  VG UUID               DjB5I2-DUFN-5tW6-jL6h-Bgkg-eQVV-HWSwsj

分割500M给新的逻辑卷testlvdata

[root@bright ~]# lvcreate -L 500M -n testlvdata vgdata
  Logical volume "testlvdata" created

列出当前的逻辑卷

[root@bright ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vgdata/testlvdata
  LV Name                testlvdata
  VG Name                vgdata
  LV UUID                fO3dPO-joef-zBwf-1frT-pUsQ-hiUV-UfT1da
  LV Write Access        read/write
  LV Creation host, time bright.com, 2015-03-23 08:11:03 +0800
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

格式化逻辑卷

[root@bright ~]# mkfs.ext4 /dev/vgdata/testlvdata 
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67633152
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载逻辑卷

[root@bright ~]# mount /dev/vgdata/testlvdata /data

2) 扩展逻辑卷

逻辑卷lvdata1不够用了,我们如何给他增加空间呢?

给lvdata1增加500M空间。

[root@bright ~]# lvextend -L +500M /dev/vgdata/testlvdata 
  Size of logical volume vgdata/testlvdata changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
  Logical volume testlvdata successfully resized

同步文件系统

[root@bright ~]# resize2fs /dev/vgdata/testlvdata 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vgdata/testlvdata is mounted on /data; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/vgdata/testlvdata to 1024000 (1k) blocks.
The filesystem on /dev/vgdata/testlvdata is now 1024000 blocks long.


3)扩展卷组

当卷组不够用的情况下,我们也是可以扩展卷组的。我们再创建一个新的分区叫做/dev/sdb3.

把sdb3加入到卷组vgdata中(本案新分/dev/sdb3 有800M空间)

[root@bright ~]# vgextend vgdata /dev/sdb3
  Physical volume "/dev/sdb3" successfully created
  Volume group "vgdata" successfully extended
[root@bright ~]# vgdisplay
  --- Volume group ---
  VG Name               vgdata
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.82 GiB
  PE Size               4.00 MiB
  Total PE              977
  Alloc PE / Size       250 / 1000.00 MiB
  Free  PE / Size       727 / 2.84 GiB
  VG UUID               3wEKAD-D3cv-Z4X9-hKcq-qnm0-OoDN-UAuSWL

4)减少逻辑卷大小

卸载 --> e2fsck 检测剩余空间 --> resize2fs 同步文件系统 --> 使用lvreduce命令将逻辑卷减少

注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。


umount  /data

e2fsck -f /dev/mapper/vgdata-testdata

[root@bright ~]# e2fsck -f /dev/mapper/vgdata-testlvdata 
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/vgdata-testlvdata: 11/254000 files (0.0% non-contiguous), 42797/1024000 blocks

resize2fs /dev/mapper/vgdata-testdata 600M

[root@bright ~]# resize2fs /dev/mapper/vgdata-testlvdata 600M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vgdata-testlvdata to 614400 (1k) blocks.
The filesystem on /dev/mapper/vgdata-testlvdata is now 614400 blocks long.

lvreduce -L 600M /dev/vgdata/testdata

[root@bright ~]# lvreduce -L 600 /dev/vgdata/testlvdata 
  WARNING: Reducing active logical volume to 600.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlvdata? [y/n]: y
  Size of logical volume vgdata/testlvdata changed from 1000.00 MiB (250 extents) to 600.00 MiB (150 extents).
  Logical volume testlvdata successfully resized

mount /dev/vgdata/testdata /data


5) 当磁盘或分区损坏时,如何转移数据

pvmove 转移空间数据 --> vgreduce命令将即将坏的磁盘或者分区从卷组vgdata里面移除除去 --> pvremove命令将即将坏的磁盘或者分区从系统中删除掉 --> 拆除或修复磁盘

pvmove /dev/sdb1 

vgreduce vgdata /dev/sdb1

pvremove  /dev/sdb1

[root@bright ~]# pvmove /dev/sdb1
  /dev/sdb1: Moved: 6.0%
  /dev/sdb1: Moved: 100.0%
[root@bright ~]# vgreduce vgdata /dev/sdb1
  Removed "/dev/sdb1" from volume group "vgdata"
[root@bright ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped



6) 删除整个逻辑卷

umount卸载逻辑卷 --> 修改配置文件/etc/fstab(若是之前更改过) --> lvremove 删除逻辑卷testdata --> vgremove 删除卷组vgdata --> pvremove 将物理卷转化成普通分区

umount /dev/vgdata/testdata

lvremove /dev/vgdata/testdata

vgremove vgdata

pvremove /dev/sdb2

pvremove /dev/sdb3

[root@bright ~]# umount /dev/vgdata/testlvdata 
[root@bright ~]# lvremove /dev/vgdata/testlvdata 
Do you really want to remove active logical volume testlvdata? [y/n]: y
  Logical volume "testlvdata" successfully removed
[root@bright ~]# vgremove vgdata
  Volume group "vgdata" successfully removed
[root@bright ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped
[root@bright ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped
[root@bright ~]#