Linux给磁盘扩容(LVM方式)的方法实现

2025-05-25 15:50

本文主要是介绍Linux给磁盘扩容(LVM方式)的方法实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linux给磁盘扩容(LVM方式)的方法实现》本文主要介绍了Linux给磁盘扩容(LVM方式)的方法实现,涵盖PV/VG/LV概念及操作步骤,具有一定的参考价值,感兴趣的可以了解一下...

最近测试性能,在本地打数据时,发现磁盘空间不足,于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。

LVM:是一种技术,方便管理磁盘。如果不用LVM,那么就不好在之前的磁盘基础上扩容,比如我一块硬盘20G被写满了之后,我想将这块硬盘扩容到40G,就无法操作。只能新开一个磁盘。对于mysql这种数据保存在本地磁盘路径/var/mysql/data这种就无法正确扩容。

  • 有人会说我直接新插一个更大的硬盘,然后把数据从旧磁盘复制到新磁盘上,显然这在数据量大的情况下是不合理的。会耗费大量的时间。

1 概念

PV:物理卷,同一磁盘可划分为多个物理卷。

VG:卷组,一个到多个PV可组成一个卷组。

LV:逻辑卷,卷组可划分为多个逻辑卷。

PE:Physical extent物理区域,硬盘可供指派给逻辑卷的最小单位(通常为 4MB)

挂载点:lv与挂载点是1:1的关系。

Linux给磁盘扩容(LVM方式)的方法实现

1.1 物理卷 Physical Volume (PV)

可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的 header,其余部分被切割为一块块物理区域(physical extents)

1.2 卷组 Volume group (VG): 将一组物理卷收集为一个管理单元

1.3 逻辑卷 Logical volume (LV): 虚拟分区,由物理区域(physical extents)组成

1.4 物理区域 Physical extent (PE): 硬盘可供指派给逻辑卷的最小单位(通常为 4MB)

2 实战

我本地/目录下有50G空间,现在我想扩容到100G。

Linux给磁盘扩容(LVM方式)的方法实现

2.1 相关基础命令

# 查看挂载点
df -h 

# 查看逻辑卷( logical volume)
lvdisplay

# 查看当前的卷组(volume group),输出结果中的VG Size表示当前卷组总大小
vgdisplay

# 查看当前的物理卷组(physical volume)
pvdisplay

# 执行fdisk /dev/vdb给vdb磁盘创建分区
fdisk /dev/vdb

# 格式化分区
mkfs -t xfs /dev/vdb1 # 一般用于Centos7及以上
# mkfs -t ext4 /dev/vdb1 # 一般用于centos6

# 创建pv,方便将pv交给vg管理
pvcreate /dev/vdb1

# 给centos这个VG扩容
vgextend centos /dev/vdb1

# 给LV扩容 
lvextend -l +100%FREE /dev/centos/root

# 刷新分区
# resize2fs /dev/centos/ropythonot # 适用于centos6
xfs_growfs /dev/centos/root # centos7及以后

2.2 开始给LVM扩容

1. 查看fdisk:fdisk -l

fdisk -l

Linux给磁盘扩容(LVM方式)的方法实现

可以看到我们当前磁盘的基础信息,以及挂载情况。

# 查询挂载点情况
df -h 

Linux给磁盘扩容(LVM方式)的方法实现

可以看到我/下可用容量只有50G,现在我需要给它扩容。

2. 查看所有存储设备:fdisk -l |grep ‘/dev’

# 查看当前所有的存储设备
# fdisk -l |grep '/dev'
# 查看当前所有磁python盘
fdisk -l |grep '/dev/vd'

Linux给磁盘扩容(LVM方式)的方法实现

手动给虚拟机或者物理机新增一块磁盘,再执行相同命令:

# 查看当前所有磁盘
fdisk -l |grep '/dev/vd'

Linux给磁盘扩容(LVM方式)的方法实现

3. 给磁盘创建分区:fdisk /dev/vdb

# 执行fdisk /dev/vdb给vdb磁盘创建分区
fdisk /dev/vdb
## n:新建分区
## l: 选择逻辑分区,如果没有,则首先创建主分区(p)www.chinasem.cn,然后再添加逻辑分区(硬盘最多四个分区 P-P-P-P 或 P-P-P-E)

Linux给磁盘扩容(LVM方式)的方法实现

# 查看是否分区成功
fdisk -l | grep 'dev/vd'

Linux给磁盘扩容(LVM方式)的方法实现

4. 格式化磁盘:mkfs -t xfs /dev/vdb1

文件系统类型centos6文件系统是ext4,因为设计较早,对于现今动辄上T的海量数据处理,性能较低。 centos7文件系统是xfs,适用于海量数据。

# 格式化分区
mkfs -t xfs /dev/vdb1 # 一般用于centos7及以上
# mkfs -t ext4 /dev/vdb1 # 一般用于centos6

Linux给磁盘扩容(LVM方式)的方法实现

5. 创建pv:pvcreate /dev/vdb1

# 创建pv,方便将pv交给vg管理
pvcreate /dev/vdb1
# pvscan查看卷组,观察是否创建成功
pvscan |  grep /dev/vdb1

Linux给磁盘扩容(LVM方式)的方法实现

6. 扩容vg:vgextend centos /dev/vdb1

我现在要给/扩容,所以要知道/属于哪个vg管理

# 查看lv
lvdisplay

Linux给磁盘扩容(LVM方式)的方法实现

所以我现在要给centos这个VG扩展容量

# 将/dev/vdb1这个pv交给centos这个vg管理
vgextend centos /dev/vdb1
# 查看vg状态
vgdisplay

Linux给磁盘扩容(LVM方式)的方法实现

7.扩容lv:lvextend -l +100%FREE /dev/centos/root

我们要给/目录扩容,所以需要知道/目录对应的LVPath是什么

# 查看/挂载点对应的信息
df -h 

Linux给磁盘扩容(LVM方式)的方法实现

# 查看LV虚拟卷信息,可以知道/对应的LVPath为/dev/centos/root
lvdisplay

Linux给磁盘扩容(LVM方式)的方法实现

下面就是给LV扩容:

# 按固定大小追加(追加10G给/dev/centos/root这个LVPath)
lvextend -L +10G /dev/centos/root

# 按百分比追加
lvexteChina编程nd -l +100%FREE /dev/centos/root

以百分比追加为例,我将vg中剩下的所有容量全部分配给/

lvextend -l +100%FREE /dev/centos/root

Linux给磁盘扩容(LVM方式)的方法实现

# 查看LV是否扩容成功
lvdisplay

Linux给磁盘扩容(LVM方式)的方法实现

LV Size成功由50G扩容到了100G

8. 刷新分区:xfs_growfs /dev/centos/root

df 命令参看硬盘信息-T选项, 查看文件系统类型centos6文件系统是ext4,因为设计较早,对于现今动辄上T的海量数据处理,性能较低。 centos7文件系统是xfs,适用于海量数据。

# xfs格式的硬盘使用xfs_growfs
# ext4用resize2fs命令,
df -T # 查看文件系统类型(一般centos6是ext4,centos7及以后是xfs)
# resize2fs /dev/centos/root # 适用于centos6
xfs_growfs /dev/centos/root # centos7及以后

Linux给磁盘扩容(LVM方式)的方法实现

9. 验证df -h

扩容前:

Linux给磁盘扩容(LVM方式)的方法实现

扩容后:

Linux给磁盘扩容(LVM方式)的方法实现

注意: 不要卸载扩容的磁盘,可能出现丢失数据或是系统无法启动

因为多个LV对外提供的是一个VG,如果你卸载了其中一个磁盘导致LV失效,部分数据就可能丢失。类比:ES中的Shard

2.3 总结

新增磁盘

fdisk给磁盘创建分区,fdisk /dev/vdb

mkfs格式化磁盘,mkfs -t xfs /dev/vdb1

pvcreate创建pv,pvcreate /dev/vdb1

vgextend扩容vg,vgextend centos /dev/vdb1,给vg扩容(将/dev/vdb1交给centos这个vg管理)

lvextend扩容lv,lvextend -l +100%FREE /dev/centos/root(将vg剩余的容量全部分配给/dev/cenChina编程tos/root这个lv)

xfs_growfs刷新分区,# resize2fs /dev/centos/root # 适用于centos6
xfs_growfs /dev/centos/root # centos7及以后

df -h 查看挂载点大小变化,观察是否扩容成功

 到此这篇关于linux给磁盘扩容(LVM方式)的方法实现的文章就介绍到这了,更多相关Linux 磁盘扩容内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Linux给磁盘扩容(LVM方式)的方法实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154767

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关