ARTICLE DETAIL

资讯详情

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

磁盘实战 03|LVM 在线扩容实战:不停机把 /var 从 20G 扩到 50G,缩容为什么别碰

磁盘实战 03|LVM 在线扩容实战:不停机把 /var 从 20G 扩到 50G,缩容为什么别碰 我最早听说 LVM是因为一个「打脸现场」服务器/var分区 20G日志把它塞满了。我按 B2 那篇的办法清了日志撑了三天又满。去搜「Linux 分区扩容」答案清一色普通分区在线扩很折腾要删了重建、数据还得刚好在末尾用 LVM 才能一条命令扩。可惜我那台机器装系统时没选 LVM只能备份重装。装的时候我特意勾了 LVM——然后发现我根本不知道 LVM 是什么直到下次扩容时照着教程敲命令心里还是发虚pvcreate、vgextend、lvextend这三个词我一个都解释不了。这篇把 LVM 讲到「你能向别人解释」的程度再走完整扩容流程。〇、先花两分钟LVM 的三层是干嘛的LVMLogical Volume Manager逻辑卷管理器的核心思路在「物理磁盘」和「分区」之间加一层抽象让「分区」不再绑死在某块盘的某段空间上。三层结构用仓库打比方层名字类比例子PV物理卷Physical Volume进仓的每块货架整块盘或一个分区变成 LVM 可用的原料/dev/sdb1VG卷组Volume Group把所有货架拼成的一大片仓库区PV 池子空间在这里汇合vg-dataLV逻辑卷Logical Volume从仓库区里圈出来的一格格储位最终挂载、格式化的对象相当于「分区」lv-var挂载在 /var关键在 VG 这层LV 的空间不必来自同一块盘。老仓库/dev/sdb满了再进一块货架新盘做成 PV推进同一个仓库区vgextend储位LV就能从新货架上补货lvextend——上层完全无感。这就是「在线扩容」的本质。普通分区为什么不行因为它是「物理地址上连续的一段」扩容意味着末尾得有相邻的空地而通常末尾站着下一个分区。怎么知道自己在不在用 LVMlsblk怎么读看 TYPE 列。出现lvm类型且 NAME 形如vg--data-lv--var的树挂在某分区下面就是在用如果只有disk和part两层比如我的桌面虚拟机sda → sda1/sda2sda2 直接挂/就是普通分区没上 LVM。Ubuntu 服务器版安装时默认勾 LVM桌面版默认不勾——装服务器时勾上它是给自己未来省事的最佳时机。图示LVM 三层结构与扩容四步缩容别碰一、看懂现状pvs / vgs / lvs 三件套每层一条命令正好对应三层sudo pvs # 看物理卷哪些盘/分区进了仓 sudo vgs # 看卷组仓库区总大小、还剩多少 sudo lvs # 看逻辑卷切了哪些储位、各多大vgs的输出长这样示意VG #PV #LV #SN Attr VSize VFree vg-data 2 3 0 wz--n- 149.99g 29.99g怎么读VSize是仓库区总容量VFree是还没分出去的余量——扩容前先看它。VFree够直接进第三节VFree是 0先做第二节进货。二、扩容流程从加盘到扩文件系统场景/var在 LVvg-data/lv-var上ext4满了vgs显示 VFree0。买的新盘已插上系统里叫/dev/sdb。# 1. 新盘做成 PV进仓 sudo pvcreate /dev/sdb ​ # 2. 并入 VG推进仓库区 sudo vgextend vg-data /dev/sdb ​ # 3. 把 LV 扩 30G储位扩容 sudo lvextend -L 30G /dev/vg-data/lv-var ​ # 4. 关键一步让文件系统知道变大了 sudo resize2fs /dev/vg-data/lv-var四个坑每个我都见过有人踩漏了第 4 步。lvextend只扩了「储位的边界」ext4 文件系统还按旧大小记账df -h一看纹丝不动很多人此时以为命令没生效又乱敲一通。LV 扩了 ≠ 文件系统扩了两本账都要改。XFS 不是resize2fs是xfs_growfs /var挂载点不是设备名pvcreate打错对象打到了有数据的盘上。pvcreate只写元数据小块数据还在但 VG 一旦吞并它再做别的操作就可能真覆盖。执行前lsblk确认设备名——/dev/sdb和/dev/sda一个字母的差距是灾难和日常的差距想省一步lvextend -L 30G -r /dev/...-r就是自动帮你做第 4 步还能识别 XFS 自动换命令。知道这个参数的人反而不容易踩坑 1swap 分区扩容走的不是 resize2fs是另一套先扩 LV 再mkswapswapon别混。全程没有 umount、没有停机——「在线」两个字就是这么来的内核和文件系统在线支持扩容缩容 ext4 不支持在线这就是下一节。三、缩容知道怎么做但别做网上搜「LVM 缩容」能搜到教程umount→e2fsck -f→resize2fs缩文件系统 →lvreduce缩 LV。步骤是存在的但危险度完全不对等扩容边界往外推推到的是空白区出错顶多失败重来缩容边界往里收收进来的每一步都在裁掉有数据的区域。两个大小参数resize2fs 的目标大小、lvreduce 的目标大小只要有一处算错或敲错文件系统元数据被拦腰截断fsck都不一定救得回来。而且它要求 umount——根分区就别想了得进救援环境。真实生产里的选择从来不是「缩 A 区去补 B 区」而是「加块盘/扩虚拟盘把空间补进 VG」——云时代磁盘是弹性的缩容这个需求本身就在消失。一句话记住lvextend常用lvreduce查过一次资料就够了别真的用它。四、和前后篇的关系判断「该不该上 LVM」的入口是D2的lsblkTYPE 列有没有lvm扩容流程第 4 步的resize2fs/xfs_growfs之分取决于文件系统——D4讲怎么选LV 最终还是要写进/etc/fstab开机挂载D6设备名用/dev/mapper/vg--data-lv--var这个形式。速查表文末收藏版我在用 LVM 吗 → lsblk TYPE 列有 lvm 在用 三层各看什么 → pvs物理卷/ vgs卷组,看 VFree/ lvs逻辑卷 新盘并入 → sudo pvcreate /dev/sdb sudo vgextend vg名 /dev/sdb 扩容一步到位 → sudo lvextend -L 30G -r /dev/vg/lv -r 自动扩文件系统 忘了 -r 怎么补 → ext4: sudo resize2fs /dev/vg/lv xfs : sudo xfs_growfs /挂载点 扩容前先看 → vgs 的 VFree余量够不用加盘 pvcreate 之前 → lsblk 核对设备名sda/sdb 一字母之差灾难 缩容 → 教程存在别用正确姿势是加盘补空间
返回列表