LVM逻辑卷的扩容与缩容

一、逻辑卷简介

对于普通的分区,扩展度不高,一旦分区格式化完成,很难灵活的再增加或者减少分区大小。为了解决这个问题,可以使用LVM(逻辑卷)。基本过程是把物理磁盘或者分区初始化成为物理卷(PV),然后把PV加入VG(卷组),最后在VG上划分逻辑的分区(LVM),LVM可以当做普通的分区进行格式化和挂载。

LVM:可以动态调整分区大小;

PV:(physical volume)物理卷;

VG:(volume Group)卷组;

LV:(logical volume)逻辑卷;

二、LVM的创建

环境准备

(1)使用4个分区,每个分区容量均为1GB,且system ID为8e00;

(2)全部的分区整合成为一个VG,VG名称设置为vgbdqn,且PE的大小为16MB;

(3)创建一个名为lvbdqn的LV,容量大约2G;

(4)最终这个LV格式化为xfs的文件系统,且挂载在/bdqn/zj中;

1.根据上面的要求创建对应分区
注意:新添加一块磁盘sdb进行操作。

[root@localhost ~]# fdisk -l
...
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
...
[root@localhost ~]# gdisk /dev/sdb
...
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  8E00  Linux LVM
   2         2099200         4196351   1024.0 MiB  8E00  Linux LVM
   3         4196352         6293503   1024.0 MiB  8E00  Linux LVM
   4         6293504         8390655   1024.0 MiB  8E00  Linux LVM
[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
   8       16   20971520 sdb
   8       17    1048576 sdb1
   8       18    1048576 sdb2
   8       19    1048576 sdb3
   8       20    1048576 sdb4
  11        0    4554752 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1

2.创建PV
相关命令

pvcreate:将实体partition创建成为PV;

pvscan:搜寻目前系统里面任何具有PV的磁盘;

pvdisplay:显示出目前系统上面的PV状态;

pvremove:将PV属性移除,让该partition不具有PV属性;

创建pv

[root@localhost ~]# pvcreate /dev/sdb{1..4}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.

pvcreate可以将分区转化成PV。
注意这条指令的大括号和…用途。

[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
  PV /dev/sdb1                      lvm2 [1.00 GiB]
  PV /dev/sdb3                      lvm2 [1.00 GiB]
  PV /dev/sdb2                      lvm2 [1.00 GiB]
  Total: 5 [<23.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 4 [4.00 GiB]

显示每个PV与系统所有PV的信息。
最后一行显示的是:整体PV的量/已经被使用到VG的PV量/剩余的PV量

[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1tTeY3-3PKk-buPH-6tSa-PCSF-f1lP-HAXHvP

3.创建VG
相关命令

vgcreate:创建VG;

vgscan:搜寻系统上面是否有VG存在;

vgdisplay:显示目前系统上面的VG状态;

vgextend:在VG内增加额外的PV;

vgreduce:在VG内移除PV;

vgchange:设置VG是否启动(active);

vgremove:删除一个VG;

VG创建格式

vgcreate [-s PE大小[mgt]] VG名称 PV名称

选项与参数

-s:后面接PE的大小(size),单位可以是m,g,t(大小写均可)

与PV不同的是,VG的名称是自定义的。我们知道PV的名称其实就是partition的设备文件名,但是这个VG名称则可以随便取。
将刚创建的4个PV中3个PV创建成一个VG,并且指定PE为16MB。

[root@localhost ~]# vgcreate -s 16M vgbdqn /dev/sdb{1..3}
  Volume group "vgbdqn" successfully created
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found volume group "vgbdqn" using metadata type lvm2
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb1   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb2   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb3   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb4                      lvm2 [1.00 GiB]
  Total: 5 [<22.95 GiB] / in use: 4 [<21.95 GiB] / in no VG: 1 [1.00 GiB]

可以看到刚刚创建的PV /dev/sdb4还没有被使用。

[root@localhost ~]# vgdisplay vgbdqn
  --- Volume group ---
  VG Name               vgbdqn
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               2.95 GiB
  PE Size               16.00 MiB
  Total PE              189
  Alloc PE / Size       0 / 0   
  Free  PE / Size       189 / 2.95 GiB
  VG UUID               X5uTJs-3BVR-LQIA-hVne-33aA-6tek-pQtGbX

现在需要4个PV,所以这里再把刚才没有用到的/dev/sdb4添加进去。

[root@localhost ~]# vgextend vgbdqn /dev/sdb4
  Volume group "vgbdqn" successfully extended
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb1   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb2   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb3   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  PV /dev/sdb4   VG vgbdqn          lvm2 [1008.00 MiB / 1008.00 MiB free]
  Total: 5 [22.93 GiB] / in use: 5 [22.93 GiB] / in no VG: 0 [0   ]

4.创建LV
相关命令

lvcreate:创建LV;

lvscan:查询系统上面的LV;

lvdisplay:显示系统上面的LV状态;

lvextend:在LV里面增加容量;

lvreduce:在LV里面减少容量;

lvremove:删除一个LV;

lvresize:对LV进行容量大小的调整;

创建LV格式

lvcreate [-L N[mgt]] -n LV名称 VG名称

lvcreate [-l N] -n LV名称 VG名称

选项与参数

-L:后面接容量,容量的单位可以是M,G,T等;
注意最小单位为PE,因此这个数量必须要是PE的倍数,若不相符,系统会自行计算最相近的容量。

-l:后面可以接PE的“个数”,而不是数量。若要这么做,得要计算PE数。

-n:后面接的就是LV的名称;

创建LV

[root@localhost ~]# lvcreate -L 2G -n lvbdqn vgbdqn
  Logical volume "lvbdqn" created.

或者
lvcreate -l 128 -n lvbdqn vgbdqn

由于本次设定每个PE为16M,如果要用PE的数量来处理的话,那使用下面的指令也可以。

[root@localhost ~]# lvscan
  ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [<17.00 GiB] inherit
  ACTIVE            '/dev/vgbdqn/lvbdqn' [2.00 GiB] inherit
[root@localhost ~]# lvdisplay /dev/vgbdqn/lvbdqn  #需要写全路径名称;
  --- Logical volume ---
  LV Path                /dev/vgbdqn/lvbdqn
  LV Name                lvbdqn
  VG Name                vgbdqn
  LV UUID                m4L6a4-1Hle-iSY2-Bo32-FsCJ-gA56-e1vJ8O
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-02-01 15:21:49 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             128
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

5.格式化
格式化LV,这里注意一点,LV的名称必须使用全路径名称。如/dev/vg/lv

[root@localhost ~]# mkfs.xfs /dev/vgbdqn/lvbdqn
meta-data=/dev/vgbdqn/lvbdqn     isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

6.挂载

[root@localhost ~]# mkdir -p /bdqn/zj
[root@localhost ~]# mount /dev/vgbdqn/lvbdqn /bdqn/zj
[root@localhost ~]# df -Th /bdqn/zj
文件系统                    类型   容量    已用    可用   已用%   挂载点
/dev/mapper/vgbdqn-lvbdqn  xfs   2.0G    33M   2.0G    2%   /bdqn/zj
[root@localhost ~]# vim /etc/fstab
/dev/vgbdqn/lvbdqn /bdqn/zj xfs defaults 0 0
[root@localhost ~]# mount -a

三、LVM容量的拓展

LVM最大的特点就是弹性调整磁盘容量大小。
先分析一下,如果我们要扩展LV的容量的话,需要怎么做?
首先,如果VG空间还足够的话,直接lvextend就可以了。暂且不说,我们要考虑的是,如果VG空间不够的话,我们应该怎么做。我们都知道,VG那是用物理卷来组成,也就是说,想要扩展你的VG容量,前提就是有足够的物理卷,物理卷这里是虚拟机,直接添加,那么在公司就是购买,当物理磁盘添加成功之后,就是转化成PV,然后用VGextend把创建好的PV加进来。那么VG空间足够,想要扩展LV,直接就是lvextend,然后lvresize直接添加。
还有一种是关于文件系统的增大与缩小,比如说ext2,3,4这个家族,还有xfs,这里不是重点,而且一般也不会去改。
那么接着上面的实验,我们想要把刚才的LV /dev/vgbdqn/lvbdqn挂载目录是/bdqn/zj空间增加500M,应该怎么做?
首先我们要考虑VG空间是否够用。

[root@localhost ~]# vgdisplay vgbdqn
  --- Volume group ---
  VG Name               vgbdqn
  System ID             
  Format                lvm2
  Metadata Areas        4
  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                4
  Act PV                4
  VG Size               <3.94 GiB
  PE Size               16.00 MiB
  Total PE              252
  Alloc PE / Size       128 / 2.00 GiB
  Free  PE / Size       124 / <1.94 GiB
  VG UUID               X5uTJs-3BVR-LQIA-hVne-33aA-6tek-pQtGbX

确定了VG空间够用,那么直接来扩展。

[root@localhost ~]# lvresize -L +500M /dev/vgbdqn/lvbdqn
  Rounding size to boundary between physical extents: 512.00 MiB.
  Size of logical volume vgbdqn/lvbdqn changed from 2.00 GiB (128 extents) to 2.50 GiB (160 extents).
  Logical volume vgbdqn/lvbdqn successfully resized.

注意的是大写的L后面直接跟容量大小,也可以用小l后面跟PE的倍数。

[root@localhost ~]# lvscan
  ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [<17.00 GiB] inherit
  ACTIVE            '/dev/vgbdqn/lvbdqn' [2.50 GiB] inherit
[root@localhost ~]# df -hT /bdqn/zj
文件系统                  类型  容量  已用  可用 已用% 挂载点
/dev/mapper/vgbdqn-lvbdqn xfs   2.0G   33M  2.0G    2% /bdqn/zj

LV是扩大了,但挂载目录下文件系统的容量并没有增加,我们需要一条命令,让系统重新加载一下文件系统的大小。

[root@localhost ~]# xfs_info /bdqn/zj
meta-data=/dev/mapper/vgbdqn-lvbdqn isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# xfs_growfs /bdqn/zj
meta-data=/dev/mapper/vgbdqn-lvbdqn isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 524288 to 655360
[root@localhost ~]# xfs_info /bdqn/zj
meta-data=/dev/mapper/vgbdqn-lvbdqn isize=512    agcount=5, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=655360, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# df -hT /bdqn/zj
文件系统                     类型   容量    已用  可用   已用%   挂载点
/dev/mapper/vgbdqn-lvbdqn   xfs   2.5G   33M  2.5G    2%   /bdqn/zj

在上表中,注意看两次xfs_info的结果,你会发现整个block group(agcount)的数量增加一个。那个block group就是记录新的设备容量的文件系统所在的地方。而你也会发现整体的blocks数量增加了。这样整个文件系统就放大了。
注意:目前的XFS文件系统并没有缩小文件系统容量的设计。也就是说,文件系统只能放大不能缩小,如果你想要有放大、缩小的功能,那使用EXT家族最新的EXT4文件系统。

四、EXT4格式的LVM缩容

注意:必须先缩减逻辑卷的逻辑边界,再缩减物理边界

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

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

(3)在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态;

查看lv状态

[root@base ~]# lvs 
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy% Sync Convert 
bdqnlv  bdqnvg   -wi-a-----          9.00g

现在将上述LV空间缩容至7G

[root@base ~]# umount /mnt/bdqn

对lv强制进行文件系统检测

[root@base ~]# e2fsck -f /dev/vgbdqn/lvbdqn 
e2fsck 1.42.9 (28-Dec-2013) 
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/vgbdqn/lvbdqn: 11/557056 files (0.0% non-contiguous), 
76969/2228224 blocks

使用resize2fs对lv逻辑卷的逻辑边界空间大小调整为缩减后的大小

[root@base ~]# resize2fs /dev/vgbdqn/lvbdqn 7G 
resize2fs 1.42.9 (28-Dec-2013) 
Resizing the filesystem on /dev/vgbdqn/lvbdqn to 1835008 
(4k) blocks. 
The filesystem on /dev/vgbdqn/lvbdqn is now 1835008 blocks long.

使用lvreduce对lv逻辑卷的物理边界进行缩减

[root@base ~]# lvreduce -L 7G /dev/vgbdqn/lvbdqn 
  WARNING: Reducing active logical volume to 7.00 GiB. 
  THIS MAY DESTROY YOUR DATA (filesystem etc.) 
Do you really want to reduce vgbdqn/lvbdqn? [y/n]: y 
  Size of logical volume vgbdqn/lvbdqn changed from 8.50 
GiB (544 extents) to 7.00 GiB (448 extents). 
  Logical volume vgbdqn/lvbdqn successfully resized.

然后对lv进行挂载操作

[root@base ~]# mount /dev/vgbdqn/lvbdqn /mnt/LVM2/ 
[root@base ~]# df -hT /mnt/LVM2/ 
Filesystem                Type   Size   Used  Avail    Use% 
Mounted on 
/dev/mapper/vgbdqn-lvbdqn ext4   6.8G    37M   6.4G     1% 
/mnt/LVM2
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值