首页 > 代码库 > Linux入门之磁盘管理(8)LVM逻辑卷的使用

Linux入门之磁盘管理(8)LVM逻辑卷的使用

Linux入门之磁盘管理(8)LVM逻辑卷的使用

Linux中虽然有raid来保证数据的稳定以及磁盘性能的提高,但是其扩展性并不是很好,在很多生产环境中,都是数据正在使用中,在这时如果中断一段时间就会有很大的损失,因此Linux提供了LVM虚拟逻辑卷的概念,同样多个磁盘设备或分区设备组合在一起,但是,如果空间需要缩减或者扩展,可以很方便的进行动态改变,甚至进行数据快照。

 

逻辑卷管理器(LVM):

1、允许对卷进行方便操作的抽象层,包括重新定义文件系统的大小

2、允许在多个目录设备间重新组织文件系统

(1)将设备指定为物理卷

(2)用一个或多个物理卷来创建一个卷组

(3)物理卷是用来固定大小的物理区域(Physical Extent, PE)来定义的

(4)在物理卷上创建的逻辑卷是由物理区域(PE)组成的

(5)可以在逻辑卷上创建文件系统   

 

LVM的需要:

dm: device mapper :将一个或多个底层块设备组成一个逻辑设备的模块

注意:内核必须支持此模块,否则无法使用lvm功能

设备名:/dev/dm-#

软连接:/dev/mapper/VG_NAME-LV_NAME

如:/dev/mapper/vol0-root

/dev/VG_NAME/LV_NAME

如:/dev/vol0/root

当pv被创建之后只有被加入指定创建的vg组,才会被划分PE,而Vg组管理每个pv设备,Lvm逻辑创建后指定大小使用的组不一定就是有序的,此时没有了各个分区以及各个设备的概念,然后扩展LV时就会向各个vg组中抽取PE使用,然后将PE标记为LE用于使用,如果缩减LV,也就是将LE移除变成PE

技术分享 

Lvm逻辑卷管理相关命令

pv管理命令

pvcreate   创建pv物理卷

  pvcreate /dev/dev_file...   #将一个或多个磁盘设备创建为pv物理卷 

pvremove   移除pv物理卷

  pvremove /dev/dev_pvfile...     #将一个或多个磁盘设备从pv物理卷移除

pvscan    扫描pv       

pvs      列出pv列表

  pvs /dev/pv_file            #只列出指定pv 

pvdisplay  查看pv详细信息  

  pvdisplay  /dev/dev_pvfile     #查询指定pv物理卷的详细信息

pvmove    迁移指定pv下的PE分配到其它pv的PE中

  pvmove /dev/dev_pvfile        #将指定pv中的PE迁移至其它pv中

vg管理命令

vgcreate   创建vg组

   vgcreate VG_NAME [-s PE_SIZE] /dev/pv_file  #将指定pv加入到名为VG_NAME的VG组中,分配PE 

vgremove   移除vg组

   vgremove /dev/vg_file

vgextend   扩展vg加入pv

   vgextend VG_NAME /dev/new_pv_file   #新增pv物理卷到指定VG组中

vgreduce   缩减vg移除pv

   vgreduce VG_NAME /dev/pv_file      #移除指定VG组中的pv成员

vgs      查看vg列表           

   vgs  VG_NAME                 #只列出指定VG信息   

vgdisplay  查看vg组详细信息

   vgdisplay VG_NAME              #示指定VG组的详细信息

lv管理命令

  lvcreate  创建逻辑卷

    lvcreate -n LV_NAME -L [SIZE] VG_NAME   #创建指定大小逻辑卷,并从指定VG组中分配LE

     lvcreate -n LV_NAME -L [SIZE] -p r -s /dev/vg/lv_file  #创建基于指定lv逻辑卷的快照卷

  lvextend  扩展逻辑卷

     lvextend [[+]SIZE] /dev/vg/lv_file  #扩展指定逻辑卷的大小,+SIZE为增加多少,SIZE为增加到多少

  lvreduce  缩减逻辑卷

     lvreduce [-[SIZE]] /dev/vg/lv_file  #缩减指定逻辑卷的大小,-SIZE为缩减多少,SIZE为缩减到多少

  lvresize  重置lv物理大小

     lvresize -L SIZE  /dev/vg/lvfile   #重置逻辑卷的物理实际大小

其它命令

  resizefs /dev/vg/lvfile SIZE           #重置逻辑卷的物理实际大小,只适用于ext系列文件系统

  lvextend -r -l +100%FREE /dev/myvg/lvtest  #同时扩展物理大小和逻辑卷大小,使用剩余所有PE 

  xfs_growfs /dev/xfs_dev              #专门用于扩展xfs文件系统类物理大小,使用所有剩余PE


使用案例-阶段1:

1、准备分区设备:

#准备lvm类型分区或设备

[root@mzf ~]# fdisk -l /dev/sdb 2> /dev/null | grep ‘^/.*‘
/dev/sdb1             1         132     1060258+  8e  Linux LVM
/dev/sdb2            133        264     1060290   8e   Linux LVM
/dev/sdb3            265        396     1060290   8e   Linux LVM
/dev/sdb4            397        2610    17783955   5  Extended
/dev/sdb5            397        528     1060258+  8e  Linux LVM
/dev/sdb6            529        660     1060258+  8e  Linux LVM

#在使用fdisk中指定类型为Linux Lvm,设置为8e即可,可以使用以下命令来查看对应类型的code列表

[root@mzf ~]# echo -e ‘l\nq‘ | fdisk /dev/sdb 2> /dev/null | grep -i --color -o ‘..[[:space:]]\+linux.*lvm‘
8e  Linux LVM


2、新增PV卷:

#先选出3个分区设备创建为pv

[root@mzf ~]# pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created

解析:pvcreate支持分组表示多个设备,suceessfully表示创建成功

#查看pv成员,显示有3个,各种1G,但是没有分配VG组

[root@mzf ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---- 1.01g 1.01g
  /dev/sdb2       lvm2 ---- 1.01g 1.01g
  /dev/sdb3       lvm2 ---- 1.01g 1.01g

#重新扫描pv,这里为了再次确认pv卷列表中的PV设备

[root@mzf ~]# pvscan

  PV /dev/sdb1                      lvm2 [1.01 GiB]

  PV /dev/sdb2                      lvm2 [1.01 GiB]

  PV /dev/sdb3                      lvm2 [1.01 GiB]

  Total: 3 [3.03 GiB] / in use: 0 [0   ] / in no VG: 3 [3.03 GiB]

#使用pvdisplay查看当前pv详细信息,信息过长,因此这里进行截取部分重要信息

#查看PV及对应设备

[root@mzf ~]# pvdisplay | grep ‘\<\(VG\|PV\)\>.*Name‘
  PV Name               /dev/sdb1
  VG Name               
  PV Name               /dev/sdb2
  VG Name               
  PV Name               /dev/sdb3
  VG Name

注意:这里没有创建vg也就没有分配PE,下面创建vg组:

 

3、创建VG组,生成PE

#创建vg0组,名为myvg,分配pv卷sdb{1,2,3}3个,默认不指定PE块大小未4M

[root@mzf ~]# vgcreate myvg /dev/sdb{1,2,3}
  Volume group "myvg" successfully created

#查看vg组大小、PV个数

[root@mzf ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   0   0 wz--n- 3.02g 3.02g

#重新扫描vg组

[root@mzf ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2

#重新扫描pv,pv已经有了VG组,名为myvg

[root@mzf ~]# pvscan
  PV /dev/sdb1   VG myvg            lvm2 [1.01 GiB / 1.01 GiB free]
  PV /dev/sdb2   VG myvg            lvm2 [1.01 GiB / 1.01 GiB free]
  PV /dev/sdb3   VG myvg            lvm2 [1.01 GiB / 1.01 GiB free]
  Total: 3 [3.02 GiB] / in use: 3 [3.02 GiB] / in no VG: 0 [0   ]

#查看PE大小分配

[root@mzf ~]# vgdisplay myvg | grep ‘PE.*‘
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       0 / 0   
  Free  PE / Size       774 / 3.02 GiB

解析:这里我们发现PE被划分4M一个,总共有774个PE,使用0个。

 

 

4、创建Lv逻辑卷

#创建30M的lv逻辑卷,名为lv0,从VG组myvg中的PV成员分配PE标记为LE空间表示lv逻辑卷的块

[root@mzf ~]# lvcreate -n lv0 -L 30M myvg
  Rounding up size to full physical extent 32.00 MiB
  Logical volume "lv0" created.

#查看lv信息,发现居然为32M,这里有小误差是正常的

[root@mzf ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync   Convert
  lv0  myvg -wi-a----- 32.00m

#重新扫描lv                                            

[root@mzf ~]# lvscan

  ACTIVE            ‘/dev/myvg/lv0‘ [32.00 MiB] inherit

#为lv0逻辑卷创建文件系统,类型为ext4

[root@mzf ~]# mke2fs -t ext4 /dev/myvg/lv0

#挂载lv0逻辑卷

[root@mzf ~]# mount /dev/myvg/lv0 /mnt/lv0

#查看挂载属性,确认挂载成功

[root@mzf ~]# mount | grep ‘lv0‘
/dev/mapper/myvg-lv0 on /mnt/lv0 type ext4 (rw)

#加入一个文本文件

[root@mzf ~]# cp /etc/issue /mnt/lv0/

#查看源文件内容

[root@mzf ~]# cat /mnt/lv0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

#修改文件内容

[root@mzf ~]# sed -i ‘$ a \add new line‘ /mnt/lv0/issue
[root@mzf ~]# cat /mnt/lv0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
add new line

 

使用案例-阶段2:

5、逻辑卷大小的动态调整解析:

在进行逻辑卷大小之前,需要知道一个简单的概念,逻辑卷在进行扩展时,是需要配合时间物理大小进行扩展的,扩展后的总大小不能超过物理卷实际总大小,而进行逻辑卷缩减时物理卷也要同步缩减,逻辑卷就包含于物理卷中,如下图:

技术分享 

6、扩展逻辑卷:

#查看此时逻辑卷大小,总大小为30M左右,剩余25M

[root@mzf ~]# df -h | grep ‘myvg-lv0‘
/dev/mapper/myvg-lv0   27M  397K   25M   2% /mnt/lv0

说明:第一列表示lv0设备映射文件,第2列表示总大小,为27M。

#查看myvg组中剩余PE

[root@mzf ~]# vgs myvg
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   1   0 wz--n- 3.02g 2.99g

解析:这里剩余还有很多,因此扩展30M

#扩展lv0逻辑大小增加 30M

[root@mzf ~]# lvextend -L +30M /dev/myvg/lv0
   Rounding size to boundary between physical extents: 32.00 MiB.
   Size of logical volume myvg/lv0 changed from 32.00 MiB (8 extents) to 64.00 MiB (16 extents).
Logical volume lv0 successfully resized.

解析:这里显示扩展32M,最终为64M,此时我们检查lv大小

[root@mzf ~]# lvs
  LV   VG   Attr  LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  myvg -wi-ao---- 64.00m

解析:这里已经从32M变为64M,表示逻辑大小扩展成功

#最后一步,检查物理大小是否改变

[root@mzf ~]# df -h | grep ‘myvg.*lv0‘
/dev/mapper/myvg-lv0   27M  397K   25M   2% /mnt/lv0

#这里发现,任然没有改变,因此我们需要重新设置物理卷同步大小

[root@mzf ~]# resize2fs -p /dev/myvg/lv0
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/lv0 is mounted on /mnt/lv0; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/lv0 to 65536 (1k) blocks.
The filesystem on /dev/myvg/lv0 is now 65536 blocks long.

#再次查看分逻辑物理大小,已经改变,已经从27M变成58M

[root@mzf ~]# df -h | grep ‘myvg.*lv0‘
/dev/mapper/myvg-lv0   58M  651K   55M   2% /mnt/lv0

#下面查看文件是否正常:

[root@mzf ~]# cat /mnt/lv0/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
add new line

 

7、缩减逻辑卷:

注意事项:

1、不能在线缩减,得先卸载;

2、确保缩减后的大小依然能存储原有的所有数据;

3、在缩减之前应该先前行检查文件系统,以确保文件系统处于停止状态

 

缩减操作:

#先查看物理空间大小,物理卷使用651K,剩余55M

[root@mzf ~]# df -lh | grep ‘myvg.*lv0‘
/dev/mapper/myvg-lv0   58M  651K   55M   2% /mnt/lv0

#卸载逻辑卷

[root@mzf ~]# umount /dev/myvg/lv0

#强行检查

[root@mzf ~]# e2fsck -f /dev/myvg/lv0 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/lv0: 12/16384 files (8.3% non-contiguous), 6822/65536 blocks

#查看先在lv0大小

[root@mzf ~]# lvs
  LV   VG   Attr  LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  myvg -wi-a----- 64.00m

#要缩减30M,物理卷使用651K,剩余55M,因此要设置物理卷总大小不得小于651K

[root@mzf ~]# resize2fs /dev/myvg/lv0 28
resize2fs 1.41.12 (17-May-2010)
resize2fs: New size smaller than minimum (8870)

#缩减逻辑卷

[root@mzf ~]# lvreduce -L -30M /dev/myvg/lv0 
  Rounding size to boundary between physical extents: 28.00 MiB.
  WARNING: Reducing active logical volume to 36.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/lv0? [y/n]: y
  Size of logical volume myvg/lv0 changed from 64.00 MiB (16 extents) to 36.00 MiB (9 extents).
  Logical volume lv0 successfully resized.

#再次挂载设备

[root@mzf ~]# df -lh | grep ‘/mnt/lv0‘
/dev/mapper/myvg-lv0   31M  445K   29M   2% /mnt/lv0

#再次查看文件

[root@mzf ~]# cat /mnt/lv0/issue 
CentOS release 6.8 (Final)
Kernel \r on an \m
add new line

注意事项:如果需要扩展,发现剩余pv不够用,可以先添加pv设备然后加入指定vg值,分配PE空间后再进行扩展,如果缩减必须先卸载设备,不然会损坏设备数据,然后强行检查,确认无误再进行操作,缩减必须先缩减物理卷再操作逻辑。如果移除逻辑卷,需要lvremove先移除,然后移除vg,最后移除pv,如果pv有数据,想移除pv,得先pvmove移动PE空间至其它PE

本文出自 “神剑特兰克斯” 博客,请务必保留此出处http://mengzhaofu.blog.51cto.com/10085198/1845365

Linux入门之磁盘管理(8)LVM逻辑卷的使用