一、感性认识LVM

[root@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vgdata-lvdata

                      953M  819M   87M  91% /mnt/lvdir

如上所示,/mnt/lvdir目录已经使用了91%的容量,怎么才能在不转移/mnt/lvdir存储数据的情况,安全扩展/mnt/lvdir目录的容量呢?那么接下来就需要了解和掌握LVM的相关知识。


二、理解LVM 

1、LVM位于磁盘分区和文件系统之间的逻辑层 

wKioL1UPrbfgnx8QAACThv68aSg019.jpg

2、如何将物理磁盘加入到LVM中呢?如下所示。

第一步:挂载两块新盘sdb和sdc

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

Disk /dev/sdc: 10.7 GB, 10737418240 bytes


第二步:分别从sdb和sdc取500M容量,其磁盘格式为LVM,操作方式如下

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

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1305, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): +500M


# 改变分区系统的ID号,其8e代表LVM分区

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): 8e                    #8e为LVM的分区格式

Changed system type of partition 1 to 8e (Linux LVM)


Command (m for help): p


Disk /dev/sdb: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1          62      497983+  8e  Linux LVM


Command (m for help): w


[root@localhost ~]partprobe /dev/sdb   #使分区表生效,无需重启


sdc与sdb的操作方式一致。

Disk /dev/sdc: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1          62      497983+  8e  Linux LVM


第三步:创建物理卷,即PV

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

  Physical volume "/dev/sdb1" successfully created

  Physical volume "/dev/sdc1" successfully created


第四步:创建卷组,即VG

[root@localhost ~]# vgcreate vgdata /dev/sdb1 /dev/sdc1 #vgdata是VG的名称

[root@localhost ~]# vgdisplay     #查看VG信息

  --- 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               968.00 MB        #容量为sdb1和sdc1之和

  PE Size               4.00 MB

  Total PE              242

  Alloc PE / Size       0 / 0

  Free  PE / Size       242 / 968.00 MB

  VG UUID               dlZka4-aBJY-4MWE-2Rbq-Djl7-xj3M-qVq8gd


第5步:创建逻辑卷,即lv

[root@localhost ~]# lvcreate -L 968M -n lvdata vgdata # -L:表示容量大小,-n表示逻辑卷的名称,vgdata是VG的名称

[root@localhost ~]# lvdisplay                       #查看lv的信息   

  --- Logical volume ---

  LV Name                /dev/vgdata/lvdata         #lv的路径

  VG Name                vgdata

  LV UUID                NtagXp-InFT-41fV-fXb9-JTD1-zHQ5-m3vUeP

  LV Write Access        read/write

  LV Status              available

  # open                 0

  LV Size                968.00 MB                  #lv的大小

  Current LE             242

  Segments               2

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:0


第6步:格式化lv,挂载到目录/mnt/lvdir

[root@localhost ~]# mkfs.ext3 /dev/vgdata/lvdata

[root@localhost ~]# mount /dev/vgdata/lvdata /mnt/lvdir

[root@localhost mnt]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vgdata-lvdata

                      953M   18M  888M   2% /mnt/lvdir

第7步:写入测试数据

[root@localhost lvdir]# cat /mnt/lvdir/testlv

test lv file


三、解决第一部分提到的扩容问题(这里提到的扩容只能针对lvm分区)。

1、按照如上第二步的操作,添加容量为500M的lvm分区/dev/sdc2;(注意:partprobe)

Device Boot      Start         End         Blocks   Id  System

/dev/sdc2              63         124      498015   8e  Linux LVM

2、创建PV

[root@localhost lvdir]# pvcreate /dev/sdc2

  Physical volume "/dev/sdc2" successfully created

3、VG操作

[root@localhost lvdir]# vgextend vgdata /dev/sdc2 #说明:为什么vgextend的容量需要添加到vgdata中呢?其原因在于,/mnt/lvdir挂载的分区目录为/dev/vgdata/lvdata,其中的vgdata就是创建的VG。

[root@localhost lvdir]# vgdisplay

  --- Volume group ---

  VG Name               vgdata

  System ID

  Format                lvm2

  Metadata Areas        3

  Metadata Sequence No  3

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                1

  Open LV               1

  Max PV                0

  Cur PV                3

  Act PV                3

  VG Size               1.42 GB     #此时vgdata的容量就变为了1.42G,就是sdb1,sdc1和sdc2的容量之和。

第三步:扩容/mnt/lvdir的容量(比如扩展300M),通过lvextend命令


[root@localhost lvdir]# lvextend -L +300M  /dev/vgdata/lvdata #-L +300M 表示添加300M

[root@localhost lvdir]# resize2fs /dev/vgdata/lvdata #重新设置其大小


第四步:df -h 发现其容量变成了1.3G,且以前存储的内容完好

[root@localhost lvdir]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vgdata-lvdata

                      1.3G  819M  371M  69% /mnt/lvdir


[root@localhost lvdir]# cat /mnt/lvdir/testlv

test lv file


其他参考资料:

http://www.aminglinux.com/bbs/thread-7621-1-1.html

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/22/3093405.html