ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LVM逻辑卷+ext4文件系统实战:从原理到扩容完整指南

LVM逻辑卷+ext4文件系统实战:从原理到扩容完整指南 最近帮一台存储紧张的机器整理磁盘花了小半天把 LVM 的完整流程又走了一遍顺手解决了几个平时不常碰的问题。借着这个机会把LVM 逻辑卷 ext4 文件系统这套组合从原理到实操好好梳理一遍既算给自己做个备忘也给刚接触 Linux 存储的朋友一份能直接抄作业的参考。LVM 的全称是 Logical Volume Manager也就是逻辑卷管理核心价值在于把底层物理磁盘变成可以灵活切分的逻辑卷。很多服务器用着用着根分区满了、数据盘塞不下了如果没用 LVM只能加一块新盘、手动拷贝数据、再重新挂载过程又慢又牵一发动全身用了 LVM 之后新盘加进来、卷直接在线扩大业务几乎感知不到。这套组合早年间在小型机和大型机上就是标准做法到了 Linux 上经过这么多年迭代已经非常成熟。无论是传统的服务器机房、自建的 NAS、台式机的多硬盘环境还是云电脑那种带数据盘的场景LVM ext4 都是最稳妥的选择之一。下面会从原理讲起再给你完整的创建、扩容、重装维护流程以及我这些年攒下来的若干个坑。1. 这套存储方案到底解决什么问题1.1 应对磁盘空间不足的经典场景先设想一个最常见的烦恼服务器上挂了一块 500GB 的数据盘用着用着发现快满了业务还在继续写入。如果没有 LVM常规操作就是关机、加一块更大的盘、手动把数据拷贝过去、改挂载配置、重启验证。这意味着停机时间也意味着手工拷贝期间数据可能变化还得先想好怎么停止相关服务整个流程既靠运气又费时间。而使用 LVM 之后你只需要把新加的物理硬盘用 pvcreate 加入卷组再用 lvextend 扩大逻辑卷的容量最后执行一次 resize2fs 让 ext4 文件系统“吸收”新增空间。整个过程不需要卸载分区、不需要停服务、甚至不需要重启业务持续运行的同时完成扩容。这个能力在数据库服务器、文件服务器和大量容器节点上尤其关键。同样的逻辑倒过来如果某块旧的物理硬盘需要移除LVM 也支持数据迁移后再把盘从卷组中摘掉。这种对存储的动态管理能力正是普通分区方式完全做不到的。1.2 LVM 的核心优势与无法回避的短板凡事都有两面。LVM 的好处确实明显首先是容量可以随意伸缩多个物理盘可以合并形成一个大卷组逻辑卷可以跨盘分布空间利用率瞬间拉高其次是可以做卷级别的快照备份、测试环境的搭建都方便再者就是命名独立于底层硬件即使物理盘顺序发生变化逻辑卷的逻辑名也不变系统启动照样稳定。但也有不太顺手的地方。一是结构上多了一层抽象出了故障排查难度会比直接分区稍高比如物理卷损坏时需要先确认该卷组里还有没有冗余二是快照等功能也不是万能的不当使用反而会拖慢正常 IO三是如果全盘使用 LVM 又没有做合理规划一个小容量卷组也可能在后期面临压力。因此生产环境里规划阶段就要想清楚卷组大小、预留空间和备份策略而不是等到故障再临时想办法。2. 前期准备环境、工具与方案取舍2.1 实操环境清单与非 root 用户注意点动手之前先确认自己手头的环境是否满足前提条件。一般来说普通的 x86 服务器、虚拟机、云主机都没有问题操作系统只要是较新版本的 RHEL、CentOS、Ubuntu、Debian以及麒麟、统信 UOS 这类常用发行版都能完整支持 LVM 和 ext4。系统内核默认就带 device-mapper 驱动需要的基础工具包名字也很统一RHEL 系和 Debian 系都叫 lvm2只是安装命令略有差异。如果没有 root 账号操作前记得先切换或者用 sudo 提权。以下大部分步骤需要写块设备、格式化分区、修改挂载配置普通用户的权限完全不够。建议全程在测试机或虚拟机里先练习一次等完全熟悉之后再上生产环境毕竟磁盘这类操作的容错率很低一个失误就可能丢数据。2.2 为什么第一选择还是 ext4现在文件系统选项并不少比如 ext4、XFS、Btrfs 等但我依然建议把 ext4 作为第一选择。主要原因有几个ext4 是最知名的 Linux 原生文件系统之一整体稳定性经过了十几年的大规模生产验证支持最大 1EB 的单卷容量实际受块设备大小限制单文件最大 16TB足以覆盖绝大多数场景。更关键的一点是它是目前主流发行版中对“在线扩容”支持最成熟、最容易操作的选项。与之相比XFS 虽然在 RHEL 7 以后的系统上成了默认扩容能力也很强但它最大的缺点是“不能缩容”一旦卷需要收缩就会非常被动。而 ext4 理论上支持在线扩容且相对安全虽然缩容也建议离线进行但在应急场景下至少多了一种选择。对于新手入门ext4 的学习成本和排错难度都低遇到问题查找资料也轻松得多。2.3 顺手备好的辅助工具实际操作中有些辅助工具会频繁用到。lvm2 是核心包blkid 用来查看文件系统类型和 UUIDlsblk 可以一目了然地查看磁盘、分区、挂载点和容量关系parted 或 fdisk 负责做最底层的磁盘分区。还有个容易被忽略的工具就是 System Storage Managerssm它能让你用更少的命令把“创建卷组、创建逻辑卷、格式化、挂载”一次性完成适合批量操作不过我还是建议第一步先手动敲一遍把原理走通之后再考虑简化工具。如果需要在 Windows 环境下查看 Linux 的 ext4 分区内容可以用 DiskGenius 这类工具。但需要注意DiskGenius 对普通 ext4 分区支持较好对 LVM 卷组的读取往往有限遇到 LVM 封装的分区最好还是放到 Linux 环境里处理避免在 Windows 下强行操作造成意外损坏。3. 原理必须看PV、VG、LV 三层模型3.1 一个生活化的类比LVM 的架构看起来抽象其实可以类比成租房子。PVPhysical Volume物理卷相当于一套毛坯房它是把物理硬盘或分区标记出来作为可用的原材料VGVolume Group卷组相当于把所有毛坯房所在的楼层合并成一个大空间这一层的核心是“放一起统一管理”LVLogical Volume逻辑卷则是在这个大空间里隔出来的一个个独立房间每个房间有门牌号、有大小操作系统看到的就是这些房间。举这个例子的意思是在 LVM 的世界里你不需要关心某个 LV 到底落在哪块硬盘上你只需要知道房间的总容量来自整个 VG 池子。这样当某个物理盘即将装满你可以把另一块物理盘加入 VG然后直接扩大某个“房间”的面积房间里的门牌号和相关服务不用做任何调整。3.2 两层封装里藏着什么拆开看LVM 一共做了两次抽象。第一次抽象是把物理磁盘“包装”成 PVPV 上会记录这个卷自身的标识、所属 VG 等信息实质就是在设备层之上加了一层元数据结构。多个 PV 加入 VG 之后VG 负责把它们的存储空间合并并切成一个个小块这些小块的名称叫 PEPhysical Extent物理扩展块每个 PE 默认是 4MiB。第二次抽象是 LVLV 由若干 PE 组成PE 均匀地分布在一个或多个 PV 上LV 还可以通过条带化等方式分布在多块盘上提升性能。基于这套结构LVM 才能实现我们最想要的几个动作扩大 LV 就是往这个“房间”里追加新的 PE缩小 LV 则是把一些 PE 拿走移除物理卷之前先使用 pvmove 把数据搬到别的 PV 上。理解了 PE 这个单位后面看到 pvs、vgs、lvs 这些命令输出的 PE 信息时就不会一头雾水了。4. 实操全过程创建 LVM 卷并格式化为 ext44.1 第一步检查磁盘与分区规划进入一台刚加了新盘的服务器第一件事是用 lsblk 和 fdisk -l 看清磁盘布局。假设系统盘是 sda新加的裸盘是 sdb容量 1TB那么整个流程的目标就是把这 1TB 的物理空间交给 LVM 管理再划分出合适大小的逻辑卷。有人可能会问为什么不在新建逻辑卷时直接使用整块物理盘而是要先给盘做一个分区原因很简单LVM 过去有个习惯是在 /dev/sdb1 这类分区之上创建 PV但直接用整块盘如 /dev/sdb也可以。直接整盘创建优点是省事缺点是有时候重启机器后设备名顺序会乱容易引起识别层面的混淆。用分区表哪怕只有一个分区加上 LVM 标识会让磁盘的意图更明确即使换了机器、换了接口顺序也更方便识别。这里我建议创建分区并且把分区类型设置为 Linux LVM。用 fdisk 交互式操作时依次输入n 创建新分区、p 选主分区、直接回车使用默认起始和结束扇区代表整块盘最后输入 t 改分区类型为 8e 即 Linux LVMw 保存退出。如果想用非交互方式也可以写成一行脚本式命令但新手第一次还是建议一步步来看到每一步的输出心里更踏实。4.2 第二步建 PV、建 VG、建 LV分区做好之后就可以开始创建 PV。命令很简单pvcreate /dev/sdb1。这一条命令会在分区上初始化 LVM 元数据把它变成 LVM 能理解的物理卷。可以用 pvs 查看当前系统中的 PV 列表你会看到 PV 的路径、所属 VG、PV 大小和空闲空间等信息。接着创建 VG例如要给这个存储取个直观名字叫>UUIDxxxxxx /data ext4 defaults 0 2其中第六列的 2 表示该文件系统在开机时要进行 fsck 检查根分区一般是 1其他数据分区建议用 2如果你希望完全跳过检查也可以写 0但要自己确认这份数据的可靠性诉求。改完 fstab 后不要立刻重启去验证先执行 mount -a让系统按 fstab 重新挂载一次没有报错说明配置基本正确。再用 findmnt /data 确认挂载源是预期的设备。这一步能避免重启后才发现配置错误、系统进不去的尴尬。5. 扩展与收缩LVM 价值真正落地的操作5.1 在线扩容步骤与边界条件现在数据盘用了几个月200GB 的空间扛不住了。最理想的情况是物理卷所在的磁盘还有空闲空间VG 里也有空闲 PE那直接在 LV 上扩大即可。命令是 lvextend -L 100G /dev/data-vg/data-lv意思是把>
返回列表