当前位置: 首页 > news >正文

Linux的磁盘存储管理实操——(下二)——逻辑卷管理LVM的扩容、缩容

Linux的磁盘存储管理实操——(中)——逻辑卷管理实战-CSDN博客https://coffeemilk.blog.csdn.net/article/details/149471808

一、逻辑卷管理的常用操作命令

创建逻辑卷的流程是:硬盘分区-->物理卷(PV)-->卷组(VG)-->逻辑卷(LV)-->文件系统.

逻辑卷管理常用操作命令
命令类型序号命令内容说明
硬盘分区1fdisk硬盘分区工具
parted硬盘分区工具
硬盘信息1df -hT查看Linux系统的硬盘空间使用情况及其文件系统类型
2lsblk显示Linux系统的所有可用设备信息

物理卷管理

【PV】

1pvcreate

将硬盘或分区初始化为物理卷【主要是添加LVM属性信息并划分PE存储单位

#1-将硬盘初始化为物理卷PV示例
pvcreate /sdb#2-将多个分区初始化为物理卷PV示例
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1

注意:若将整个硬盘都设置为一个物理卷PV时,该硬盘必须没有任何分区表

2pvdisplay

显示物理卷信息

#1-显示所有物理卷PV的信息
pvdisplay#2-显示制定物理卷PV的信息示例
pvdisplay /dev/sdc1
3pvremove

将物理卷删除

【注意:删除之前必须用vgreduce命令把它从卷组中移除】

#删除/dev/sdc1物理卷
pvremove /dev/sdc1
4pvscan在系统LVM块设备中检索PV
5pvchange

允许管理员改变一个或多个物理卷的分配许可

#如果物理卷出现故障,可以使用pvchange命令禁止分配物理卷上的PE
#(如:禁止分配/dev/sdc1上的PE)
pvchange -x n /dev/sdc1

卷组管理

【VG】

1vgcreate

将一个或多个物理卷创建为一个卷组

#将多个物理卷【/dev/sdc1】【/dev/sdb2】创建为一个名为myvg1的卷组
vgcreate myvg /dev/sdc1 /dev/sdb2
2vgdisplay

显示LVM卷组的元数据信息【若不指定卷组则显示所有卷组属性】

#1-显示所有卷组的信息
vgdisplay#2-显示指定的卷组myvg1信息
vgdisplay myvg1
3vgremove

删除一个或多个卷组

【注意:卷组上必须没有任何逻辑卷PV并且为非活动状态】

#1-如删除指定的myvg1卷组
vgremove myvg1#2-#如删除指定的myvg1、myvg2卷组
vgremove myvg1 myvg2
4vgextend

动态添加一个或多个物理卷PV到指定卷组中

#如将/dev/sdb1物理卷添加到myvg1的卷组中
vgextend myvg1 /dev/sdb1
5vgreduce

从卷组中删除一个或多个无用的物理卷PV

【注意:在从卷组中移除PV前,需通过pvmove把PV上的逻辑卷LV移动到其他PV上】

#如从myvg1卷组中移除/dev/sdc1物理卷
vgreduce myvg1 /dev/sdc1
6vgscan查找系统中存在的LVM的所有卷组,仅显示找到的卷组名称和LVM元数据类型。若想得到卷组的详细信息需使用vgdisplay命令。
7vgchange

设置卷组为活动状态或非活动状态,或改变卷组的最大LV数量

#语法【vgchange [-a {y|n}] [-l MaxLogicalVolumes] VolumeGroupName】#1-将myvg1卷组设置为活动状态
vgchange –a y myvg1#2-改变一个当前非活动卷组myv1的最大逻辑卷PV数量为128
vgchange –l 128 myvg1

逻辑卷管理

【LV】

1lvcreate

创建LVM的逻辑卷LV

#语法1: lvcreate -L 容量大小 -n 逻辑卷名 卷组名
#示例:使用myvg1的卷组创建一个名为mylv1的逻辑卷,且设置这个逻辑卷的大小为16g
lvcreate -L 16g -n mylv1 myvg1#语法2:lvcreate -l LE数 -n 逻辑卷名 卷组名
#示例:使用myvg1的卷组创建一个名为mylv2的逻辑卷,且设置这个逻辑卷的大小为997个LE
lvcreate -l 997 -n mylv2 myvg1
2lvdisplay

显示逻辑卷空间大小、读写状态和快照信息等属性

#1-查看所有逻辑卷的卷空间大小、读写状态和快照信息等属性信息
lvdisplay#2-查看指定的逻辑卷/dev/myvg1/mylv1的卷空间大小、读写状态和快照信息等属性信息
lvdisplay -v /dev/myvg1/mylv1
3lvremove

删除一个或多个非活动的逻辑卷

【注意:如果逻辑卷已用mount指令挂载,则不能用lvremove删除。只有先用umount卸载后,该逻辑卷才能被删除】

#移除指定的/dev/myvg1/mylv1这个逻辑卷
lvremove /dev/myvg1/mylv1
4lvextend

在线扩展逻辑卷空间大小,可以指定扩展后的大小,也可以指定增量

#语法:lvextend {-l [+]LogicalExtentsNumber}{ -L [+]LogicalVolumeSize]#示例1:将/dev/myvg1/mylv1逻辑卷进行拓展【前提是/dev/myvg1卷组有空闲空间】
lvextend -l +700 /dev/myvg1/mylv1#示例2:给/dev/myvg1/mylv1这个逻辑卷LV增加6g空间【前提是/dev/myvg1卷组有空闲空间】
lvextend -L +6g /dev/myvg1/mylv1
5lvreduce

减少逻辑卷占用的空间大小(即收缩逻辑卷)

【注意:此命令有可能会删除逻辑卷上的已有数据,操作之前必须确认

#语法:lvreduce [-l [-]LogicalExtentsNumber] [–L [-]LogicalVolumeSize] LogicalVolumePath#示例1:将/dev/myvg1/mylv1逻辑卷进行收缩【执行此命令有可能会删除逻辑卷上的已有数据,操作之前必须确认】
lvextend -l -700 /dev/myvg1/mylv1#示例2:将/dev/myvg1/mylv1逻辑卷进行收缩【执行此命令有可能会删除逻辑卷上的已有数据,操作之前必须确认】
lvextend -L -6g /dev/myvg1/mylv1
6lvscan扫描系统中所有存在的逻辑卷LV
7lvchange

改变逻辑卷参数,或激活/禁止某个逻辑卷LV

#语法:lvchange [-a {y|n}] [-p r|rw] LogicalVolumePath [LogicalVolumePath...] #示例1:让逻辑卷/dev/myvg1/mylv1禁止使用
lvchange –a n /dev/myvg1/mylv1#示例2:让逻辑卷/dev/myvg1/mylv1激活使用且有读写权限
lvchange -a y –p rw /dev/myvg1/mylv1
格式化1mkfs.xfs

以xfs格式化指定的逻辑卷

#将/dev/myvg1/mylv1逻辑卷格式化为xfs的文件格式
mkfs.xfs /dev/myvg1/mylv1
2mkfs.ext4

以ext4格式化制定的逻辑卷

#将/dev/myvg1/mylv1逻辑卷格式化为ext4的文件格式
mkfs.ext4 /dev/myvg1/mylv1
逻辑卷挂载1mount

挂载指定的逻辑卷到指定路径上

#挂载/dev/myvg1/mylv1逻辑卷到/data2路径上【注意:该命令只是系统在当前运行时挂载上了,但是系统重启后就没了(若需要系统开机就自动挂载上请编辑/etc/fstab文件添加上这个逻辑卷的内容后保存退出即可)】
mount /dev/myvg1/mylv1 /data2
2umount

卸载指定路径的逻辑卷

#卸载/data2路径对应的逻辑卷或分区
umount /data2
3xfs_growfs

在线刷新【xfs】文件格式的逻辑卷容量到挂载的路径上

#在线刷新/dev/myvg1/mylv1逻辑卷的格式是xfs的容量空间内容到指定路径上
xfs_growfs /dev/myvg1/mylv1
4resize2fs

在线刷新【ext4】文件格式的逻辑卷容量到挂载的路径上

#在线刷新/dev/myvg1/mylv1逻辑卷的格式是ext4格式的容量空间内容到指定路径上
xfs_growfs /dev/myvg1/mylv1
5/etc/fstab

Linux开机后自动挂载逻辑卷或分区内容文件

#编辑该Linux开机自动挂载逻辑卷或分区文件的命令
vi /etc/fstabl

二、逻辑卷的扩容缩容实战

 2.1、场景描述

        场景描述:在我们生产环境中的Linux系统,根分区快满了,且目前没有可用的新增磁盘,现在如何解决这个问题?

 2.2、问题分析

        1、先查看当前的根分区是哪些文件夹占用较大,然后确认这些较大文件夹或文件能否删除?若能删除则可空出容量解决问题。

        2、可对当前出问题的分区进行扩容(寻找另外一个有较大空闲容量的分区进行缩容,然后对该快满的分区扩容),执行思路如下:

        先确定当前Linux系统出现问题的分区使用的是什么分区?(是标准分区还是逻辑卷管理LVM分区):

        《1》若是标准分区可参考《Linux的磁盘存储管理实操——(下一)——标准分区扩容》;

        《2》若是逻辑卷管理LVM分区则先查看当前系统的分区是否还存在有较大空闲容量的逻辑分区:

                <1>若是不存在较大空闲容量的逻辑分区则只能(查看是否有可清理的内容腾出空间;或是新增硬盘扩容)。

                <2>若是存在较大空闲容量的逻辑分区则可以考虑将现有的空闲容量较大的逻辑分区容量缩容给当前快满的根分区扩容。

 2.3、解决方法

1、针对根分区需要查看哪个文件夹或文件占用空间较大后进行查看是否能删除

#1-查看指定路径下子目录所有文件的空间占用信息,方便查找出最大的文件或文件夹(如查看根目录)
du -sh /*

 2、查看Linux系统的磁盘占用情况并对空闲容量大的缩容给需要的分区扩容操作

注意事项:

《1》xfs文件系统没有工具来缩小文件系统的大小,您只能增大 XFS 文件系统的大小。

《2》ext4文件系统支持扩展和缩小文件系统的大小,但缩减只能离线操作。

#1-查看磁盘是否属于标准分区(带LVM则表示是逻辑分区)
lsblk#2-查看当前Linux的磁盘空间占用情况和类型命令
df -hT#3-查找到硬盘空闲容量较大的分区后【备份该分区的所有数据】(可以使用scp向其他服务器传输备份或者直接物理备份)【比如我们这里是/home分区的空闲容量较大,就备份该分区内容】#4-空闲容量较大的分区内容备份完成后就可以执行如下的空闲容量逻辑卷卸载和移除操作(如:我们这里卸载【/home】挂载点及其对应的逻辑卷【/dev/mapper/rl-home】移除)
umount /home
lvdisplay
lvremove /dev/mapper/rl-home
vgdisplay#5-先给空闲容量少的逻辑卷进行扩容(如:我们这里给根分区挂载点对应的逻辑卷【/dev/mapper/rl-root】扩容增加30g)
lvextend -L +30g /dev/mapper/rl-root
df -hT
xfs_growfs /dev/mapper/rl-root
df -hT#6-给原有的空闲容量多的逻辑卷进行重建缩容(如:新增的逻辑卷名称是home且使用rl这个卷组剩下的所有空间)
lvcreate -n home -l 100%free r1
lvdisplay
vgdisplay#7-格式化我们新创建好的逻辑卷并挂载上【这里之所以使用ext4格式是因为方便后续如果其他逻辑卷容量不够的时候就可以直接使用这个逻辑卷进行缩容操作(且不用将这个逻辑卷卸载、移除格式化等一系列的操作)】【还有在这里如果直接使用mount /home挂载报错,那是因为Linux系统的开机后自动挂载硬盘的/etc/fstab文件里面配置有原来的逻辑卷内容与现在新创建的逻辑卷内容不一致导致的,需要到该文件里面修改一致】
mkfs.ext4 /dev/rl/home
mount /dev/r1/home /home
vi /etc/fstab

说明:df -hT命令展示的挂载点对应的路径(如【/dev/mapper/rl-root 】)与lvdisplay命令展示的路径都是指向同一个设备(可以使用【ll 路径】命令查看),所以两个路径的使用效果是一样的,如下图所示:

三、其他资料

第 5 章 LVM 配置示例 | 逻辑卷管理器管理 | Red Hat Enterprise Linux | 7 | Red Hat Documentationhttps://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/lvm_examples1.5. XFS 和 ext4 的比较 | 管理文件系统 | Red Hat Enterprise Linux | 10 | Red Hat Documentationhttps://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/10/html/managing_file_systems/comparison-of-xfs-and-ext4Linux 文件系统选择指南:EXT4、XFS、Btrfs – 启鑫的黑板报https://www.qixinlee.com/archives/482

http://www.dtcms.com/a/298562.html

相关文章:

  • 5.2.1 javascript 事件对象.内容补充.
  • 从零本地部署使用Qwen3-coder进行编程
  • 1.1.4 建筑隔震减震设计结构要求
  • SpringBoot创建项目的方式
  • Spring AOP `MethodInvocation` 工作原理
  • JavaScript 数组的 every() 和 some() 方法使用
  • Web前端:JavaScript Math内置对象
  • 个人财务记录应用
  • SEC_FirePower 第一天作业
  • 2025年07月25日Github流行趋势
  • 【IDEA】IDEA中如何通过分支/master提交git?
  • haproxy篇
  • 扫描电镜全面解析:工作原理、应用领域与样品制备技巧
  • macbook安装homebrew
  • 为什么数组可以做到时间复杂度为O(1)的随机访问
  • jQuery ID与Class选择器对比
  • C++中的deque
  • js多边形算法:获取多边形中心点,且必定在多边形内部
  • Android系统中的4KB内存页简介
  • 【图像理解进阶】如何对图像中的小区域进行细粒度的语义分割?
  • DNS 服务正反向解析与 Web 集成实战:从配置到验证全流程
  • 37.安卓逆向2-frida hook技术-过firda检测(二)(过D-Bus检测和搭配maps检测进行使用)
  • 65.第二阶段x64游戏实战-替换游戏lua打印可接任务
  • OpenCV结合深度学习进行图像分类
  • 暑期自学嵌入式——Day08(C语言阶段)
  • 用单片机怎么控制转速
  • 嵌入式学习-(李宏毅)机器学习(3)-day30
  • 操作系统:操作系统的结构(Structures of Operating System)
  • AI面试与传统面试的核心差异解析——AI面试如何提升秋招效率?
  • RAG架构原理和LangChain方式实现RAG