ps: 红字字体为重要部分, 仔细看 

一、什么是LVM.?

      LVM是Logical Volume Manager(逻辑卷管理)的简写, 它是Linux环境下磁盘分区继续管理的一种机制, 它由Heinz Mauelshagen在Linux2.4内核上实现;

二、为什么要用LVM.?

       文件系统建立在逻辑卷上, 而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足需求;

       使用LVM主要是方便管理、增加了系统的扩展性, 可以随时按要求增大,或根据使用情况对各逻辑进行调整,当系统空间不足而加入新的磁盘时,不必把用户的数据从原硬盘迁移到新硬盘, 而只需把新硬盘加入到卷组并扩充逻辑卷即可;

三、配置与管理

     1. 测试环境;

[root@Centos1 ~]# cat /etc/redhat-release && uname -r
CentOS release 6.6 (Final)
2.6.32-504.12.2.el6.x86_64

     2. 创建分区;

[root@Centos1 ~]# fdisk /dev/sdc
=================================================================
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb4007a2c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

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-2610, default 1):     #起始柱面
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +8G      #分区大小为8G
Command (m for help): n                 #新建一个分区; 
Command action
   e   extended
   p   primary partition (1-4)
p                                       #创建主分区 
Partition number (1-4): 2               #分区编号 
First cylinder (1046-2610, default 1046):      #起始柱面
Using default value 1046
Last cylinder, +cylinders or +size{K,M,G} (1046-2610, default 2610): +8G   #分区大小为8G 

Command (m for help): n                #新建一个分区;  
Command action
   e   extended
   p   primary partition (1-4)
p                                      #创建主分区  
Partition number (1-4): 3              #分区编号  
First cylinder (2091-2610, default 2091):     #起始柱面 
Using default value 2091
Last cylinder, +cylinders or +size{K,M,G} (2091-2610, default 2610): +8G   #分区大小为8G  
Value out of range.                                           #提示硬盘所剩容量没有8G.
Last cylinder, +cylinders or +size{K,M,G} (2091-2610, default 2610):    
#结束柱面为默认. 大概还剩4G.
Using default value 2610

Command (m for help): p                      #查看分区
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb4007a2c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1045     8393931   83  Linux
/dev/sdc2            1046        2090     8393962+  83  Linux
/dev/sdc3            2091        2610     4176900   83  Linux

Command (m for help): t                      #更改分区id
Partition number (1-4): 1                    #分区编号
Hex code (type L to list codes): 8e          #LVM的分区id为8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t                      #更改分区id 
Partition number (1-4): 2                    #分区编号 
Hex code (type L to list codes): 8e          #LVM的分区id为8e 
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): t                      #更改分区id  
Partition number (1-4): 3                    #分区编号  
Hex code (type L to list codes): 8e          #LVM的分区id为8e 
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p                     #查看分区 
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb4007a2c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1045     8393931   8e  Linux LVM
/dev/sdc2            1046        2090     8393962+  8e  Linux LVM
/dev/sdc3            2091        2610     4176900   8e  Linux LVM

Command (m for help): w                     #写入分区表
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

wKioL1URk8HSCjP5AAG-YtDPoXE033.jpg

=================================================================

     3. 创建物理卷(PV);

[root@Centos1 ~]# pvcreate /dev/sdc{1,2,3}
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
  Physical volume "/dev/sdc3" successfully created
[root@Centos1 ~]# pvdisplay                    #列出已经创建的物理卷;

wKiom1URkqXh4-GAAAMBpLvlzGw097.jpg

     4. 创建卷组VG01(VG);

[root@Centos1 ~]# vgcreate VG01 /dev/sdc{1,2,3}
  Volume group "VG01" successfully created
[root@Centos1 ~]# vgremove VG01                         #将卷组VG01移除;
  Volume group "VG01" successfully removed
[root@Centos1 ~]# vgdisplay                             #列出已经创建的卷组;
#默认PE大小为4MB, PE是卷组的最小存储的单元, 可以通过-s参数修改大小;

wKioL1URk-eTAfZrAAH20SJ55Gc327.jpg

     5. 分割500M给新的逻辑卷LV01(LV);

[root@Centos1 ~]# lvcreate -L 500M -n LV01 VG01
  Logical volume "LV01" created
[root@Centos1 ~]# lvdisplay                #列出已经创建的逻辑卷;

 wKioL1URk_mS9UFdAAGRc6pHiAk528.jpg

     6. 格式化逻辑卷;

[root@Centos1 ~]# mkfs.ext4 /dev/VG01/LV01

     7. 挂载逻辑卷;

[root@Centos1 ~]# mount /dev/VG01/LV01 /data
[root@Centos1 ~]# df -h

wKioL1URlBCSNCbtAADUYoc0VAg658.jpg

四、扩展逻辑卷、卷组和减少逻辑卷大小

     1. 逻辑卷LV01不够用了, 我们如何给它增加空间呢?

[root@Centos1 ~]# lvextend -L +500M /dev/VG01/LV01
[root@Centos1 ~]# resize2fs /dev/VG01/LV01          #同步文件系统
[root@Centos1 ~]# df -h

wKiom1URkvKieB1mAAD1ijOHox4277.jpg

      2. 扩展卷组;

[root@Centos1 ~]# vgextend VG01 /dev/sdd1     #注: 对sdd硬盘分区后一定要将分区id改为'8e'
[root@Centos1 ~]# vgdisplay

wKiom1URkw2x2tzVAAHn0F7e5h0092.jpg

      3. 减少逻辑卷大小;

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

注意: 文件系统大小和逻辑卷大小一定要保护一致才行. 如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费.如果逻辑卷小于文件系统,那数据就出问题了.

[root@Centos1 ~]# umount /data/                       #卸载/data目录;
[root@Centos1 ~]# e2fsck -f /dev/VG01/LV01            #检测剩余空间;

wKiom1URkx2AyAv_AAFrzymTK3o408.jpg

[root@Centos1 ~]# resize2fs /dev/VG01/LV01 600M           #将文件系统系统减少到700M;       
[root@Centos1 ~]# lvreduce -L 600 /dev/VG01/LV01          #将逻辑卷减少到700M;
[root@Centos1 ~]# mount /dev/VG01/LV01 /data
ps:  笔者练习时, 逻辑卷小于系统,

     4. 当磁盘或分区损坏时, 如何转移数据;

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

[root@Centos1 ~]# pvmove /dev/sdc1
  /dev/sdc1: Moved: 2.0%
  /dev/sdc1: Moved: 100.0%
[root@Centos1 ~]# vgreduce VG01 /dev/sdc1
  Removed "/dev/sdc1" from volume group "VG01"
[root@Centos1 ~]# pvremove /dev/sdc1
  Labels on physical volume "/dev/sdc1" successfully wiped

      5. 删除整个逻辑卷;

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

[root@Centos1 ~]# umount /dev/VG01/LV01
[root@Centos1 ~]# lvremove /dev/VG01/LV01 
Do you really want to remove active logical volume LV01? [y/n]: y
  Logical volume "LV01" successfully removed
[root@Centos1 ~]# vgremove VG01
  volume "VG01" successfully removed
[root@Centos1 ~]# pvremove /dev/sdc1
  No PV label found on /dev/sdc1.                    #之前已卸载
[root@Centos1 ~]# pvremove /dev/sdc2
  Labels on physical volume "/dev/sdc2" successfully wiped
[root@Centos1 ~]# pvremove /dev/sdc3
  Labels on physical volume "/dev/sdc3" successfully wiped

PS:  删除完了, 别忘记修改分区ID标识, 将'8e(LVM)'改为'83(Linux分区)';