Linux

分区与 LVM

RHEL 9 看懂磁盘、fdisk 分区、格式化挂载、fstab 永久生效,以及 LVM 的 PV/VG/LV 与扩容(xfs_growfs)。

这一篇把「多出来的那块盘」变成能用的目录,并解决考试爱考的 LVM 扩容。全文按操作顺序写:先认清磁盘 → 分区 → 格式化 → 挂载 → 写进开机配置;再进入 LVM 的仓库模型与扩容。

系列:从 RHCSA 到 RHCE · 第 10 / 17 篇 上一篇:find、grep 与脚本入门下一篇:服务与计划任务总目录:系列索引

环境说明

  • 系统:RHEL 9
  • 身份:root
  • 硬件:建议虚拟机额外加 1 块空数据盘(例如 10GB),不要在系统盘上练 fdisk 写分区表
  • 前置:基础命令;知道 /dev 里是设备文件

危险:fdisk/parted 对错误磁盘写入会丢数据。每一步先 lsblk 确认盘符;有快照先打快照。

1. 先认清:硬盘、分区、挂载

用生活比喻:

概念比喻
硬盘 /dev/vdb一整块空地
分区 /dev/vdb1在空地上划出的地块
格式化 mkfs.xfs给地块铺上某种「地板」(文件系统)
挂载 mount给地块开一个门牌目录,比如 /data,人才能进去放东西

Windows 习惯 C 盘、D 盘;Linux 是一棵树,把设备「接到」某个目录上。

常见设备名

名字常见含义
/dev/sda /dev/sdbSATA/SCSI 盘(a、b 表示第几块)
/dev/vda /dev/vdb虚拟机 virtio 盘
/dev/nvme0n1NVMe 固态
/dev/sr0光驱
/dev/vda1第 1 块盘上的第 1 个分区

数字后缀就是分区号:vdb → vdb1、vdb2…

2. 查看磁盘:lsblk

lsblk

示例(你的机器数字会不同):

NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0            11:0    1 1024M  0 rom
vda           252:0    0   20G  0 disk
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part
vdb           252:16   0   10G  0 disk
列怎么看
NAME设备名
SIZE容量
TYPEdisk 整盘 / part 分区 / lvm 逻辑卷 / rom 光驱
MOUNTPOINTS挂到了哪个目录(空的说明还没挂载)

再看文件系统类型(格式化成什么):

lsblk -f

3. 分区:fdisk

下面用第二块盘 /dev/vdb 做实验(请改成你的空盘名)。

fdisk /dev/vdb

进入交互界面,常用键:

键作用
m帮助
p打印当前分区表
n新建分区 new
t改分区类型(LVM 时用到)
w写入并退出(不写等于白分区)
q不保存退出

新建一个 1G 主分区(标准考场节奏)

  1. fdisk /dev/vdb
  2. 按 n
  3. 分区类型:直接回车(默认 primary 主分区)
  4. 分区号:回车(默认 1)
  5. 起始扇区:回车(默认从头)
  6. 结束位置:输入 +1G(大小)
  7. 按 p 确认能看到 vdb1
  8. 按 w 保存

验证:

lsblk

应看到 vdb 下多了 vdb1。

易错:改完不按 w,分区不存在。 易错:对 /dev/vda(系统盘)乱分区导致起不来——练习只用空盘。 主分区数量:传统 MBR 最多 4 个主分区;需要更多时用扩展分区(考试一般 1~2 个主分区就够)。

4. 格式化:mkfs

分区还是「空地块」,要铺上文件系统才能存文件。

RHEL 常用 xfs(也常见 ext4):

mkfs.xfs /dev/vdb1
# 警告:格式化会清掉该分区上的数据!

其它格式:

mkfs.ext4 /dev/vdb1
mkfs.vfat /dev/vdb1    # 可能需 dnf 安装 dosfstools

查看:

lsblk -f
blkid /dev/vdb1

5. 挂载:mount(临时)

mkdir -p /data
mount /dev/vdb1 /data
lsblk
df -h
命令看什么
lsblkMOUNTPOINTS 列是否出现 /data
df -h人类可读的已用/可用空间

试一下能不能写:

touch /data/hello.txt
ls /data

临时挂载的缺点

reboot
# 重启后
df -h
lsblk

重启后 mount 命令挂的分区会消失(除非写进了配置文件)。生产与考试都要做「永久挂载」。

6. 永久挂载:/etc/fstab

vim /etc/fstab

在文件末尾追加一行(字段用空格或 Tab 分开):

/dev/vdb1    /data    xfs    defaults    0    0
列含义本例
1挂谁(设备)/dev/vdb1
2挂到哪(目录)/data
3文件系统类型xfs
4选项defaults 最常用;还有 ro 只读等
5dump 备份标记一般 0
6开机 fsck 检查顺序一般 0(数据盘)/ 根分区常为 1

保存后立即按配置挂载(不必重启):

mount -a
df -h

mount -a = 把 fstab 里尚未挂上的都挂上。若 fstab 写错,这里会报错——比直接重启更安全。

考点:改 fstab 后用 mount -a 验证。 易错:fstab 里设备写错或目录不存在,可能导致开机卡住。练习机务必先 mount -a。

7. Swap:用磁盘当「备用内存」

内存不够时,系统可以把不常用的数据换到 swap 分区。

查看:

free -m
              total        used        free
Mem:           956         305         666
Swap:         2047           0        2047

新建 swap 分区(接着用 vdb)

fdisk /dev/vdb
# n → 主分区 → 2 → 回车 → +512M → w
lsblk

格式化并启用:

mkswap /dev/vdb2
swapon /dev/vdb2
free -m
swapon -s

永久启用(fstab):

vim /etc/fstab
/dev/vdb2    swap    swap    defaults    0    0
swapon -a
free -m

记忆:普通分区用 mkfs+mount;swap 用 mkswap+swapon。

8. LVM:可以「长大」的分区

普通分区建好后很难改大小。LVM(Logical Volume Manager)在中间加了一层「仓库」,逻辑卷可以从仓库里灵活取空间。

三层模型

物理硬盘/分区     卷组 VG(仓库)      逻辑卷 LV(真正挂载用)
─────────────    ────────────────    ────────────────────
/dev/vdb3   →    myvg(很多 PE)  →   mylv  → 格式化 → /volume
/dev/vdb4   →         ↑
名称全称一句话
PVPhysical Volume把硬盘/分区交给 LVM 管理
VGVolume Group把多个 PV 合成一个「空间仓库」
LVLogical Volume从仓库里划出来的「可挂载卷」
PEPhysical Extent仓库里的最小格子(默认 4MiB,可改)

流程口诀:

分区 → PV → VG → LV → mkfs → mount

8.1 准备分区(示例 3G)

fdisk /dev/vdb
# n → 3 → 回车起始 → +3G → w
lsblk

8.2 建 VG(卷组)

vgcreate -s 16M myvg /dev/vdb3
参数含义
-s 16M每个 PE 为 16MiB(可省略,用默认 4MiB)
myvg卷组名(自定义)
/dev/vdb3用哪个物理卷

查看:

vgdisplay myvg
# 或
vgs

关注:VG Size 总容量、Free PE 还剩多少格子。

8.3 建 LV(逻辑卷)

两种写法任选:

lvcreate -n mylv -l 100 myvg     # 取 100 个 PE
# 或
lvcreate -n mylv -L 1G myvg      # 取大约 1G 容量
参数含义
-n mylv逻辑卷名字
-l 100100 个 PE
-L 1G直接按容量
lvs
lsblk

设备路径常见两种(等价):

/dev/myvg/mylv
/dev/mapper/myvg-mylv

8.4 格式化并挂载

mkfs.xfs /dev/myvg/mylv
mkdir -p /volume
vim /etc/fstab
/dev/myvg/mylv    /volume    xfs    defaults    0    0
mount -a
df -h
lsblk -f

9. 扩容(考试高频)

逻辑卷「不够用了」分两种情况。

情况 A:VG 里还有剩余 PE → 只扩 LV

vgs                    # 看 Free PE / Free
lvextend -L 2G /dev/myvg/mylv
# 若原来是 1G,这里扩到总共 2G(-L 是目标大小)

或增加指定增量:

lvextend -L +512M /dev/myvg/mylv

关键一步:扩完 LV 后,文件系统不会自动变大。

df -h /volume          # 可能仍旧显示旧大小

按文件系统类型扩展:

# xfs(RHEL 默认常见)
xfs_growfs /volume

# ext4 则用
resize2fs /dev/myvg/mylv

再看:

df -Th /volume
lvs

考点:lvextend 之后必须 xfs_growfs(或 resize2fs),否则 df 不变。

情况 B:VG 空间不够 → 先扩 VG,再扩 LV

  1. 新建一个分区(或用整块新盘)
  2. vgcreate 不行,要用 vgextend 把新 PV 加进已有 VG
  3. 再 lvextend + xfs_growfs
fdisk /dev/vdb
# n → 4 → 剩余空间 → w
lsblk

vgextend myvg /dev/vdb4
vgdisplay myvg          # Free PE 应变多

lvextend -L 3G /dev/myvg/mylv
xfs_growfs /volume
df -Th /volume

扩容记忆图

不够用?
  ├─ VG 还有空 → lvextend → xfs_growfs/resize2fs
  └─ VG 也不够 → fdisk 新分区 → vgextend → lvextend → xfs_growfs

10. 推荐完整实验(约 40 分钟)

准备:虚拟机加一块 10GB 空盘(假定为 /dev/vdb)。

lsblk
lsblk -f

# --- 普通分区与挂载 ---
fdisk /dev/vdb
# 创建 vdb1 = +1G,w 保存
mkfs.xfs /dev/vdb1
mkdir -p /data
mount /dev/vdb1 /data
echo 'fstab line: /dev/vdb1 /data xfs defaults 0 0' >> /tmp/reminder.txt
vim /etc/fstab
# 追加:/dev/vdb1 /data xfs defaults 0 0
mount -a
df -h /data
touch /data/from-part1.txt

# --- swap(可选)---
# fdisk 创建 vdb2 = +512M
# mkswap /dev/vdb2 && swapon /dev/vdb2 && free -m

# --- LVM ---
# fdisk 创建 vdb3 = +3G
vgcreate -s 16M myvg /dev/vdb3
vgdisplay myvg
lvcreate -n mylv -l 100 myvg
lvs
mkfs.xfs /dev/myvg/mylv
mkdir -p /volume
vim /etc/fstab
# 追加:/dev/myvg/mylv /volume xfs defaults 0 0
mount -a
df -h /volume

# --- 扩容 LV ---
vgs
lvextend -L +512M /dev/myvg/mylv
df -h /volume          # 注意:可能还没变大
xfs_growfs /volume
df -h /volume          # 应变大

期望

  • /data 可写,重启后仍在(fstab 生效)
  • lvs 能看到 mylv
  • lvextend + xfs_growfs 后 df -h /volume 容量增加

11. 速查表

目标命令
看磁盘lsblk / lsblk -f
分区fdisk /dev/vdX(n / p / w)
格式化mkfs.xfs /dev/vdXN
临时挂载mount 设备 目录
永久挂载写 /etc/fstab 后 mount -a
看空间df -h / df -Th
建 VGvgcreate -s 16M 卷组名 PV
建 LVlvcreate -n 名 -l PE数 卷组 或 -L 大小
扩 VGvgextend 卷组名 新PV
扩 LVlvextend -L +512M /dev/卷组/逻辑卷
扩文件系统xfs_growfs 挂载点 或 resize2fs 设备
swapmkswap + swapon

考点与易错

考点:完整链路 fdisk → mkfs → fstab → mount -a;LVM vgcreate/lvcreate;扩容 vgextend? → lvextend → xfs_growfs。 易错:lvextend 后忘记 xfs_growfs,df 看起来「没扩上」。 易错:fstab 写错仍重启,机器起不来;先 mount -a。 易错:对系统盘 vda 做破坏性分区练习。 易错:swap 用了 mkfs.xfs(应该用 mkswap)。 练习环境:课堂盘名若是 vdc/vdd,步骤相同只换设备名。

小结

  1. 先 lsblk 认盘,再 fdisk 分区、mkfs 格式化、mount 挂载。
  2. 重启后仍要生效,就写 /etc/fstab,并用 mount -a 验证。
  3. LVM 三层:PV → VG → LV;LV 挂载前仍要 mkfs。
  4. 扩容记住:VG 有空只 lvextend;VG 不够先 vgextend;最后必须 xfs_growfs。

下一篇进入服务:systemctl、计划任务 cron、时间同步 chrony,以及 NFS 共享目录。


系列导航:总目录 · 上一篇:find、grep 与脚本入门 · 下一篇:服务与计划任务

相关阅读

全部文章 →
← 返回列表更多「Linux」