LVM是Logical Volume Manager(逻辑卷管理)的简写,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。支持动态扩充磁盘空间。当系统空间不足而加入新的磁盘时,不必把用户的数据从原硬盘迁移到新硬盘, 而只需把新硬盘加入到卷组并扩充逻辑卷即可。

配置管理操作实验

首先从空的硬盘sdb上创建两个分区sdb1 1G, sdb2 2G。.

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         394     2104515   83  Linux

1)创建逻辑卷

pvcreate /dev/sdb1 /dev/sdb2   //创建物理卷

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

pvdisplay   //可以列出已经创建的物理卷

[root@localhost ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "1.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               o3pjpH-JQ9a-7f3U-HNpF-F3Oj-RdkR-AMdbWe
   
  "/dev/sdb2" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               2.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               do64fn-wLrN-kEYG-IZzr-woZM-OZYU-2Nk44g

vgcreate vgdata /dev/sdb1 /dev/sdb2        //创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组

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

vgdisplay //可以列出已经建好的卷组

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

[root@localhost ~]# 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.01 GiB
  PE Size               4.00 MiB
  Total PE              771
  Alloc PE / Size       0 / 0   
  Free  PE / Size       771 / 3.01 GiB
  VG UUID               3E4JrK-HH9M-ZVdJ-5Lys-7K04-QNTD-pFv0nK

lvcreate -L 500M -n lvdata1 vgdata  //分割500M给新的逻辑卷lvdata1

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

lvdisplay //列出当前的逻辑卷

[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vgdata/lvdata1
  LV Name                lvdata1
  VG Name                vgdata
  LV UUID                ejFuNL-FrPB-0dvl-oUnZ-LOYS-udcR-DNLIgm
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-03-25 18:01:23 +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

mkfs.ext4 /dev/vgdata/lvdata1  //格式化逻辑卷

[root@localhost ~]# mkfs.ext4 /dev/vgdata/lvdata1
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 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

mount /dev/vgdata/lvdata1  /wangchengjun  //挂载逻辑卷

[root@localhost /]# mount /dev/vgdata/lvdata1  /wangchengjun
[root@localhost /]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/sda3                    18G  1.3G   16G   8% /
tmpfs                       504M     0  504M   0% /dev/shm
/dev/sda1                   194M   25M  160M  14% /boot
/dev/mapper/vgdata-lvdata1  485M   11M  449M   3% /wangchengjun


2) 扩展逻辑卷

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

lvextend –L +500M /dev/vgdata/lvdata1  //给lvdata1增加500M空间。

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

resize2fs  /dev/vgdata/lvdata1  //同步文件系统

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


3)扩展卷组

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

vgextend vgdata /dev/sdb3  //把sdb3加入到卷组vgdata中

[root@localhost /]# vgextend vgdata /dev/sdb3
  Physical volume "/dev/sdb3" successfully created
  Volume group "vgdata" successfully extended


4)减少逻辑卷大小

卸载:umount  /wangchengjun

e2fsck 检测剩余空间:e2fsck -f /dev/vgdata/lvdata1

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

resize2fs 同步文件系统:resize2fs /dev/vgdata/lvdata1 3G 

将文件系统系统减少到3G

[root@localhost /]# resize2fs /dev/vgdata/lvdata1 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vgdata/lvdata1 to 786432 (4k) blocks.
The filesystem on /dev/vgdata/lvdata1 is now 786432 blocks long.

使用lvreduce命令将逻辑卷减少:lvreduce -L 3G /dev/vgdata/lvdata1 

将逻辑卷减少到3G;

[root@localhost /]# lvreduce -L 3G /dev/vgdata/lvdata1 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvdata1? [y/n]: y
  Size of logical volume vgdata/lvdata1 changed from 5.00 GiB (1280 extents) to 3.00 GiB (768 extents).
  Logical volume lvdata1 successfully resized

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


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

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

pvmove /dev/sdb1 

[root@Centos1 ~]# pvmove /dev/sdc1
  /dev/sdc1: Moved: 2.0%
  /dev/sdc1: Moved: 100.0%

vgreduce vgdata /dev/sdb1

[root@localhost /]# vgreduce vgdata /dev/sdb1
  Removed "/dev/sdb1" from volume group "vgdata"

pvremove  /dev/sdb1

[root@localhost /]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped


6) 删除整个逻辑卷

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

umount /dev/vgdata/lvdata1 

lvremove /dev/vgdata/lvdata1

[root@localhost /]# lvremove /dev/vgdata/lvdata1 
Do you really want to remove active logical volume lvdata1? [y/n]: y
  Logical volume "lvdata1" successfully removed

vgremove vgdata

[root@localhost /]# vgremove vgdata
  Volume group "vgdata" successfully removed

pvremove /dev/sdb2

[root@localhost /]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped