为什么需要 LVM
先理解问题
传统分区 vs LVM
- 传统分区的问题
- 分区大小在格式化时就定死了。
/分了 50G 用满了,旁边/home空着 200G——你没法把空间挪过去,只能重装或者做很危险的操作。 - LVM 的解法
- 在物理磁盘和文件系统之间加一层抽象。空间变成一个"池子",逻辑卷可以随时从池子里多要一点,而且不用停机。
三层结构
这个必须记住
PV → VG → LV,自下而上
- PV · 物理卷
- Physical Volume。一块硬盘或一个分区,被"登记"进 LVM 体系。
pvcreate /dev/sdc - VG · 卷组
- Volume Group。把多个 PV 合成一个大池子。你的 Rocky 上这个池子叫
rl。 - LV · 逻辑卷
- Logical Volume。从池子里切一块出来,格式化后挂载使用——它就是你日常看到的那个"分区"。
- 类比
- PV 是一张张钞票,VG 是钱包,LV 是从钱包里拿出来花的那部分。加钱进钱包(vgextend),花的时候就能多拿(lvextend)。
看现状:三条命令
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <63.00g 0
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <63.00g 0 ← 池子里没余量了
$ sudo lvs
LV VG Attr LSize
root rl -wi-ao---- <62.00g
swap rl -wi-ao---- 1.00g
在线扩容实操
四步,全程不停机
用昨天加的那块盘(如果昨天的 /data 还挂着,先 umount 并从 fstab 里注释掉;或者再加一块 10G 的新盘 sdc)。
① 把新盘变成 PV
$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
$ sudo pvs
/dev/sdc lvm2 --- 10.00g 10.00g ← 还没加入任何 VG
② 加进卷组(往钱包里塞钱)
$ sudo vgextend rl /dev/sdc
Volume group "rl" successfully extended.
$ sudo vgs
VG #PV #LV Attr VSize VFree
rl 2 2 wz--n- 72.99g 10.00g ← 池子里有 10G 可用了
③ 扩逻辑卷
# 加 5G
$ sudo lvextend -L +5G /dev/rl/root
# 或者:把 VG 里剩余的全给它
$ sudo lvextend -l +100%FREE /dev/rl/root
$ sudo lvs
LV VG Attr LSize
root rl -wi-ao---- 67.00g ← LV 变大了
$ df -h /
/dev/mapper/rl-root 62G ... ← ⚠️ 但 df 还是 62G!
这就是那个分水岭
扩了 LV ≠ 扩了文件系统。LV 是"容器"变大了,但里面的文件系统还是原来的大小,df 看不到变化。
只做前三步就以为完事了——这是最常见的错误,也是面试官用来分辨"背过"和"做过"的地方。
④ 扩文件系统 ← 关键
# xfs 用这个(RHEL 系默认,参数是挂载点)
$ sudo xfs_growfs /
# ext4 用这个(参数是设备名)
# sudo resize2fs /dev/rl/root
$ df -h /
/dev/mapper/rl-root 67G ... ← 现在真的变大了
别记混这两个
- xfs_growfs
- 用于 xfs(RHEL/Rocky 默认)。参数是挂载点,比如
/或/data。 - resize2fs
- 用于 ext4(Ubuntu/Debian 常见)。参数是设备名,比如
/dev/rl/root。 - 怎么确认自己是哪种
df -hT看 Type 那一列。
建一个新的 LV
不只是扩容
从池子里切一块新的出来
$ sudo lvcreate -L 3G -n applv rl # -n 起名字,rl 是卷组名
$ sudo mkfs.xfs /dev/rl/applv
$ sudo mkdir /app
$ sudo mount /dev/rl/applv /app
# 同样要写 fstab(昨天学的),LVM 的设备名是稳定的,可以直接用
$ echo '/dev/rl/applv /app xfs defaults 0 0' | sudo tee -a /etc/fstab
$ sudo mount -a ← 别忘了验证!
能不能缩小
一个重要的限制
xfs 不能缩小
xfs 只支持扩大,不支持缩小。想让 xfs 的 LV 变小,只能备份数据 → 删掉重建 → 恢复数据。
ext4 可以缩小,但必须先卸载(不能在线做),而且顺序和扩容相反:先缩文件系统,再缩 LV——顺序反了会丢数据。
实际工作中,缩容极少做。规划时宁可先分小一点,反正随时能扩。
今天的面试点
这题很常问
「LVM 有什么好处?」
「能在线扩容——不用停机,也不用重新分区。空间不够时加块新盘做成 PV、加进 VG,然后 lvextend 就行。」
「还能跨多块物理磁盘组成一个大的逻辑卷,突破单盘容量限制。」
「说一下扩容的完整步骤」
「pvcreate → vgextend → lvextend → xfs_growfs。」
然后主动强调最后一步:「注意扩完 LV 还要扩文件系统,只做前面三步的话 df 里根本看不到变化——xfs 用 xfs_growfs 跟挂载点,ext4 用 resize2fs 跟设备名。」
这个细节说明你真做过,而不是背的。
「PV、VG、LV 是什么关系?」
「PV 是物理卷,就是被纳入 LVM 的硬盘或分区;VG 是卷组,把多个 PV 合成一个空间池;LV 是逻辑卷,从池子里划出来格式化挂载使用。」
能一口气讲清三层关系,这题就满分了。
今天的练习
动手做,约 20 分钟
sudo pvs、sudo vgs、sudo lvs各看一遍,认出你系统的卷组名(应该是rl)lsblk对照着看,理解sda2 → rl-root这个层级关系- 在 Parallels 里再加一块 10 GB 硬盘(或者把昨天的
/data卸载腾出来) - 完整走一遍扩容:
pvcreate→vgextend→lvextend -L +5G - 重点体会:
lvextend之后先看一次df -h /(没变),再xfs_growfs /,再看一次(变了) - 选做:
lvcreate建一个 2G 的新 LV,格式化挂到/app,写进 fstab 并mount -a验证
明天预告
Day 24 讲 dnf 装软件和配国内源。相对轻松的一天,但里面有个「自建本地仓库」的点,在传统企业内网环境很常见。