目录
一、什么是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