LVM全称为逻辑卷管理,是目前红帽主推的一种磁盘管理机制,普通的磁盘分区管理方式在逻辑分区划分好之后就无法再改变其大小,而LVM则可以解决这个问题,它主要通过将块设备(磁盘分区)设置为PV(物理卷),再将一个或多个PV组建成一个VG(逻辑卷组),再从VG中创建LV(逻辑卷),而VG中的PV数量可以增减,同样LV的大小也可以根据需求来增减。

在centos6中的示例:

1、创建一个大小为10G的逻辑卷并挂载使用。

(1)创建一个大小为20G的磁盘分区,并将此磁盘分区类型ID设置为8e(Linux LVM)。

[root@localhost ~]# fdisk /dev/sdb


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1  

First cylinder (1-6527, default 1): 

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +20G


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!


Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]# partx -a /dev/sdb

BLKPG: Device or resource busy

error adding partition 1

(2)将/dev/sdb1设置为PV。

[root@localhost ~]# pvcreate /dev/sdb1

  Physical volume "/dev/sdb1" successfully created

(3)创建一个VG,并使/dev/sdb1成为其成员。

[root@localhost ~]# vgcreate myvg /dev/sdb1

  Volume group "myvg" successfully created

*可使用-s 选项指定PE大小,创建后如果再要修改则只能重新创建VG;如果LVM版本号为1,则默认4M的PE将导致LV最大只能到256G,LVM2则没有这个限制。

(4)在myvg中创建一个大小为10G的LV。

[root@localhost ~]# lvcreate -L 10G -n lvtest myvg

  Logical volume "lvtest" created.

(5)格式化并挂载此LV。

[root@localhost ~]# mkfs.ext4 /dev/myvg/lvtest 

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

655360 inodes, 2621440 blocks

131072 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2684354560

80 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632


Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 26 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]# mount /dev/myvg/lvtest /test

2、扩展LV的大小至30G。

(1)扩展VG的大小

[root@localhost ~]# vgextend myvg /dev/sdb2

  Volume group "myvg" successfully extended

(2)扩展LV的大小

[root@localhost ~]# lvextend -L +20 /dev/myvg/lvtest 

  Size of logical volume myvg/lvtest changed from 10.00 GiB (2560 extents) to 10.02 GiB (2565 extents).

  Logical volume lvtest successfully resized

(3)扩展此LV文件系统的大小

[root@localhost ~]# resize2fs /dev/myvg/lvtest

resize2fs 1.41.12 (17-May-2010)

Filesystem at /dev/myvg/lvtest is mounted on /test; on-line resizing required

old desc_blocks = 1, new_desc_blocks = 1

Performing an on-line resize of /dev/myvg/lvtest to 2626560 (4k) blocks.

The filesystem on /dev/myvg/lvtest is now 2626560 blocks long.

3、缩减此LV的大小至5G

(1)卸载此LV

[root@localhost ~]# umount /dev/myvg/lvtest

(2)强制检测此LV

[root@localhost ~]# fsck.ext4 -f /dev/myvg/lvtest

e2fsck 1.41.12 (17-May-2010)

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/dev/myvg/lvtest: 11/663552 files (0.0% non-contiguous), 80177/2626560 blocks

(3)缩减此LV中文件系统大小至5G

[root@localhost ~]# resize2fs /dev/myvg/lvtest 5G

resize2fs 1.41.12 (17-May-2010)

Resizing the filesystem on /dev/myvg/lvtest to 1310720 (4k) blocks.

The filesystem on /dev/myvg/lvtest is now 1310720 blocks long.

(4)缩减此LV的大小至5G

[root@localhost ~]# lvreduce -L 5G /dev/myvg/lvtest 

  WARNING: Reducing active logical volume to 5.00 GiB

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce lvtest? [y/n]: y

  Size of logical volume myvg/lvtest changed from 10.02 GiB (2565 extents) to 5.00 GiB (1280 extents).

  Logical volume lvtest successfully resized

(5)重新挂载此LV

[root@localhost ~]# mount /dev/myvg/lvtest /test

(6)查看此LV的目前的大小

[root@localhost ~]# lvdisplay /dev/myvg/lvtest 

  --- Logical volume ---

  LV Path                /dev/myvg/lvtest

  LV Name                lvtest

  VG Name                myvg

  LV UUID                ovpqxD-lLjJ-lNAk-Ga5a-AV2y-gaVS-h8PpyQ

  LV Write Access        read/write

  LV Creation host, time localhost.localdomain, 2019-01-08 10:26:40 +0800

  LV Status              available

  # open                 1

  LV Size                5.00 GiB

  Current LE             1280

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:3

*缩减LV后的空间大小不能小于文件系统已使用的空间大小