查看原文
其他

Linux系统LVM逻辑卷管理

李逸皓 运维book思议 2023-10-21

放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

Python脚本实现应用自动化部署

Linux系统日志自动化管理脚本

Linux系统存储管理:RAID磁盘阵列

Linux系统文本三剑客:Sed命令

Python脚本实现数据库自动化备份

Python脚本实现网络设备自动化管理

逻辑卷管理(Logical Volume Management,简称LVM)是一种在Linux系统上管理磁盘存储的技术,它允许用户将多个物理硬盘上的存储空间组合成逻辑卷,并在需要时对其进行动态管理。LVM提供了灵活性、可扩展性和数据保护性,使得存储管理更加方便和高效。

LVM基于几个核心概念:
物理卷(Physical Volume,简称PV):物理卷是磁盘或磁盘分区,可以被LVM管理。它可以是整个磁盘,也可以是磁盘的一个分区。
卷组(Volume Group,简称VG):卷组是由一个或多个物理卷组成的存储池。它将物理卷组合在一起,提供了一个集中管理和分配存储空间的单元。
逻辑卷(Logical Volume,简称LV):逻辑卷是从卷组中分配出来的独立的存储区域,类似于传统硬盘上的分区。逻辑卷可以按需调整大小,并且可以扩展到跨越多个物理卷。

物理卷处于LVM的最底层,它们可以是实际物理硬盘上的分区或整个物理硬盘或RAID设备。卷组建立在物理卷之上,卷组建立之后便可动态添加物理卷到卷组中。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后便可动态地扩展或缩小空间。
与基本分区相比,逻辑卷最大的优势是可以进行扩容与数据迁移,并且所有操作都是在线的,即不需要卸载文件系统。

1、创建物理卷

pvcreate命令用于将物理设备(如硬盘或分区)标记为LVM物理卷,使其可以被逻辑卷管理器(LVM)使用。以下是pvcreate命令常用的参数:

-f:强制执行操作,即使设备已经被标记为LVM物理卷。

-y:自动回答“是”对所有提示,默认为“否”。

-v:显示详细的操作过程和信息。

-d:禁用LVM写入设备的元数据。

-ff:强制执行操作,并删除任何可能存在的旧的LVM元数据。

-M 2:指定元数据备份级别,其中1表示单个备份,2表示多个备份(默认为2)。

-n:不要创建物理卷。

下面通过pvcreate将一个磁盘初始化为物理卷


#查看当前可用磁盘[root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 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 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 20G 0 disk sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64#将可用磁盘初始化为物理卷[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.

物理卷创建成功之后,可以通过pvscan命令查看创建结果

[root@localhost ~]# 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]



2、创建卷组

vgcreate命令用于创建LVM卷组(Volume Group),将多个物理卷(Physical Volumes)组合在一起形成逻辑卷管理器(LVM)的逻辑卷组。以下是vgcreate命令常用的参数:

-v:显示详细的操作过程和信息。

-s PE_SIZE:指定物理区块(Physical Extent)的大小。默认情况下,PE大小为4MB。

-c:启用磁盘扫描和磁盘上的校验和功能。

-f:强制执行操作,即使卷组名称已经存在。

-A y/n:设置是否自动激活卷组(自动激活将在系统启动时自动激活卷组)。

-M 2:指定元数据备份级别,其中1表示单个备份,2表示多个备份(默认为2)。

-p PE_START:PE是卷组中的储存单位,默认大小为4MB。

下面通过vgcreate将物理卷整合为卷组


[root@localhost ~]# vgcreate datavg /dev/sdb Volume group "datavg" successfully created

3、查看卷组


pvscan命令用于扫描系统中的物理卷(Physical Volumes)并显示它们的信息。以下是pvscan命令常用的参数:
-d:禁用磁盘扫描,只显示已知的物理卷。
-h:显示帮助信息,列出pvscan命令的参数选项和用法。
-i:显示物理卷的详细信息,包括物理卷名称、卷组名称、物理卷大小、物理卷的UUID等。
-v:显示详细的操作过程和信息。
-s:显示扫描磁盘的摘要信息,包括扫描的磁盘数、扫描到的物理卷数等。
-a:扫描所有可用的物理卷,包括未激活的物理卷。

卷组创建完成之后,可以通过pvscan命令查看创建结果


[root@localhost ~]# pvscan PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free] PV /dev/sdb VG datavg lvm2 [<20.00 GiB / <20.00 GiB free] Total: 2 [38.99 GiB] / in use: 2 [38.99 GiB] / in no VG: 0 [0 ]

通过pvscan命令只能查看到卷组的大致信息,如需查看卷组的详细信息可以通过vgdisplay命令查看


[root@localhost ~]# vgdisplay datavg --- Volume group --- VG Name datavg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <20.00 GiB PE Size 4.00 MiB Total PE 5119 Alloc PE / Size 50 / 200.00 MiB Free PE / Size 5069 / 19.80 GiB VG UUID gQrVqu-zh0o-P0u7-x0Nu-TMgE-bbcV-puCAgD

4、创建逻辑卷


lvcreate命令用于创建逻辑卷(Logical Volume)。以下是lvcreate命令常用的参数:

-L size:指定逻辑卷的大小。可以使用单位来表示大小,例如M(兆字节)、G(千兆字节)等。

-n name:指定逻辑卷的名称。

-v:显示详细的操作过程和信息。

-y:在创建逻辑卷时不进行确认提示,直接执行。

-i number:指定逻辑卷的副本数。创建有多个副本的逻辑卷时使用。

-I size:指定逻辑卷的镜像区域大小。

-m Mirrors:指定逻辑卷的镜像数。

-c chunk size:指定逻辑卷的块大小。

下面通过lvcreate在卷组中创建出一个逻辑卷。


[root@localhost ~]# lvcreate -L 100M -n lv1 datavg Logical volume "lv1" created.

上述示例中,在卷组datavg中创建了一个大小为100M,命名为lv1的逻辑卷。其中,-L参数用于指定逻辑卷的大小,若是使用-l参数则需要指定以PE为单位的逻辑卷容量,示例代码如下。


[root@localhost ~]# lvcreate -l 25 -n lv2 datavg Logical volume "lv2" created.

由于一个PE单位的容量默认为4M,所以此处配置逻辑卷lv2的大小为25个PE单位,也就是100M。

逻辑卷创建完成之后,查看当前逻辑卷

[root@localhost ~]# lvscan ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [<17.00 GiB] inherit ACTIVE '/dev/datavg/lv1' [100.00 MiB] inherit ACTIVE '/dev/datavg/lv2' [100.00 MiB] inherit
5、挂载逻辑卷

在挂载逻辑卷之前,将需要挂载的逻辑卷进行格式化

#将lv1进行ext4格式化[root@localhost ~]# mkfs.ext4 /dev/datavg/lv1mke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=1024 (log=0)分块大小=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks25688 inodes, 102400 blocks5120 blocks (5.00%) reserved for the super user第一个数据块=1Maximum filesystem blocks=3368550413 block groups8192 blocks per group, 8192 fragments per group1976 inodes per groupSuperblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (4096 blocks): 完成Writing superblocks and filesystem accounting information: 完成 #将lv2进行xfs格式化[root@localhost ~]# mkfs.xfs /dev/datavg/lv2meta-data=/dev/datavg/lv2 isize=512 agcount=4, agsize=6400 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0

在挂载逻辑卷时并不需要UUID,使用设备名称即可,因为逻辑卷的名称不会发生改变。

创建两个挂载点。

[root@localhost ~]# mkdir -p /mnt/lv01 /mnt/lv02

有了挂载点之后,将挂载信息写入到/etc/fstab文件中

[root@localhost ~]# cat /etc/fstab
## /etc/fstab# Created by anaconda on Wed Apr 8 14:30:29 2020## 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 0UUID=214c5b00-13fb-46da-b59f-7fef6b85ada3 /boot xfs defaults 0 0/dev/mapper/centos-swap swap swap defaults 0 0/dev/datavg/lv1 /mnt/lv01 ext4 defaults 0 0 /dev/datavg/lv2 /mnt/lv02 nfs defaults 0 0

逻辑卷挂载完成之后,读取配置并查看挂载结果。

[root@localhost ~]# mount -a[root@localhost ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 5.9G 12G 35% /devtmpfs devtmpfs 470M 0 470M 0% /devtmpfs tmpfs 487M 0 487M 0% /dev/shmtmpfs tmpfs 487M 8.6M 478M 2% /runtmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup/dev/sda1 xfs 1014M 166M 849M 17% /boottmpfs tmpfs 98M 4.0K 98M 1% /run/user/42tmpfs tmpfs 98M 24K 98M 1% /run/user/0/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64/dev/mapper/datavg-lv1 ext4 93M 1.6M 85M 2% /mnt/lv01/dev/mapper/datavg-lv2 nfs 93M 1.6M 85M 2% /mnt/lv02

此时逻辑卷lv1与lv2已经成功挂载到目录/mnt/lv01与/mnt/lv02中。

6、卷组扩容

当逻辑卷的空间不足时,可以进行扩容,但在扩容逻辑卷之前需要保证卷组具备充足的空间。若是卷组的空间不足,可以先将卷组进行扩容。

将新磁盘初始化为物理卷,并添加到卷组中。

[root@localhost ~]# vgextend datavg /dev/sdc Physical volume "/dev/sdc" successfully created. Volume group "datavg" successfully extended
上述示例中,并没有将sdc初始化为物理卷,而是直接将其添加到卷组中,但系统便默认将其初始化为物理卷又将其添加至卷组中。
卷组扩容完成之后,查看卷组中的物理卷。
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <19.00g 0 /dev/sdb datavg lvm2 a-- <20.00g 19.80g /dev/sdc datavg lvm2 a-- <20.00g <20.00g


7、逻辑卷扩容


lvextend命令用于扩展逻辑卷(Logical Volume)的大小。以下是lvextend命令常用的参数:

-L size:指定逻辑卷的新大小。可以使用单位来表示大小,例如M(兆字节)、G(千兆字节)等。

-l extents:指定逻辑卷的新大小,以卷组中的扩展数为单位。

-n name:指定逻辑卷的名称。

-v:显示详细的操作过程和信息。

-r:在扩展逻辑卷后自动调整文件系统大小。

将逻辑卷lv1的容量扩容到500M。

[root@localhost ~]# lvextend -L 500M /dev/datavg/lv1 Size of logical volume datavg/lv1 changed from 100.00 MiB (25 extents) to 500.00 MiB (125 extents). Logical volume datavg/lv1 successfully resized.

为逻辑卷lv2增加400M的容量。


[root@localhost ~]# lvextend -L +400M /dev/datavg/lv2 Size of logical volume datavg/lv2 changed from 100.00 MiB (25 extents) to 500.00 MiB (125 extents). Logical volume datavg/lv2 successfully resized.

逻辑卷扩容完成之后,查看扩容结果。

[root@localhost ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 5.9G 12G 35% /devtmpfs devtmpfs 470M 0 470M 0% /devtmpfs tmpfs 487M 0 487M 0% /dev/shmtmpfs tmpfs 487M 8.6M 478M 2% /runtmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup/dev/sda1 xfs 1014M 166M 849M 17% /boot/dev/mapper/datavg-lv1 ext4 93M 1.6M 85M 2% /mnt/lv01/dev/mapper/datavg-lv2 xfs 97M 5.3M 92M 6% /mnt/lv02tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42tmpfs tmpfs 98M 24K 98M 1% /run/user/0/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64

此时逻辑卷的容量并没有得到提升,这是由于没有对文件系统进行扩容。


8、文件系统扩容
将逻辑卷比作一间教室,文件系统比作桌椅,数据比作学生。学生数量增加,就需要扩大教室的空间,但扩大教室的空间还是不够的,还需要增加桌椅供学生使用,文件系统扩容就相当于增加桌椅的数量。

在Linux下,不同的文件系统有不同的扩容方式。下面列出了几种常见的文件系统以及对应的扩容方式:

1、Ext2/Ext3/Ext4文件系统:

使用resize2fs命令来扩展文件系统大小。例如,resize2fs /dev/sdb1将扩展/dev/sdb1上的Ext2/Ext3/Ext4文件系统。

2、XFS文件系统:

使用xfs_growfs命令来扩展文件系统大小。例如,xfs_growfs /mnt将扩展/mnt上的XFS文件系统。

3、Btrfs文件系统:

使用btrfs filesystem resize命令来扩展文件系统大小。例如,btrfs filesystem resize +2G /mnt将/mnt上的Btrfs文件系统扩展2GB。

4、ZFS文件系统:

使用zpool和zfs命令来扩展文件系统大小。首先使用zpool命令扩展存储池的容量,然后使用zfs命令扩展具体的ZFS文件系统。

此处逻辑卷lv1的文件系统为ext4,则需要resize2fs命令进行扩容。
[root@localhost ~]# resize2fs /dev/datavg/lv1resize2fs 1.42.9 (28-Dec-2013)Filesystem at /dev/datavg/lv1 is mounted on /mnt/lv01; on-line resizing requiredold_desc_blocks = 1, new_desc_blocks = 4The filesystem on /dev/datavg/lv1 is now 512000 blocks long.

逻辑卷lv2的文件系统为xfs,则需要xfs_growfs命令进行扩容。

[root@localhost ~]# xfs_growfs /dev/datavg/lv2meta-data=/dev/mapper/datavg-lv2 isize=512 agcount=4, agsize=6400 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 25600 to 128000

将逻辑卷的文件系统扩容之后,再次查看逻辑卷容量。

[root@localhost ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root xfs 17G 5.9G 12G 35% /devtmpfs devtmpfs 470M 0 470M 0% /devtmpfs tmpfs 487M 0 487M 0% /dev/shmtmpfs tmpfs 487M 8.6M 478M 2% /runtmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup/dev/sda1 xfs 1014M 166M 849M 17% /boot/dev/mapper/datavg-lv1 ext4 481M 2.3M 456M 1% /mnt/lv01/dev/mapper/datavg-lv2 xfs 497M 6.0M 491M 2% /mnt/lv02tmpfs tmpfs 98M 4.0K 98M 1% /run/user/42tmpfs tmpfs 98M 24K 98M 1% /run/user/0/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64


9、卷组缩减

当磁盘空间不足时,可以减少卷组所占空间,即删除卷组中的物理卷。如果需要删除的物理卷中存有数据,需要将数据迁移到其他物理卷中,但也要保证目标物理卷有足够的空间储存迁移的数据。

pvmove命令用于在物理卷(Physical Volume,PV)之间移动数据。它的常用参数包括:
-n:执行预览操作,显示移动数据的计划,而不实际执行移动。
-v:显示详细的移动操作过程。
-i:在移动之前进行交互式确认,以便用户可以确认移动操作。
-b:在后台执行移动操作,允许用户继续其他操作。
-M:在移动之后,更新相关物理卷和卷组(Volume Group,VG)的元数据。
-t:指定移动数据的目标物理卷。

将物理卷sdb中的数据迁移到物理卷sdc中。

[root@localhost ~]# pvmove /dev/sdb /dev/sdc /dev/sdb: Moved: 4.80% /dev/sdb: Moved: 10.00% /dev/sdb: Moved: 50.00% /dev/sdb: Moved: 60.00% /dev/sdb: Moved: 100.00%

通过vgreduce命令将sdb物理卷从卷组中删除。

[root@localhost ~]# vgreduce datavg /dev/sdb Removed "/dev/sdb" from volume group "datavg"

10、删除逻辑卷

lvremove命令用于删除逻辑卷(Logical Volume,LV)。它的常用参数包括:
-v:显示详细的删除操作过程。
-f:强制删除逻辑卷,忽略警告和确认提示。
-A:在删除逻辑卷之前进行交互式确认。
-d:在删除逻辑卷之前执行预览操作,显示删除的计划,而不实际执行删除。

将多余的逻辑卷删除。

#解除挂载[root@localhost ~]# umount /dev/datavg/lv2#删除逻辑卷[root@localhost ~]# lvremove /dev/datavg/lv2Do you really want to remove active logical volume datavg/lv2? [y/n]: y Logical volume "lv2" successfully removed

在lvremove命令中添加-f参数,强制删除多余的逻辑卷。

[root@localhost ~]# umount /dev/datavg/lv1 [root@localhost ~]# lvremove -f /dev/datavg/lv1 Logical volume "lv1" successfully removed

由于在创建逻辑卷时的创建顺序是物理卷、卷组与逻辑卷,所以在删除物理卷时的删除顺序应为逻辑卷、卷组与物理卷。

结束!如有不足之处,欢迎指正!

来不及解释了,快上车!(加我微信拉你进群,需要学习资料的V我)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。







您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存