SpongeBob

人生三种境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

LVM逻辑卷管理详解

       

        想象一下,当初我们安装主机的时候,只给了它50G内存,随着时间的增长,文件的使用者过多导致文件系统不够大,这时会怎样?我们大多数人会重新再安装一个硬盘,然后分区格式化,然后再复制数据等等。这样一个过程过于麻烦了一些,也更容易浪费磁盘空间,但我们有更简单的方法来扩展我们的磁盘空间,那就是LVM。

 

一.LVM介绍

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。
LVM - 优点:
LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。

小系统使用LVM的益处:

传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:

1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;

2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更

大的分区中;或采用符号连接的方式使用其它分区的空间。

3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。

当采用LVM时,情况有所不同:

1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;

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

3.文件系统建立在LVM上,可以跨分区,方便使用;

大系统使用LVM的益处:

1、在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。

2、在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求

平衡。

3、用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬

盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的

情况下。把用户数据从旧硬盘转移到新硬盘空间中去。

 

二.LVM的基础概念

1.pv(物理卷)

pv物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块。物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。

2.VG(卷组)

卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

3.LV(逻辑卷)

逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组。

4.PE(物理区域)

物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。

 VG,PE,LV之间关系如下图所示:

 

LVM将一些零碎的磁盘分区(PV)合并成一个较大的磁盘(VG),然后再根据需要对这个较大的磁盘(VG)划分成不同的小分区(LV),需要注意的是,这些小的分区是可以动态的扩展与缩小的,这就是LVM。

  

三.LVM的实现

创建LVM:

1.给磁盘划分分区或者在虚拟机上增加新的硬盘,如果是分区,分区ID设置为8e。

 

[root@centos6 ~]# 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): p

Disk /dev/sdb: 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: 0x0ea2fba4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  8e  Linux LVM
/dev/sdb2            1307        2482     9446220   8e  Linux LVM

Command (m for help): ^C
[root@centos6 ~]# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc939037b.
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): p

Disk /dev/sdd: 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: 0xc939037b

   Device Boot      Start         End      Blocks   Id  System

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): +1G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-2610, default 133): 
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-2610, default 2610): +2G

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdd: 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: 0xc939037b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         132     1060258+  8e  Linux LVM
/dev/sdd2             133         394     2104515   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

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

 

 

 

 2.创建PV:

将新创建的两个分区/dev/sdb1 /dev/sdb2转化成物理卷,主要是添加LVM属性信息并划分PE存储单元.

[root@centos6 ~]# pvcreate /dev/sdd1 /dev/sdd2
  Physical volume "/dev/sdd1" successfully created
  Physical volume "/dev/sdd2" successfully created

3.创建VG

创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组.可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

[root@centos6 ~]# vgcreate vgdata /dev/sdd1 /dev/sdd2
  Volume group "vgdata" successfully created

[root@centos6 ~]# vgs
Couldn't find device with uuid lV2vFN-dLdd-ZNzg-rf0i-QMjN-vNJm-URHTW6.
VG #PV #LV #SN Attr VSize VFree
testvg 3 1 0 wz-pn- 38.98g 31.98g
vgdata 2 0 0 wz--n- 3.01g 3.01g
[root@centos6 ~]# 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 P0WlyT-nv8l-NjCW-IlMC-AdEZ-xmei-LjIEya

Couldn't find device with uuid lV2vFN-dLdd-ZNzg-rf0i-QMjN-vNJm-URHTW6.
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 2
VG Size 38.98 GiB
PE Size 16.00 MiB
Total PE 2495
Alloc PE / Size 448 / 7.00 GiB
Free PE / Size 2047 / 31.98 GiB
VG UUID bRHHoW-wW9h-lgl7-pmf7-zodp-Piv1-DIamqj

4.创建逻辑卷LV

从物理卷vgdata上面分割500M给新的逻辑卷lvdata1.

[root@centos6 ~]# lvcreate -L 500M -n lvdata1 vgdata
  Logical volume "lvdata1" created.
[root@centos6 ~]# lvs
  Couldn't find device with uuid lV2vFN-dLdd-ZNzg-rf0i-QMjN-vNJm-URHTW6.
  LV      VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv  testvg -wi-a-----   7.00g                                                    
  lvdata1 vgdata -wi-a----- 500.00m  

[root@centos6 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vgdata/lvdata1
LV Name lvdata1
VG Name vgdata
LV UUID dYbKB7-kYMt-XwyY-4NCC-LeoJ-zq9i-8cDvLl
LV Write Access read/write
LV Creation host, time centos6.magedu.com, 2018-08-11 11:21:40 +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:1

--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID mMiXg8-AqSU-ASc9-oOxd-PBor-eWvh-W5pjPD
LV Write Access read/write
LV Creation host, time centos6.magedu.com, 2018-08-04 10:28:26 +0800
LV Status available
# open 0
LV Size 7.00 GiB
Current LE 448
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

 

5.文件系统阶段

1.使用mkfs.ext4命令在逻辑卷lvdata1上创建ext4文件系统.

[root@centos6 ~]# mkfs.ext4 /dev/vgdata/lvdata1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
First data block=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

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

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

2.将创建好的文件系统/data1挂载到/data1上.(创建好之后,会在/dev/mapper/生成一个软连接名字为”卷组-逻辑卷”)

[root@centos6 ~]# mount /dev/vgdata/lvdata1 /data1

  [root@centos6 ~]# mount |grep data1

 

1.扩展逻辑卷

给逻辑卷增加空间并不会影响以前空间的使用,所以无需卸载文件系统,设置完成之后,记得使用resize2fs命令来同步文件系统。

[root@centos6 ~]# 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.
[root@centos6 ~]# lvs
  LV      VG     Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv  testvg -wi-a-----    7.00g                                                    
  lvdata1 vgdata -wi-a----- 1000.00m   

  [root@centos6 ~]# resize2fs /dev/vgdata/lvdata1
   resize2fs 1.41.12 (17-May-2010)
   Resizing the filesystem on /dev/vgdata/lvdata1 to 1024000 (1k) blocks.
   The filesystem on /dev/vgdata/lvdata1 is now 1024000 blocks long.

 

 

2.缩小逻辑卷

确定要缩减为多大,至少能容纳原有的所有数据,逻辑卷缩减有风险,所以要卸载并强行检测文件系统

1.先卸载逻辑卷lv

2.然后通过e2fsck命令检测逻辑卷上空余的空间

3.使用resize2fs将文件系统减少到3G

4.再使用lvreduce命令将逻辑卷减少到3G

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

 

posted on 2018-08-11 11:02  青山揽流萤  阅读(945)  评论(0编辑  收藏  举报

导航