“ 本篇记录在linux环境中,关于磁盘分区lvm逻辑卷组的实用说明,以及跟lvm管理命令相同的另外一个权限更高的命令-dmsetup的使用。逻辑卷管理(LVM, Logical Volume Manager)是 Linux 下用于动态调整磁盘大小、整合存储资源的机制。LVM的核心概念包括物理卷(PV)、卷组(VG)和逻辑卷(LV)”
#查看物理卷 (PV):pvs(简略列表)或pvdisplay(详细信息)#查看卷组 (VG):vgs(简略列表)或vgdisplay(详细信息)#查看逻辑卷 (LV):lvs(简略列表)或lvdisplay(详细信息)#查看底层磁盘状态:lsblk
#第一步,创建物理卷pv,将物理磁盘或者分区初始化为物理卷pvcreate /dev/sdc#第二步,创建卷组,将物理卷pv合并为统一的存储池(卷组)vgcreate vg1 /dev/sdc /dev/sdd#第三步,创建逻辑卷,从卷组中指定逻辑卷的大小lvcreate -L 200M -n lv1 vg1#第四步,将逻辑卷格式化为所需的文件系统分区(ext4或者xfs),并挂载到目录,mkfs.ext4 /dev/vg1/lv1mkdir /mnt/lv1mount /dev/vg1/lv1 /mnt/lv1
当卷组空间不足时,只需将新的物理磁盘或分区初始化为 PV,然后追加到现有的 VG 中即可。整个过程无需卸载任何已挂载的逻辑卷,也无需中断业务
#初始化新盘为物理卷pvreate /dev/sde#将初始化后的pv加入到卷组vgvgextend vg1 /dev/sde
1.增加lv空间#扩展逻辑卷容量,在现有基础上增加100M,#必须有+符号lvextend -L +100M /dev/vg1/lv1#或者使用百分比来扩容空间,+100%FREE表示将vg全部的剩余空间扩展到lvlvextend -L 100%FREE -r /dev/vg1/lv12.刷新文件系统#扩展完成以后,刷新文件系统,使其识别新空间。#或者在第一步执行lvextend命令时加上-r可无需执行此步。resize2fs /dev/vg1/lv1 #指定逻辑卷xfs_growfs /mnt/lv1 #指定挂载目录
与扩展相比,缩减 VG 需要稍微谨慎一些,因为必须确保要移除的 PV 上没有正在使用的 LV 数据
#安全移除pvvgreduce vg1 /dev/sde#强制移除(包含数据)-可以先使用pvmove /dev/sde 命令将数据迁移到vg内的其他空闲pv,然后再执行vgreduce.
缩减逻辑卷,先卸载文件系统才能执行缩减空间的操作,需谨慎操作
#1.卸载文件系统umount /dev/mnt/lv1#2.检查文件系统e2fsck -f /dev/vg1/lv1#3.缩减文件系统resize2fs /dev/vg1/lv1 <目标大小>#4.执行缩减lvcreate -L -<减少量> /dev/vg1/lv1
#1.卸载逻辑卷,解除占用状态umount /mnt/lv1#2.删除逻辑卷lvremove /dev/vg1/lv1#3.删除卷组vgremove vg1#4.删除物理卷pvremove /dev/sdc
msetup 是一个更加底层的逻辑卷管理工具。平时我们管理linux 上的逻辑卷,使用lvm相关的工具即可。lvs是更高级的管理逻辑卷的命令,但是,有时候会出现类似lvm 删除不掉的lvm分区,我们可以使用dmsetup去删除。
dmsetup命令
dmsetup info # 查看Device Mapper设备概述 显示当前devicemapper 的信息demsetup ls #列出所有逻辑设备demsetup status # 列出所有逻辑设备的状态信息dmsetup deps # 显示设备依赖关系dmsetup table #用来查看物理设备到虚拟设备的映射表desetup remove # 移除逻辑设备
操作实例
#操作实例1.创建lv逻辑卷。# 创建逻辑卷[root@seed-84 ~]# vgcreate vg-test /dev/sdbPhysical volume "/dev/sdb" successfully created.Volume group "vg-test" successfully created[root@seed-84 ~]# lvcreate -n vg-lv -l 100%FREE vg-testLogical volume "vg-lv" created.# 查看逻辑卷[root@seed-84 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertvg-lv vg-test -wi-a----- <16.00g2.查看lvm路径。[root@seed-84 ~]# ll /dev/mapper/vg--test-vg--lvlrwxrwxrwx. 1 root root 7 May 27 11:51 /dev/mapper/vg--test-vg--lv -> ../dm-03.rm 删除 dm-0(这里为非正常删除,为了演示现象)。[root@seed-84 ~]# rm /dev/dm-0rm: remove block special file ‘/dev/dm-0’? y4.删除/dev/mapper/下的vg-test目录。rm /dev/mapper/vg--test-vg--lv -rf5.使用sgdisk 格式化磁盘信息。[root@seed-84 ~]# sgdisk -z /dev/sdbCreating new GPT entries.GPT data structures destroyed! You may now partition the disk using fdisk orother utilities.[root@seed-84 ~]# sgdisk -Z /dev/sdbCreating new GPT entries.GPT data structures destroyed! You may now partition the disk using fdisk orother utilities.6.执行wipefs -a 尝试擦该设备,却一直提示磁盘正在使用。[root@seed-84 ~]# wipefs -a /dev/sdbwipefs: error: /dev/sdb: probing initialization failed: Device or resource busy7.使用dmsetup 查看lv卷,使用dmsetup移除该卷。[root@seed-84 ~]# dmsetup lsvg--test-vg--lv (253:0)[root@seed-84 ~]# dmsetup remove vg--test-vg--lv8.再次执行wipefs -a /dev/sdb。[root@seed-84 ~]# wipefs -a /dev/sdb
#物理卷pvcreate 创建pv 例:pvcreate /dev/sda1pvs 查看pv信息 例:直接在命令行里输入pvspvdisplay 查看pv详细信息 例:pvcreate /dev/sda1pvmove 将pv数据移动到其他pv 例:pvmove /dev/sda1 /dev/sda4pvremove 将pv删除 例:pvremove /dev/sda1#卷组vgcreate 创建vg 例:vgcreate myvg /dev/sda{m,n}vgs 查看vg信息 例:直接在命令行里输入vgsvgdisplay 查看vg详细信息 例:vgdisplay myvgvgremove 将vg删除 例:vgremove myvg#扩展vg,首先准备好一个PV;#然后使用vgextend命令即可完成扩展;#格式: vgextend VG_NAME /PATH/TO/PVvgextend myvg /dev/sdb2 扩展myvg卷组,把/dev/sda2加进去#缩减vg(移除pv /dev/vdc)1)确定要移除的PV;2) 缩减lv到2G大小umount /data #先卸载逻辑卷e2fsck -f /dev/vg_zhb/lv_zhb #检查文件系统的完整性resize2fs /dev/vg_zhb/lv_zhb 2G #调整文件系统大小为2Glvreduce -L 2G /dev/vg_zhb/lv_zhb #缩减lv大小为2G3)将此PV上的数据转移至其它PV;格式:pvmove /path/to/pv示例:pvmove -v /dev/vdc /dev/vdb #将pv vdc的lv迁移逻辑卷到pv vdb上4)从卷组中将此PV vdc移除;格式:vgreduce VG_NAME /PATH/TO/PV示例:vgreduce vg_zhb /dev/vdc #缩减vg_zhb卷组,把/dev/vdc去掉5)刷新lv文件系统resize2fs /dev/vg_zhb/lv_zhb6)重新挂载#创建、查看、删除lvlvcreate 创建lv示例1:lvcreate -n lv-name -L 20G vg-name示例2:lvcreate -n lv_zhb -l 100%FREE vg_zhblvs 查看lv信息 例:直接在命令行里输入lvslvdisplay 查看lv详细信息 例:vgdisplay lv1lvremove 将lv 移除 例:lvremove /dev/myvg/lv1#扩展lv1、扩展(支持在线)lvextend -L [+]SIZE /path/to/lvresize2fs /path/to/devicelvextend -L +2G /dev/vg_zhb/lv_zhbresize2fs /dev/vg_zhb/lv_zhb2、缩减lv(不支持在线)确定缩减的大小,但前提是至少能容纳原有的所有数据umount /dev/vg_zhb/lv_zhb #先卸载逻辑卷e2fsck -f /dev/vg_zhb/lv_zhb #检查文件系统的完整性lvresize /dev/vg_zhb/lv_zhb -L 2G #缩减文件系统大小,设置lv大小为2Glvreduce -L 2G /dev/vg_zhb/lv_zhb #将逻辑卷/dev/vg_zhb/lv_zhb的大小缩小到2GBresize2fs /dev/vg_zhb/lv_zhb #将逻辑卷 /dev/vg_zhb/lv_zhb 的大小调整为2GBmount /dev/vg_zhb/lv_zhb /data#缩减lvsudo umount /mnt/mylv #先卸载逻辑卷sudo e2fsck -f /dev/myvg/mylv #检查文件系统的完整性sudo resize2fs /dev/myvg/mylv 15G #缩减文件系统大小sudo lvreduce -L 15G /dev/myvg/mylv1)卸载并强行检测文件系统;e2fsck -f2)逻辑边界resize2fs /path/to/device SIZE3)物理边界lvreduce -L [-]SIZE /path/to/lv#缩减lv,缩减vg#将vdc增加到vg_zhb,缩减lv_zhb,缩减vg_zhb。pvcreate /dev/vdcvgextend vg_zhb /dev/vdclvcreate -n lv_zhb -l 100%FREE vg_zhbmkfs.ext4 /dev/vg_zhb/lv_zhbmount /dev/vg_zhb/lv_zhb /datadd if=/dev/zero of=/data/aa.txt bs=4M count=100umount /datae2fsck -f /dev/vg_zhb/lv_zhbresize2fs /dev/vg_zhb/lv_zhb 2Glvreduce -L 2G /dev/vg_zhb/lv_zhbpvmove -v /dev/vdc /dev/vdbvgreduce vg_zhb /dev/vdcresize2fs /dev/vg_zhb/lv_zhbmount /dev/vg_zhb/lv_zhb /data
往期推荐:
持续分享了 Linux 运维中的实用技巧和工具,希望能为你的日常工作带来帮助。
系统稳定,始于细节;运维之道,贵在积累。
🔹 欢迎点赞 + 在看 + 转发,让更多同行看到!
🔹 关注本号,持续更新 Linux、Shell、云计算等技术干货。
🔹 留言区开放:你在实践中遇到过哪些运维问题?欢迎交流!