目录

一、什么是LVM?

二、LVM下的基础术语

2.1 PV(物理卷 Physical Volume)

2.2 VG(卷组 Volume Group)

2.3 LV(逻辑卷 Logical Volume)

2.4 PV、VG、LV三者之间的关系

三、LVM创建

3.1 准备一块新磁盘

3.2 初始化为物理卷并查看

3.3 创建卷组data并查看

3.4 创建逻辑卷data01、data02

3.5 格式化文件系统

3.6 挂载逻辑卷并配置开机自动挂载

四、LVM扩容

补充:如何查看逻辑卷的文件系统类型

4.1 xfs文件系统逻辑卷扩展

4.2 ext4文件系统逻辑卷扩展

五、LVM缩容

5.1 xfs文件系统逻辑卷缩容

5.2 ext4文件系统逻辑卷缩容

六、新增一块磁盘扩展根分区

6.1 前提条件

6.2 开始扩展


一、什么是LVM?

        LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷。逻辑卷管理机制在不用关闭系统的前提下,可以对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。

二、LVM下的基础术语

2.1 PV(物理卷 Physical Volume)

        指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。将一块硬盘/分区初始化为物理卷就是将它划分为若干个PE,PE的大小是可配置的,默认为4MB。

2.2 VG(卷组 Volume Group)

        类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成,可以在卷组上创建一个或多个LV(逻辑卷)。

2.3 LV(逻辑卷 Logical Volume)

        LVM的逻辑卷类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

2.4 PV、VG、LV三者之间的关系

        我们可以将物理卷想象成构造房子的砖瓦(当然假设房子完全仅有砖瓦构建),将卷组理解为砖瓦(物理卷)建构而成的房子,最后我们将房子分为客厅、厨房、卧室等(逻辑卷),而不用在意砖瓦(物理卷)是怎么排列的,图示如下:

三、LVM创建

演示目的:使用新磁盘/dev/sdb,先创建物理卷,然后使用物理卷创建卷组data,再在卷组data上创建一个大小为5G、文件系统类型为xfs的逻辑卷/dev/data/data01和一个大小为5G、文件系统类型为ext4的逻辑卷/dev/data/data02,最后将/dev/data/data01挂载到/data01,将/dev/data/data02挂载到/data02。

3.1 准备一块新磁盘

说明:此处磁盘为/dev/sdb,如下:

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0    3G  0 lvm  /
  └─centos-swap 253:1    0   16G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
[root@node1 ~]#

3.2 初始化为物理卷并查看

说明:可以先将磁盘分区再将分区初始化为物理卷,也可以直接将磁盘初始化为物理卷,此处选择直接将磁盘/dev/sdb初始出为物理卷。

[root@node1 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@node1 ~]#
[root@node1 ~]# pvscan
  PV /dev/sdb    VG data            lvm2 [<20.00 GiB / <20.00 GiB free]
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  Total: 2 [38.99 GiB] / in use: 2 [38.99 GiB] / in no VG: 0 [0   ]
[root@node1 ~]#

由上可知,创建物理卷/dev/sdb成功,此时系统中有两个物理卷,分别为刚创建的/dev/sdb和安装系统时创建的/dev/sda2。

3.3 创建卷组data并查看

[root@node1 ~]# vgcreate data /dev/sdb
  Volume group "data" successfully created
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n- <19.00g      0 
  data     1   0   0 wz--n- <20.00g <20.00g
[root@node1 ~]# 

由上可知,创建卷组data成功,此时系统中有两个卷组,一个是刚创建的卷组data,一个是安装系统时创建的卷组centos。

3.4 创建逻辑卷data01、data02

[root@node1 ~]# lvcreate -L 5G -n data01 data
  Logical volume "data01" created.
[root@node1 ~]# 
[root@node1 ~]# lvcreate -L 5G -n data02 data
  Logical volume "data02" created.
[root@node1 ~]# 
[root@node1 ~]# lvscan
  ACTIVE            '/dev/data/data01' [5.00 GiB] inherit
  ACTIVE            '/dev/data/data02' [5.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [16.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [<3.00 GiB] inherit
[root@node1 ~]#

由上可知,创建大小为5G的逻辑卷data01和data02成功。

3.5 格式化文件系统

说明:将逻辑卷/dev/data/data01格式化为xfs,将逻辑卷/dev/data/data02格式化为ext4

[root@node1 ~]# mkfs -t xfs /dev/data/data01 
meta-data=/dev/data/data01       isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, 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
[root@node1 ~]# 
[root@node1 ~]# mkfs -t ext4 /dev/data/data02
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@node1 ~]#

3.6 挂载逻辑卷并配置开机自动挂载

说明:挂载前要先创建挂载点/data01和/data02

[root@node1 ~]# mkdir /data01 /data02
[root@node1 ~]# 
[root@node1 ~]# mount /dev/data/data01 /data01
[root@node1 ~]# 
[root@node1 ~]# mount /dev/data/data02 /data02
[root@node1 ~]#
[root@node1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  979M     0  979M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M  9.5M  981M    1% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       3.0G  2.0G  1.1G   66% /
/dev/sda1               xfs      1014M  138M  877M   14% /boot
tmpfs                   tmpfs     199M     0  199M    0% /run/user/0
/dev/mapper/data-data01 xfs       5.0G   33M  5.0G    1% /data01
/dev/mapper/data-data02 ext4      4.8G   20M  4.6G    1% /data02
[root@node1 ~]#

由上可知,逻辑卷/dev/data/data01已经挂载到了/data01,逻辑卷/dev/data/data02已经挂载到了/data02,此时还需要配置卷的开机自动挂载,否则重启操作系统后卷将不会挂载。

1. 查看逻辑卷/dev/data/data01和/dev/data/data02的UUID

[root@node1 ~]# blkid /dev/data/data01
/dev/data/data01: UUID="fd92aaac-5d15-4c34-bd7b-60036e64b076" TYPE="xfs" 
[root@node1 ~]# 
[root@node1 ~]# blkid /dev/data/data02
/dev/data/data02: UUID="6b13ca2e-4de0-49dd-9232-d699493b4002" TYPE="ext4" 
[root@node1 ~]#

2. 编辑/etc/fstab文件,添加逻辑卷/dev/data/data01和/dev/data/data02的挂载信息,如下:

[root@node1 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Oct 19 09:33:22 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=b6f5558c-23c3-49b3-9532-04fc5cb3e193 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=fd92aaac-5d15-4c34-bd7b-60036e64b076 /data01 xfs   defaults        0 0
UUID=6b13ca2e-4de0-49dd-9232-d699493b4002 /data02 ext4  defaults        0 0  
[root@node1 ~]#

3. 保存退出后执行mount -a命令,若无返回信息则表示添加的信息无误。

[root@node1 ~]# mount -a
[root@node1 ~]#

至此,大小为5G的逻辑卷/dev/data/data01已创建并挂载完成。

四、LVM扩容

演示目的:将上述创建的逻辑卷/dev/data/data01和/dev/data/data02从5G扩展到8G

补充:如何查看逻辑卷的文件系统类型

使用 df -Th命令可以查看设备的文件系统类型,如下所示:

4.1 xfs文件系统逻辑卷扩展

1. 扩展逻辑卷

[root@node1 ~]# lvresize -L 8G /dev/data/data01 
  Size of logical volume data/data01 changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).
  Logical volume data/data01 successfully resized.
[root@node1 ~]# 

说明:

lvresize -L 8G  /dev/data/data01   表示将逻辑卷扩展到8G

lvresize -L +8G /dev/data/data01 表示将逻辑卷在原大小的基础上增加8G

2. 扩展文件系统

[root@node1 ~]# xfs_growfs /dev/data/data01
meta-data=/dev/mapper/data-data01 isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1310720, 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 1310720 to 2097152
[root@node1 ~]#

补充:Anolis的操作系统此处使用 xfs_growfs / 来扩展文件系统。

3.查看当前逻辑卷的大小

[root@node1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  979M     0  979M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M  9.5M  981M    1% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       3.0G  2.0G  1.1G   66% /
/dev/sda1               xfs      1014M  138M  877M   14% /boot
tmpfs                   tmpfs     199M     0  199M    0% /run/user/0
/dev/mapper/data-data01 xfs       8.0G   33M  8.0G    1% /data01
/dev/mapper/data-data02 ext4      4.8G   20M  4.6G    1% /data02
[root@node1 ~]#

由上可知,逻辑卷/dev/data/data01已经从5G扩展到了8G

4.2 ext4文件系统逻辑卷扩展

1. 扩展逻辑卷

[root@node1 ~]# lvresize -L 8G /dev/data/data02
  Size of logical volume data/data02 changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).
  Logical volume data/data02 successfully resized.
[root@node1 ~]#

2. 扩展文件系统

[root@node1 ~]# resize2fs /dev/data/data02
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/data/data02 is mounted on /data02; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/data/data02 is now 2097152 blocks long.

[root@node1 ~]#

3.查看当前逻辑卷的大小

[root@node1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  979M     0  979M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M  9.5M  981M    1% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       3.0G  2.0G  1.1G   66% /
/dev/sda1               xfs      1014M  138M  877M   14% /boot
tmpfs                   tmpfs     199M     0  199M    0% /run/user/0
/dev/mapper/data-data01 xfs       8.0G   33M  8.0G    1% /data01
/dev/mapper/data-data02 ext4      7.8G   23M  7.4G    1% /data02
[root@node1 ~]#

由上可知,逻辑卷/dev/data/data02已经从5G扩展到了8G

五、LVM缩容

5.1 xfs文件系统逻辑卷缩容

xfs文件系统逻辑卷不支持缩容,仅支持扩容。

5.2 ext4文件系统逻辑卷缩容

演示目前:将逻辑卷/dev/data/data02从8G缩容至3G

提示:生产环境慎用缩容操作!

1. 卸载dev/data/data02

[root@node1 ~]# umount /dev/data/data02
[root@node1 ~]#

2. 检查逻辑卷

[root@node1 ~]# e2fsck -f /dev/data/data02
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/data/data02: 11/524288 files (0.0% non-contiguous), 71439/2097152 blocks
[root@node1 ~]#

3. 缩小逻辑卷

[root@node1 ~]# resize2fs /dev/data/data02 3G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/data/data02 to 786432 (4k) blocks.
The filesystem on /dev/data/data02 is now 786432 blocks long.

[root@node1 ~]#

4. 缩小逻辑卷

[root@node1 ~]# resize2fs /dev/data/data02 3G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/data/data02 to 786432 (4k) blocks.
The filesystem on /dev/data/data02 is now 786432 blocks long.

[root@node1 ~]# lvresize -L 3G /dev/data/data02
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce data/data02? [y/n]: y
  Size of logical volume data/data02 changed from 8.00 GiB (2048 extents) to 3.00 GiB (768 extents).
  Logical volume data/data02 successfully resized.
[root@node1 ~]#

5. 执行挂载,并查看逻辑卷的大小

[root@node1 ~]# mount -a
[root@node1 ~]# 
[root@node1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  979M     0  979M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M  9.5M  981M    1% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       3.0G  2.0G  1.1G   66% /
/dev/sda1               xfs      1014M  138M  877M   14% /boot
tmpfs                   tmpfs     199M     0  199M    0% /run/user/0
/dev/mapper/data-data01 xfs       8.0G   33M  8.0G    1% /data01
/dev/mapper/data-data02 ext4      2.9G   15M  2.7G    1% /data02
[root@node1 ~]#

由上可知,逻辑卷/dev/data/data02已经从8G缩小至3G

六、新增一块磁盘扩展根分区

6.1 前提条件

1.要扩展的根分区为LVM格式

2.有一块未使用的新磁盘

6.2 开始扩展

1. 将新磁盘初始化为物理卷并查看物理卷

[root@node1 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@node1 ~]# 
[root@node1 ~]# pvscan 
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb                       lvm2 [20.00 GiB]
  Total: 2 [<39.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [20.00 GiB]
[root@node1 ~]# 

2.使用新磁盘扩展根分区所属的卷组并查看卷组情况

[root@node1 ~]# vgextend centos /dev/sdb
  Volume group "centos" successfully extended
[root@node1 ~]# 
[root@node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree  
  centos   2   2   0 wz--n- 38.99g <20.00g
[root@node1 ~]#

3.扩展根分区逻辑卷

[root@node1 ~]# lvresize -l +100%free /dev/centos/root 
  Size of logical volume centos/root changed from <3.00 GiB (767 extents) to 22.99 GiB (5886 extents).
  Logical volume centos/root successfully resized.
[root@node1 ~]# 

4.扩展根分区逻辑卷文件系统并查看分区情况

[root@node1 ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=196352 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=785408, 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 785408 to 6027264
[root@node1 ~]# 
[root@node1 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  979M     0  979M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M  9.5M  981M    1% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        23G  2.1G   21G    9% /
/dev/sda1               xfs      1014M  138M  877M   14% /boot
tmpfs                   tmpfs     199M     0  199M    0% /run/user/0
[root@node1 ~]#

若根分区的文件系统类型为ext4,则使用如下命令进行文件系统的扩展

[root@node1 ~]# resize2fs /dev/centos/root

5.根分区扩展完毕

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐