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

一、什么是LVM.?

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

二、为什么要用LVM.?

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

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

三、配置与管理

     1. 测试环境;

[root@Centos1 ~]# cat /etc/redhat-release && uname -rCentOS 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 disklabelBuilding 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 1Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +8G      #分区大小为8GCommand (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 1046Last 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 2091Last 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 2610Command (m for help): p                      #查看分区Disk /dev/sdc: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk 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  LinuxCommand (m for help): t                      #更改分区idPartition number (1-4): 1                    #分区编号Hex code (type L to list codes): 8e          #LVM的分区id为8eChanged 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 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk 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 LVMCommand (m for help): w                     #写入分区表The partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.

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

     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                    #列出已经创建的物理卷;

     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参数修改大小;

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

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

 

     6. 格式化逻辑卷;

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

     7. 挂载逻辑卷;

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

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

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

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

      2. 扩展卷组;

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

      3. 减少逻辑卷大小;

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

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

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

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

     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分区)';