首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

一文全解:LVM(逻辑卷管理器)

编程知识
2024年07月23日 16:24

前两篇文章已经讲了关于磁盘分区和磁盘阵列的相关内容:

一文全懂:Linux磁盘分区

一文全懂:独立冗余磁盘阵列(RAID)

但是磁盘分区完后再想扩容或者缩容就比较麻烦了,甚至很多时候不能扩容或者缩容,这时候就要用到linux非常常用的硬盘设备资源管理技术:LVM了。

LVM,英文全称叫做 "Logical Volume Manager",翻译过来的意思叫做"逻辑卷管理器",主要解决的是磁盘动态扩容或缩容的问题。

一般而言,在生产环境中无法在最初时就精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。硬盘分好区或者部署为 RAID 磁盘阵列之后,再想修改硬盘分区大小就不容易了,LVM作为现在非常普及的硬盘设备资源管理技术,允许用户对硬盘资源进行动态调整,从而解决上述问题。

一、逻辑卷管理器基本概念

image-20240722134650922

上图中涉及到几个概念:

PV(Physical Volume):物理卷,顾名思义,它可能是一个硬盘,也可能是一个RAID磁盘阵列。

VG(Volume Group):卷组,多个物理卷(PV)组成一个卷组。

LV(Logical Volume):逻辑卷,也即是我们探讨的核心了,它基于卷组分配管理磁盘资源。

PE(Physical Extent):基本单元,LV能管理分配的最小单位,LVM分配出来的每个空间都必须是PE的整数倍。

也就是说物理卷(PV)组成了卷组(VG),逻辑卷(LV)基于卷组(VG)分配管理基本单元(PE)。

上图中的逻辑卷A跨硬盘将若干个PE合并起来,对外直接使用逻辑卷A即可,而不用关心逻辑卷A下到底有几个硬盘。

二、逻辑卷管理实战

LVM部署时,需要逐个配置物理卷、卷组和逻辑卷,常用的部署命令如下所示:

功能 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
创建 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩容 vgextend lvextend
缩容 vgreduce lvreduce

有人或许会问,为啥逻辑卷管理没有扩容和缩容的命令呢?

答:逻辑卷对应着底层的硬盘或者RAID磁盘阵列,如果它能扩容或者缩容,就没有LVM什么事儿了,哈哈。

以下操作基于Vmware虚拟机操作。

1、物理卷和卷组创建

先给虚拟机新增加两块20G的硬盘,然后开机。可以看到sdb/sdc两块硬盘已经就绪

image-20240722153944333

第一步: 让两块硬盘支持lvm技术

pvcreate /dev/sdb /dev/sdc
image-20240722154254125

第二步: 把两块硬盘设备加入到storage卷组

vgcreate storage /dev/sdb /dev/sdc
image-20240722154755946

第三步: 查看卷组状态

vgdisplay
image-20240722155042974

从上述截图中可以看到,卷组创建完成后,PE相关的参数就已经确定好了,大小是4MB,40G的空间一共划分出了10238个PE等待lvm划分逻辑卷使用。

2、逻辑卷创建

第一步: 创建逻辑卷

我们现在从storage卷组中切割出来一块201M的逻辑卷设备。

这里要注意,切割方式有两种:

  1. 按照大小切割,使用的参数是-L,比如 -L 150M表示的是切割出来150MB大小的逻辑卷;

  2. 以基本单元的个数为单位,使用的参数是-l,每个基本单元的默认大小是4MB,比如-l 37,就可以生成37*4MB=148MB大小的逻辑卷。

比较方便的肯定是根据大小进行切割:

lvcreate -n kdyzm_lv -L 201 storage
image-20240722203327517

创建是成功了,但是可以看到它提示了个信息:Rounding up size to full physical extent 204.00 MiB。这个意思就是四舍五入创建了204MB的逻辑卷设备。为什么呢,我们明明创建的是201MB大小,它擅自给改成了204MB?答案是我们创建的大小必须是PE(Physical Extent,基本单元)的整数倍,PE大小是4MB,所以就给修正成了204MB。

Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

第二步: 格式化和挂载

如果使用了逻辑卷管理器,不建议使用xfs文件系统,据说xfs和lvm的兼容性并不好。所以接下来使用ext4来格式化硬盘。

image-20240723141604629

当然为了挂载重启后不失效,需要将挂载信息写入到/etc/fstab文件中,此处不赘述。

3、逻辑卷扩容

使用逻辑卷最大的用处就是可以为它动态扩容:卷组由若干块硬盘组成,用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。

逻辑卷扩容的步骤:取消挂载->逻辑卷扩容->检查硬盘完整性->重置设备在系统中的容量->重新挂载硬盘设备

第一步: 取消挂载

扩容前请一定要记得卸载设备和挂载点的关联:umount /kdyzm_lv

第二步: 逻辑卷扩容

将逻辑卷/dev/storage/kdyzm_lv的容量从204.00 MB扩容到300MB

lvextend -L 300M /dev/storage/kdyzm_lv 
image-20240723144057857

同时,它也提示了“Size of logical volume storage/kdyzm_lv changed from 204.00 MiB (51 extents) to 300.00 MiB (75 extents).”,这个逻辑卷原来的容量是204M(51个基本单元),现在扩容到了300M(75个基本单元)。

第三步: 检查硬盘完整性

确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。

 e2fsck -f /dev/storage/kdyzm_lv 
image-20240723144607332

第四步: 重置设备在系统中的容量

刚刚是对 LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。

resize2fs /dev/storage/kdyzm_lv 
image-20240723144821755

第五步: 重新挂载硬盘

mount /dev/storage/kdyzm_lv /kdyzm_lv
image-20240723145139653

需要注意的是这里显示的容量是287M,而非300M,要比我们当初设计的扩容容量小一些,这个原因是硬件厂商的制造标准是1M=1000KB,1KB=1000B;在计算机系系统中则是1M=1024KB,1KB=1024B。因此硬盘容量会有些“缩水”,300M的硬盘最终会被识别为 300MB*1000K*1000B/1024B/1024K=286.1022MB ,大概的算法就是这么算的。

4、缩小逻辑卷

缩容操作数据丢失的风险会比较大,所以Linux系统规定,为了保证数据安全,在对LVM逻辑卷进行缩容操作之前,必须先检查文件系统的完整性。完整的缩容步骤如下:

取消挂载->检查文件系统完整性->通知系统内核即将缩容->逻辑卷缩容

第一步: 取消挂载

 umount /kdyzm_lv

第二步: 检查文件系统的完整性。

上面说过,检查文件系统完整性是Linux系统强制要求的,如果跳过这一步骤,就会有如下提示

image-20240723160141292

要求必须先运行命令e2fsck -f /dev/storage/kdyzm_lv,那就按照要求,先运行该命令

e2fsck -f /dev/storage/kdyzm_lv
image-20240723160419763

第三步: 通知系统内核将逻辑卷容量缩小到100M

resize2fs /dev/storage/kdyzm_lv 100M
image-20240723160650082

运行该命令没有报错,说明内核通过计算觉得缩容不会有问题,所以批准了缩容操作。

第四步: 逻辑卷缩容

通过lvreduce命令将逻辑卷的容量缩小到100M

lvreduce -L 100M /dev/storage/kdyzm_lv 
image-20240723161043511

运行完命令,它还会提示下该命令有风险,要对执行命令进行二次确认,输入y即可。

**第五步: ** 重新挂载系统

image-20240723161406733

这样就完成了缩容。

5、删除逻辑卷

删除逻辑卷,需要依次删除逻辑卷、卷组、物理卷设备,顺序不可颠倒。

第一步: 取消挂载

删除/etc/fstab文件中记录的挂载信息,取消挂载关联。

umount /kdyzm_lv

由于没有写/etc/fstab文件,所以这里不需要删除相关信息。

第二步: 删除逻辑卷

lvremove /dev/storage/kdyzm_lv 
image-20240723163220630

注意这里需要二次确认。

第三步: 删除卷组

vgremove storage

这里只需要写卷组名称,因为我们当初创建卷组的时候也是这么创建的。

image-20240723163441598

第四步: 删除物理卷

pvremove /dev/sdb /dev/sdc 
image-20240723165218622

最后,欢迎关注我的博客:https://blog.kdyzm.cn

From:https://www.cnblogs.com/kuangdaoyizhimei/p/18319074
本文地址: http://shuzixingkong.net/article/333
0评论
提交 加载更多评论
其他文章 使用 useRequestEvent Hook 访问请求事件
摘要:本文介绍Nuxt 3中useRequestEventHook的使用,可访问请求路径、方法和头部信息,适用于SSR环境下处理请求逻辑,如中间件、插件及API路由。仅服务器端生效,需注意安全性。
使用 useRequestEvent Hook 访问请求事件 使用 useRequestEvent Hook 访问请求事件
[NOIP2008 提高组] 笨小猴(洛谷题号P1125)
[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次
关于游戏中声音控制的思路
之前对于声音控制是从网上搜索的,但是搜索的都五花八门,有对声音预处理的,有使用奇怪函数的, 后来思考了一下我找到所有actor然后找到RootComponent中枚举出SoundComponent,然后对其进行控制。当然在制作中要注意了,因为我枚举的是root下的child,所以声音组件一定要放到R
关于游戏中声音控制的思路
第一作者解读|我们这篇Nature Communication背后的故事
2024年7月16日,大暑将至,立秋不远。我们基于Python的转录组学全分析框架的文章——"OmicVerse: a framework for bridging and deepening insights across bulk and single-cell sequencing&
第一作者解读|我们这篇Nature Communication背后的故事 第一作者解读|我们这篇Nature Communication背后的故事 第一作者解读|我们这篇Nature Communication背后的故事
面试题:如何解决缓存和数据库的一致性问题?
所谓的一致性问题是指,在同时使用缓存和数据库的情况下,要确保数据在缓存与数据库中的更新操作保持同步。也就是当对数据进行修改时,无论是先修改缓存还是先修改数据库,最终都要保证两者的数据是一样的,不会出现数据不一样的问题。 1.一致性问题解决方案 缓存和数据库一致性的经典解决方案有以下两个: 使用延迟双
面试题:如何解决缓存和数据库的一致性问题? 面试题:如何解决缓存和数据库的一致性问题?
从DDPM到DDIM (一) 极大似然估计与证据下界
从DDPM到DDIM (一) 极大似然估计与证据下界 现在网络上关于DDPM和DDIM的讲解有很多,但无论什么样的讲解,都不如自己推到一遍来的痛快。笔者希望就这篇文章,从头到尾对扩散模型做一次完整的推导。本文的很多部分都参考了 Calvin Luo[1] 和 Stanley Chan[2] 写的经典
从DDPM到DDIM (一) 极大似然估计与证据下界 从DDPM到DDIM (一) 极大似然估计与证据下界
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
开源巨擘Llama 3.1崭露头角,性能卓越引发热议 在科技界的瞩目下,Llama 3.1系列模型以其卓越的性能脱颖而出,尤其是其405B超大杯版本,在微软Azure-ML GitHub平台的多项评测中展现出非凡实力,不仅超越了GPT-4o,就连70B版本也能与GPT-4o分庭抗礼。值得注意的是,这
【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光! 【实时最新】开源新纪元:Llama 3.1超大杯405B跑分惊艳,首次超越GPT-4o,下载链接曝光!
制作KubeVirt镜像
目录制作KubeVirt镜像1. 准备磁盘文件2. 编写Dockerfile3. 构建镜像4. 上传镜像到仓库(可选)5. 导出镜像6. 虚拟机yaml文件7. 启动虚拟机8. 启动虚拟机报错 制作KubeVirt镜像 我们现在已经安装好了Kubevirt并且也运行了第一个虚拟机,但是这个虚拟机并不