7.1 RHCSA 备考:磁盘分区与 LVM

预计阅读时间:23 分钟

📖 目录

RHCSA(Red Hat Certified System Administrator,红帽认证系统管理员)考试中,磁盘分区和 LVM 是必考知识点。本文按考试场景梳理核心操作,涵盖分区创建、文件系统管理、LVM 全生命周期操作以及 swap 配置。掌握这些操作是通过 RHCSA 考试的关键。

LVM(Logical Volume Manager,逻辑卷管理器):Linux 的磁盘管理抽象层,允许将物理磁盘(PV)组成卷组(VG),再从卷组中划分逻辑卷(LV),实现动态扩容和快照。MBR(Master Boot Record):传统的磁盘分区方案,最多支持 4 个主分区,单分区最大 2TB。GPT(GUID Partition Table):新的磁盘分区方案,支持 128+ 个分区,最大分区 8ZiB,适合大于 2TB 的磁盘。

学习目标

  • 掌握 MBR 和 GPT 分区方案的区别与创建方法,能够在考试环境中正确划分磁盘分区
  • 熟练创建 ext4 和 xfs 文件系统,并理解两者的特性差异与适用场景
  • 掌握 LVM 的完整工作流程(PV → VG → LV),能够动态扩展逻辑卷空间
  • 能够正确配置 /etc/fstab 实现永久挂载,确保系统重启后挂载依然生效

前置知识

考试要点

知识点重要程度考试频率说明
MBR 分区(fdisk)★★★创建、删除、修改 MBR 分区表
GPT 分区(gdisk/parted)★★☆适用于大于 2TB 磁盘,parted 更直观
创建文件系统★★★mkfs.ext4 / mkfs.xfs,blkid 验证
永久挂载 /etc/fstab★★★必考UUID 方式挂载,mount -a 验证
LVM 创建(PV/VG/LV)★★★必考完整流程:pvcreate → vgcreate → lvcreate
LVM 扩展★★★必考lvextend + resize2fs/xfs_growfs
Swap 管理★★☆mkswap + swapon + fstab 配置

1. 分区操作

MBR 分区(fdisk)

MBR(Master Boot Record)是最传统的分区方案,最多支持 4 个主分区,单分区最大 2TB。考试中最常见的场景是用 fdisk 对新磁盘进行分区。fdisk 是一个交互式工具,操作简单直观。

# 进入交互式分区
sudo fdisk /dev/sdb

# fdisk 交互命令
# n - 新建分区
# p - 主分区,e - 扩展分区
# w - 写入并退出
# d - 删除分区
# t - 更改分区类型(如 8e 为 LVM,83 为 Linux)
# p - 打印当前分区表
# q - 不保存退出

# 非交互方式(使用 echo 管道,适合脚本化)
echo -e "n\np\n1\n\n+1G\nw" | sudo fdisk /dev/sdb

# 查看分区表
sudo fdisk -l /dev/sdb
# 预期输出:Device     Boot   Start     End Sectors  Size Id Type
#            /dev/sdb1          2048 2099199 2097152    1G 83 Linux

lsblk /dev/sdb
# 预期输出:NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
#            sdb      8:16   0  10G  0 disk 
#            └─sdb1   8:17   0   1G  0 part

GPT 分区(gdisk 或 parted)

GPT(GUID Partition Table)支持超过 2TB 磁盘,分区数量几乎无限制。RHEL 8/9 默认使用 GPT。parted 提供了比 fdisk 更友好的命令行接口,可以直接指定分区大小。

# parted 创建 GPT 分区(推荐,命令更简洁)
sudo parted /dev/sdc mklabel gpt
sudo parted /dev/sdc mkpart primary 1MiB 2GiB
sudo parted /dev/sdc mkpart primary 2GiB 100%

# 查看分区信息
sudo parted /dev/sdc print

# gdisk 交互方式(类似 fdisk,但支持 GPT)
sudo gdisk /dev/sdc
# 交互命令:
# n - 新建分区
# d - 删除分区
# p - 打印分区表
# w - 写入并退出

创建文件系统

分区创建完成后必须格式化文件系统才能使用。RHEL 默认使用 xfs,但 ext4 也经常出现。ext4 支持缩容而 xfs 不支持,这是两者最重要的区别。

特性ext4xfs
RHEL 默认RHEL 6 及之前RHEL 7/8/9 默认
最大卷大小1 EB8 EB
最大文件大小16 TB8 EB
缩容支持支持(需离线)不支持
扩展支持支持(在线)支持(在线)
元数据备份支持(tune2fs -l)不支持(设计哲学不同)
典型工具resize2fs、e2fsck、tune2fsxfs_growfs、xfs_repair、xfs_info
考试提示需要缩容时必须用 ext4绝大多数场景首选

选择依据:考试中若无缩容需求,优先选 xfs(RHEL 默认);若明确要求缩容,必须选 ext4。

# ext4(适用于需要缩容的场景)
sudo mkfs.ext4 /dev/sdb1
# 预期输出:mke2fs 1.46.5 (12-Jan-2023)
#            Creating filesystem with ...

# XFS(RHEL 默认文件系统,性能好,不支持缩容)
sudo mkfs.xfs /dev/sdb2
# 预期输出:meta-data=/dev/sdb2             isize=512    agcount=4, ...

# 查看已创建的文件系统
sudo blkid /dev/sdb1
# 预期输出:/dev/sdb1: UUID="xxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="xxxx"

lsblk -f /dev/sdb
# 预期输出:NAME FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
#            sdb1 ext4         xxxx                                  976M    0% 
#            sdb2 xfs          xxxx                                     -     - 

2. 永久挂载(/etc/fstab)

/etc/fstab 是系统启动时自动挂载的配置文件。考试中必须用 UUID 方式配置,因为设备名可能在重启后变化——内核按发现顺序分配 /dev/sdX,如果插入顺序改变(如 USB 硬盘先插后插),设备名会漂移,导致 fstab 挂载到错误分区。UUID(Universally Unique Identifier)由文件系统创建时写入超级块,与物理位置无关,是唯一可靠的引用方式。fstab 有六个字段,每个字段的含义必须牢记。

# 先用 UUID 挂载(比设备名更可靠)
sudo mkdir /mnt/data

# 获取 UUID
sudo blkid -s UUID -o value /dev/sdb1

# 写入 fstab(使用 UUID)
echo "UUID=$(sudo blkid -s UUID -o value /dev/sdb1) /mnt/data ext4 defaults 0 2" | sudo tee -a /etc/fstab

# 挂载所有 fstab 条目
sudo mount -a

# 验证
df -h /mnt/data
findmnt /mnt/data
cat /etc/fstab
fstab 字段说明常见值
设备分区标识UUID=xxx 或 /dev/sda1
挂载点目录路径/mnt/data
文件系统类型ext4, xfs, swap
选项挂载参数defaults, noatime, ro
dump备份标记0(不备份)
pass启动检查顺序1(根分区), 2(其他), 0(不检查)

3. LVM 操作

创建 LVM

LVM(Logical Volume Manager)提供灵活的磁盘管理能力,可以在不丢失数据的情况下扩展或收缩存储空间。LVM 有三个核心概念:物理卷(PV)、卷组(VG)、逻辑卷(LV)。

# 1. 创建物理卷(PV)
sudo pvcreate /dev/sdb1 /dev/sdb2
# 预期输出:Physical volume "/dev/sdb1" successfully created.
#            Physical volume "/dev/sdb2" successfully created.

# 查看 PV
sudo pvs
# 预期输出:PV         VG     Fmt  Attr PSize   PFree
#            /dev/sdb1         lvm2 ---   1.00g  1.00g
#            /dev/sdb2         lvm2 ---   2.00g  2.00g

sudo pvdisplay /dev/sdb1
# 预期输出:--- Physical volume ---
#            PV Name               /dev/sdb1
#            VG Name               vg_data
#            ...

# 2. 创建卷组(VG)
sudo vgcreate vg_data /dev/sdb1 /dev/sdb2

# 查看 VG
sudo vgs
# 预期输出:VG       #PV #LV #SN Attr   VSize   VFree
#            vg_data   2   0   0 wz--n- <3.00g <3.00g

sudo vgdisplay vg_data

# 3. 创建逻辑卷(LV)
sudo lvcreate -n lv_data -L 5G vg_data
# 预期输出:Logical volume "lv_data" created.

# 或者使用百分比
sudo lvcreate -n lv_logs -l 50%VG vg_data
# 预期输出:Logical volume "lv_logs" created.

# 查看 LV
sudo lvs
# 预期输出:LV       VG       Attr       LSize   Pool Origin Data%  Meta%
#            lv_data  vg_data -wi-a-----  <5.00g                                                    
#            lv_logs  vg_data -wi-a----- <1.50g

# 4. 创建文件系统并挂载
sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mkdir /mnt/data
sudo mount /dev/vg_data/lv_data /mnt/data

# 永久挂载
echo "UUID=$(sudo blkid -s UUID -o value /dev/vg_data/lv_data) /mnt/data ext4 defaults 0 2" | sudo tee -a /etc/fstab

扩展 LVM(考试重点)

LVM 扩展是 RHCSA 考试的核心考点,必须掌握完整的扩展流程:先扩展 VG(如有必要),再扩展 LV,最后扩展文件系统。忘记最后一步扩展文件系统是最常见的错误。

# 扩展 LV 前确保 VG 有空闲空间
sudo vgs  # 查看 Free 列
# 预期输出:VG       #PV #LV #SN Attr   VSize   VFree
#            vg_data   2   2   0 wz--n- <3.00g <2.50g

# 如果 VG 空间不足,先扩展 VG
sudo vgextend vg_data /dev/sdc1
# 预期输出:Volume group "vg_data" successfully extended

# 扩展 LV +5G
sudo lvextend -L +5G /dev/vg_data/lv_data
# 预期输出:Logical volume lv_data successfully resized.

# 或者扩展到指定大小
sudo lvextend -L 15G /dev/vg_data/lv_data

# 扩展文件系统(注意命令不同)
# ext4
sudo resize2fs /dev/vg_data/lv_data
# 预期输出:resize2fs 1.46.5 (12-Jan-2023)
#            The filesystem on /dev/vg_data/lv_data is now ...

# xfs(只能扩大不能缩小)
sudo xfs_growfs /mnt/data
# 预期输出:meta-data=/dev/mapper/vg_data-lv_data isize=512 ... 

缩容 LVM(极少考但要知道原理)

XFS 不支持缩容。ext4 缩容需先卸载、检查、缩小文件系统再缩小 LV:

sudo umount /mnt/data
sudo e2fsck -f /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data 10G
sudo lvreduce -L 10G /dev/vg_data/lv_data
sudo mount /dev/vg_data/lv_data /mnt/data

4. Swap 管理

# 创建 swap 分区
sudo mkswap /dev/sdb3
# 预期输出:Setting up swapspace version 1, size = 1 GiB

# 启用
sudo swapon /dev/sdb3

# 查看 swap
swapon --show
# 预期输出:NAME      TYPE SIZE USED PRIO
#            /dev/sdb3 partition  1G   0B   -2

# fstab 中添加
echo "/dev/sdb3 none swap defaults 0 0" | sudo tee -a /etc/fstab

# 创建 swap 文件(替代分区)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 预期输出:2048+0 records in, 2048+0 records out

sudo chmod 600 /swapfile
sudo mkswap /swapfile
# 预期输出:Setting up swapspace version 1, size = 2 GiB

sudo swapon /swapfile

# 临时关闭 swap
sudo swapoff /dev/sdb3

# 查看 swap 使用情况
free -h

5. 完整配置案例:从裸盘到 LVM + Swap

把本章所有操作串成一个真实任务:新加一块 20G 裸盘 /dev/sde,要求建一个 12G 的 LVM 逻辑卷挂载到 /data(xfs),再用剩余空间做 swap,并全部开机自动挂载。以下每一步都给出预期输出,建议在虚拟机中完整演练一遍。

步骤 1:分区(fdisk)

# 交互式:n → p → 1 → 回车(默认起始) → +14G → n → p → 2 → 回车 → 回车(占满剩余)
#        → t → 1 → 8e → w
sudo fdisk /dev/sde
# The partition table has been altered.
# Calling ioctl() to re-read partition table.
sudo partprobe /dev/sde
lsblk /dev/sde
# NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sde      8:64   0  20G  0 disk
# ├─sde1   8:65   0  14G  0 part
# └─sde2   8:66   0   6G  0 part

步骤 2:创建 PV / VG / LV(LVM)

sudo pvcreate /dev/sde1
# Physical volume "/dev/sde1" successfully created.
sudo vgcreate vg_data /dev/sde1
# Volume group "vg_data" successfully created
sudo lvcreate -n lv_data -L 12G vg_data
# Logical volume "lv_data" created.
sudo pvs
# PV         VG      PSize  PFree
# /dev/sde1  vg_data 14.00g 2.00g

步骤 3:格式化并挂载

sudo mkfs.xfs /dev/vg_data/lv_data
# meta-data=/dev/mapper/vg_data-lv_data isize=512 ...
sudo mkdir -p /data
sudo mount /dev/vg_data/lv_data /data
df -hT /data
# Filesystem                     Type Size Used Avail Use% Mounted on
# /dev/mapper/vg_data-lv_data    xfs  12G  309M 12G   3% /data

步骤 4:创建 swap

sudo mkswap /dev/sde2
# Setting up swapspace version 1, size = 6 GiB ...
sudo swapon /dev/sde2
swapon --show
# NAME      TYPE       SIZE USED PRIO
# /dev/sde2 partition   6G   0B   -2

步骤 5:写入 fstab 并验证

echo "UUID=$(sudo blkid -s UUID -o value /dev/vg_data/lv_data) /data xfs defaults 0 2" | sudo tee -a /etc/fstab
echo "/dev/sde2 none swap defaults 0 0" | sudo tee -a /etc/fstab

sudo mount -a    # 无输出即全部挂载成功
findmnt /data
# TARGET SOURCE                  FSTYPE OPTIONS
# /data  /dev/mapper/vg_data-lv_data xfs rw,relatime

sudo swapoff -a && sudo swapon -a
# 最后 reboot 验证:重启后 df -h /data 与 swapon --show 应保持原样

6. 故障案例:fstab 写错导致进入 emergency mode

这是运维中最常见的灾难:fstab 里 UUID 写错或文件系统类型写错,启动时挂载失败,系统直接掉进 emergency mode(紧急模式)。掌握恢复流程比避免错误更重要——考试中这就是一道送分题。

现象

# 开机后屏幕提示:
# Welcome to emergency mode! After logging in, type "journalctl -xb"
# to view system logs, "systemctl reboot" to reboot,
# "systemctl default" to try again to boot into default mode.
# Give root password for maintenance
# (or press Control-D to continue):

恢复流程

# 1. 此时文件系统是只读的,先重新挂载为读写
mount -o remount,rw /

# 2. 定位失败原因(UUID 错误 / 类型错误 / 路径错误)
cat /etc/fstab
mount -a    # 会精确报出哪一行失败
# mount: /data: wrong fs type, bad option, bad superblock on /dev/sdb1

# 3. 用 blkid 核对真实 UUID,修正 fstab
blkid /dev/sdb1
# /dev/sdb1: UUID="5f2c1d4e-..." TYPE="xfs"
vi /etc/fstab    # 把 UUID 改为 blkid 输出的正确值

# 4. 验证配置无误
mount -a && findmnt /data

# 5. 直接以正常模式继续启动(无需重启)
systemctl default
# 或重启:reboot
恢复顺序:只读重挂载(remount,rw)→ 核对(blkid + mount -a 定位错误行)→ 修正(vi fstab)→ 验证(mount -a)→ 继续启动(systemctl default)。在只读文件系统上直接 vi 保存只会得到 "read-only file system" 报错。

7. 故障案例:swap 文件权限不对导致 swapon 失败

现象

# 创建 swap 文件后启用时报错:
sudo swapon /swapfile
# swapon: /swapfile: swapon failed: Operation not permitted

# 或权限过于宽松时报警告:
sudo chmod 644 /swapfile
sudo mkswap /swapfile
# mkswap: /swapfile: insecure permissions 0644, 0600 suggested.

原因与修复

# swap 文件的安全要求:权限必须是 600(仅 root 可读写)
# 原因:swap 文件中可能包含内存中的敏感数据(密码、密钥等)
# 若权限过宽,其他用户可通过 dd 读取 swap 内容

# 修复
sudo swapoff /swapfile              # 先关闭(如已启用)
sudo chmod 600 /swapfile            # 修正权限为 600
sudo swapon /swapfile               # 重新启用
swapon --show                       # 确认已启用

# 另一个常见错误:dd 创建的文件大小不足
# mkswap 会报 "size too small"
# 解决:确保 dd 的 count 参数与目标大小一致,如 2G 需要 count=2048(bs=1M)

常见错误

常见错误原因解决方法
mount -a 报错 UUID 不存在fstab 中 UUID 拼写错误或分区未格式化用 blkid 确认 UUID,重新格式化后重试
lvextend 报 No space on deviceVG 空间不足用 vgs 检查 Free 空间,先 vgextend 扩展 VG
resize2fs 报错在 xfs 文件系统上使用了 ext4 命令xfs 用 xfs_growfs,ext4 用 resize2fs
重启后挂载丢失/etc/fstab 未配置或配置错误检查 fstab,确保有对应条目,mount -a 测试
fdisk 无法创建大于 2TB 分区MBR 分区表限制改用 GPT(gdisk 或 parted)

实操练习

练习 1:完整 LVM 流程

# 模拟考试任务:在 /dev/sdb 上创建 LVM
# 1. 创建两个 2G 分区
echo -e "n\np\n1\n\n+2G\nn\np\n2\n\n+2G\nw" | sudo fdisk /dev/sdb
sudo partprobe /dev/sdb

# 2. 创建 PV、VG、LV
sudo pvcreate /dev/sdb1 /dev/sdb2
sudo vgcreate vg_exam /dev/sdb1 /dev/sdb2
sudo lvcreate -n lv_exam -L 3G vg_exam

# 3. 创建 xfs 文件系统并挂载
sudo mkfs.xfs /dev/vg_exam/lv_exam
sudo mkdir /mnt/exam
sudo mount /dev/vg_exam/lv_exam /mnt/exam

# 4. 扩展到 5G
sudo lvextend -L 5G /dev/vg_exam/lv_exam
sudo xfs_growfs /mnt/exam

# 验证
lsblk
df -h /mnt/exam

练习 2:fstab 永久挂载

# 任务:确保 /mnt/data 在重启后自动挂载
# 1. 获取 UUID
UUID=$(sudo blkid -s UUID -o value /dev/vg_exam/lv_exam)

# 2. 写入 fstab
echo "UUID=$UUID /mnt/exam xfs defaults 0 2" | sudo tee -a /etc/fstab

# 3. 验证
sudo mount -a
findmnt /mnt/exam

练习 3:Swap 创建与管理

# 任务:创建一个 1G 的 swap 分区
echo -e "n\np\n3\n\n+1G\nt\n3\n82\nw" | sudo fdisk /dev/sdb
sudo partprobe /dev/sdb
sudo mkswap /dev/sdb3
sudo swapon /dev/sdb3
echo "/dev/sdb3 none swap defaults 0 0" | sudo tee -a /etc/fstab
swapon --show

模拟题

题目 1

在系统中添加一块新磁盘 /dev/sdc,创建一个 5G 的 ext4 文件系统,挂载到 /mnt/backup,并配置开机自动挂载。

参考答案sudo fdisk /dev/sdc 创建分区(n → p → 1 → 回车 → +5G → w);sudo partprobe /dev/sdcsudo mkfs.ext4 /dev/sdc1sudo mkdir -p /mnt/backupsudo mount /dev/sdc1 /mnt/backup;取 UUID 写入 fstab:echo "UUID=$(sudo blkid -s UUID -o value /dev/sdc1) /mnt/backup ext4 defaults 0 2" | sudo tee -a /etc/fstab;最后 mount -a 验证无报错。

题目 2

现有卷组 vg_data 包含 /dev/sdb1 和 /dev/sdb2,逻辑卷 lv_data 大小为 10G,挂载在 /mnt/data(xfs 文件系统)。请将 lv_data 扩展到 15G。

参考答案sudo lvextend -L 15G /dev/vg_data/lv_data(VG 需有 ≥5G 空闲空间,用 vgs 检查 Free 列);sudo xfs_growfs /mnt/data(xfs_growfs 用挂载点参数,而 ext4 用设备路径 resize2fs /dev/vg_data/lv_data);最后 df -hT /mnt/data 确认容量变为 15G。

题目 3

创建一个 swap 文件 /swapfile,大小为 2G,配置开机自动启用,并验证 swap 总量已增加。

参考答案sudo dd if=/dev/zero of=/swapfile bs=1M count=2048sudo chmod 600 /swapfile(权限必须 600,否则 mkswap 报 insecure 警告或 swapon 失败);sudo mkswap /swapfilesudo swapon /swapfile;写入 fstab:echo "/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab;验证:swapon --show 确认 /swapfile 已列出,free -h 确认 Swap 总量增加 2G。

题目 4

磁盘 /dev/sdd 是 MBR 分区表,已有扩展分区 /dev/sdd2。现需在扩展分区内创建逻辑分区 /dev/sdd5(2G),格式化为 xfs,挂载到 /opt/archive,并写入 fstab 开机自动挂载。

参考答案:MBR 扩展分区内只能再建逻辑分区,且逻辑分区号从 5 开始。fdisk 进入 /dev/sdd 后:n → 回车(默认逻辑分区)→ 回车(默认起始位置)→ +2G → t → 选 /dev/sdd5 → 83 → w;然后 sudo partprobe /dev/sddsudo mkfs.xfs /dev/sdd5sudo mkdir -p /opt/archivesudo mount /dev/sdd5 /opt/archive,最后用 blkid 取 UUID 写入 fstab 并 mount -a 验证。

题目 5

卷组 vg_data 当前空间不足,需要把 /dev/sdc1(3G)加入卷组后,将逻辑卷 lv_data 扩展 2G,并同步扩展 xfs 文件系统。写出完整命令。

参考答案:三步缺一不可:sudo vgextend vg_data /dev/sdc1 扩展卷组(先 sudo pvcreate /dev/sdc1 若该盘未初始化);sudo lvextend -L +2G /dev/vg_data/lv_data 扩展逻辑卷;sudo xfs_growfs /data 扩展文件系统(xfs 用 xfs_growfs,挂载点参数;ext4 则用 resize2fs /dev/vg_data/lv_data)。最后 df -hT /data 确认容量增长。

题目 6

要求把 /dev/sdb1 格式化为 ext4 并挂载到 /mnt/backup,且开机自动挂载。除了 UUID 方式,还可以用什么字段?写出另一种可行写法。

参考答案:除 UUID 外可用 LABEL(卷标)或设备路径。LABEL 写法:sudo e2label /dev/sdb1 backup 打标签,然后 fstab 写 LABEL=backup /mnt/backup ext4 defaults 0 2。设备路径写法 /dev/sdb1 也能用但不推荐(设备名可能漂移)。考试优先 UUID,LABEL 作为加分写法。

题目 7

系统提示 /dev/vg_data/lv_data 所在磁盘故障,你需要在同一卷组中创建一个 8G 的新逻辑卷 lv_new 挂载到 /opt/new,并配置开机自动挂载。假设卷组有足够空闲空间。

参考答案sudo lvcreate -n lv_new -L 8G vg_data 创建逻辑卷(若空间不足先 vgextend);sudo mkfs.ext4 /dev/vg_data/lv_new 格式化;sudo mkdir -p /opt/newsudo mount /dev/vg_data/lv_new /opt/new;取 UUID 写入 fstab:echo "UUID=$(sudo blkid -s UUID -o value /dev/vg_data/lv_new) /opt/new ext4 defaults 0 2" | sudo tee -a /etc/fstab;最后 mount -a 验证。

题目 8

系统有 /dev/sdf(500G,GPT)。要求创建一个 300G 的逻辑卷 lv_media 挂载到 /media/videos。写出用 parted 完成分区的命令序列。

参考答案sudo parted /dev/sdf mklabel gpt 建 GPT 分区表;sudo parted /dev/sdf mkpart primary 1MiB 300GiB 创建分区(或直接占满:mkpart primary 1MiB 100%);sudo partprobe /dev/sdf;然后 pvcreate /dev/sdf1vgcreate vg_media /dev/sdf1lvcreate -n lv_media -L 300G vg_mediamkfs.xfs /dev/vg_media/lv_media → 挂载并写入 fstab。注意 500G 磁盘必须用 GPT(MBR 上限 2T 且此处单分区 300G 没问题,但 GPT 是 RHEL 默认且更安全)。

题目 9

执行 mount -a 时报错 "UUID=xxxx 不存在",但 blkid 显示该 UUID 确实存在。最可能的原因是什么?如何验证?

参考答案:最可能原因是 fstab 中该行 UUID 后带了不可见字符(如尾部空格、全角冒号),或引号/制表符混用。验证方法:cat -A /etc/fstab 查看隐藏字符(行尾 $ 前不应有多余内容);用 sudo fdisk -llsblk -f 交叉核对;也可执行 findmnt -s 查看内核解析出的挂载配置。修复:删掉多余字符后 mount -a 重试。

题目 10

lv_data(ext4)需要从 20G 缩到 15G。写出完整缩容命令序列,并说明为什么顺序不能颠倒。

参考答案:顺序是 卸载 → 检查 → 缩文件系统 → 缩 LV → 重新挂载:sudo umount /datasudo e2fsck -f /dev/vg_data/lv_data(必须先强制检查,否则 resize2fs 拒绝操作)→ sudo resize2fs /dev/vg_data/lv_data 15G(先缩文件系统,此时 LV 仍是 20G,安全)→ sudo lvreduce -L 15G /dev/vg_data/lv_data(再缩 LV)→ sudo mount /dev/vg_data/lv_data /data。顺序颠倒(先缩 LV)会截断文件系统导致数据损坏。xfs 不支持缩容,这是 ext4 与 xfs 最重要的区别。

题目 11

卷组 vg_app 包含 /dev/sdb1(10G)和 /dev/sdc1(10G),逻辑卷 lv_app 为 15G(xfs)。现在需要将 lv_app 扩展到 25G。VG 空间不足,请写出完整命令序列。

参考答案:首先检查 VG 空间:sudo vgs 确认 Free 列不足 10G;添加新磁盘 /dev/sdd1:sudo pvcreate /dev/sdd1;扩展 VG:sudo vgextend vg_app /dev/sdd1;扩展 LV:sudo lvextend -L 25G /dev/vg_data/lv_app(或 sudo lvextend -L +10G /dev/vg_app/lv_app);扩展文件系统:sudo xfs_growfs /data(xfs_growfs 参数是挂载点而非设备路径);验证:df -hT /data 确认容量变为 25G。

题目 12

创建一个 4G 的 swap 文件 /swapfile2,配置开机自动启用,然后删除系统中原有的 swap 分区 /dev/sdb3(需先从 fstab 中移除对应行)。

参考答案:创建 swap 文件:sudo dd if=/dev/zero of=/swapfile2 bs=1M count=4096sudo chmod 600 /swapfile2sudo mkswap /swapfile2sudo swapon /swapfile2;写入 fstab:echo "/swapfile2 none swap defaults 0 0" | sudo tee -a /etc/fstab。删除旧 swap 分区:sudo swapoff /dev/sdb3sudo sed -i '/\/dev\/sdb3/d' /etc/fstab 移除 fstab 条目;swapon --show 确认 /swapfile2 已启用且 /dev/sdb3 已移除。

题目 13

系统有一块 3TB 的磁盘 /dev/sdb。请说明为什么不能使用 MBR 分区表,并写出使用 parted 创建一个 1.5TB 分区的命令。

参考答案:MBR 分区表限制:① 最多 4 个主分区;② 单个分区最大 2TB。3TB 磁盘超过 MBR 的 2TB 上限,必须使用 GPT。parted 命令:sudo parted /dev/sdb mklabel gpt 创建 GPT 分区表;sudo parted /dev/sdb mkpart primary 1MiB 1500GiB 创建 1.5TB 分区;sudo partprobe /dev/sdbsudo parted /dev/sdb print 验证。MBR 与 GPT 的核心区别:MBR 使用 32 位 LBA 寻址(最大 2TB),GPT 使用 64 位 LBA(最大 9.4ZB),且 GPT 支持 128+ 分区和 CRC32 校验。

题目 14

现有逻辑卷 lv_data(ext4)挂载在 /data,需要将其从 10G 扩展到 18G,同时保证数据不丢失。请写出完整的扩展步骤,并说明 ext4 与 xfs 在扩展操作上的区别。

参考答案:扩展步骤(ext4):sudo vgs 检查 VG 空间 ≥8G;sudo lvextend -L 18G /dev/vg_data/lv_datasudo resize2fs /dev/vg_data/lv_data(ext4 的 resize2fs 用设备路径参数)。区别:xfs 使用 xfs_growfs /data(挂载点参数),ext4 使用 resize2fs /dev/vg_data/lv_data(设备路径参数);xfs 只能在线扩展不能缩容,ext4 支持离线缩容;两者都支持在线扩展(无需卸载)。验证:df -hT /data 确认容量 18G。

题目 15

系统启动时进入 emergency mode,提示 /etc/fstab 第 3 行错误。请写出完整的排查与修复流程。

参考答案:① mount -o remount,rw / 将根文件系统重新挂载为读写;② cat -n /etc/fstab | head -5 查看第 3 行内容;③ blkid 核对第 3 行对应的 UUID 是否正确;④ vi /etc/fstab 修正错误(UUID 拼写错误最常见);⑤ mount -a 验证无报错;⑥ systemctl default 继续正常启动。emergency mode 的常见原因:UUID 拼写错误、文件系统类型写错、挂载点目录不存在、设备未就绪。关键:在 emergency mode 下先 remount,rw 才能编辑 fstab,否则会报 read-only file system。

完整配置案例 1:LVM 扩容与缩容全流程

任务背景:生产环境中 vg_data 卷组包含 lv_data(ext4,当前 10G,挂载在 /data)和 lv_logs(xfs,当前 5G,挂载在 /logs)。需要完成以下操作:将 lv_data 扩容到 15G,将 lv_logs 扩容到 8G,然后将 lv_data 缩容回 12G。

步骤 1:检查当前状态

sudo vgs
# VG      #PV #LV #SN Attr   VSize   VFree
# vg_data   2   2   0 wz--n- 20.00g 5.00g

sudo lvs
# LV      VG      Attr       LSize   Pool Origin Data%  Meta%
# lv_data vg_data -wi-ao---- 10.00g
# lv_logs vg_data -wi-ao----  5.00g

df -hT /data /logs

步骤 2:扩展 lv_data(10G → 15G)

# VG 有 5G 空闲,刚好够用
sudo lvextend -L 15G /dev/vg_data/lv_data
# Logical volume lv_data successfully resized.

# ext4 用 resize2fs(设备路径参数)
sudo resize2fs /dev/vg_data/lv_data
# resize2fs 1.46.5 (12-Dec-2021):
# The filesystem on /dev/mapper/vg_data-lv_data is now 3932160 (4k) blocks long.

df -hT /data
# /dev/mapper/vg_data-lv_data ext4   15G  1.2G   13G   9% /data

步骤 3:扩展 lv_logs(5G → 8G)

# VG 已无空闲空间,需要先扩展 VG
sudo pvcreate /dev/sdd1
# Physical volume "/dev/sdd1" successfully created.
sudo vgextend vg_data /dev/sdd1
# Volume group "vg_data" successfully extended

sudo lvextend -L 8G /dev/vg_data/lv_logs
# Logical volume lv_logs successfully resized.

# xfs 用 xfs_growfs(挂载点参数)
sudo xfs_growfs /logs
# meta-data=/dev/mapper/vg_data-lv_logs isize=512 agcount=4, ...
# data     blocks=1310720, imaxpct=25
# namespace /dev/mapper/vg_data-lv_logs =  ...

df -hT /logs
# /dev/mapper/vg_data-lv_logs xfs    8G  128M  7.9G   2% /logs

步骤 4:缩容 lv_data(15G → 12G)

# 缩容必须离线操作
sudo umount /data

# 强制检查文件系统完整性
sudo e2fsck -f /dev/vg_data/lv_data
# e2fsck 1.46.5 (12-Dec-2021)
# Pass 1: Checking inodes, blocks, and sizes
# Pass 2: Checking directory structure
# Pass 3: Checking directory connectivity
# Pass 4: Checking reference counts
# Pass 5: Checking group summary information
# /dev/mapper/vg_data-lv_data: 12/655360 files (0.1% non-contiguous), 589824/1572864 blocks

# 先缩文件系统到 12G
sudo resize2fs /dev/vg_data/lv_data 12G
# resize2fs 1.46.5 (12-Dec-2021):
# Resizing the filesystem on /dev/mapper/vg_data-lv_data to 3145728 (4k) blocks.
# The filesystem on /dev/mapper/vg_data-lv_data is now 3145728 (4k) blocks long.

# 再缩逻辑卷
sudo lvreduce -L 12G /dev/vg_data/lv_data
# WARNING: Reducing active logical volume to 12.00 GiB.
# THIS MAY DESTROY YOUR DATA (filesystem etc.)
# Do you really want to reduce lv_data? [y/n]: y
# Logical volume lv_data successfully resized.

# 重新挂载
sudo mount /dev/vg_data/lv_data /data
df -hT /data
# /dev/mapper/vg_data-lv_data ext4   12G  1.1G   10G  10% /data

步骤 5:最终验证

sudo lvs
# LV      VG      Attr       LSize   Pool Origin Data%  Meta%
# lv_data vg_data -wi-ao---- 12.00g
# lv_logs vg_data -wi-ao----  8.00g

# 重启验证
sudo reboot
# 重启后检查
df -hT /data /logs
swapon --show
缩容风险提示:缩容操作有数据丢失风险,务必在操作前备份重要数据。顺序必须是:卸载 → e2fsck → resize2fs → lvreduce → 挂载。xfs 不支持缩容,如需缩容必须先备份数据、重新格式化为 ext4、再恢复数据。

完整配置案例 2:从裸盘创建双分区 + LVM + Swap

任务背景:新加入一块 25G 磁盘 /dev/sdf,要求创建一个 12G 的 LVM 逻辑卷(xfs)挂载到 /app,再用剩余 13G 空间创建 swap 分区,全部配置开机自动挂载。

步骤 1:分区(fdisk)

# 交互式:创建两个分区
sudo fdisk /dev/sdf
# n → p → 1 → 回车 → +12G
# n → p → 2 → 回车 → 回车(占满剩余)
# w

sudo partprobe /dev/sdf
lsblk /dev/sdf
# NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sdf      8:80   0  25G  0 disk
# ├─sdf1   8:81   0  12G  0 part
# └─sdf2   8:82   0  13G  0 part

步骤 2:创建 LVM(PV → VG → LV)

sudo pvcreate /dev/sdf1
# Physical volume "/dev/sdf1" successfully created.

sudo vgcreate vg_app /dev/sdf1
# Volume group "vg_app" successfully created

sudo lvcreate -n lv_app -L 12G vg_app
# Logical volume "lv_app" created.

sudo pvs
# PV         VG     PSize  PFree
# /dev/sdf1  vg_app 12.00g    0

步骤 3:格式化并挂载

sudo mkfs.xfs /dev/vg_app/lv_app
# meta-data=/dev/mapper/vg_app-lv_app isize=512 ...
sudo mkdir -p /app
sudo mount /dev/vg_app/lv_app /app
df -hT /app
# /dev/mapper/vg_app-lv_app xfs   12G  127M   12G   1% /app

步骤 4:创建 swap

sudo mkswap /dev/sdf2
# Setting up swapspace version 1, size = 13 GiB ...
sudo swapon /dev/sdf2
swapon --show
# NAME      TYPE       SIZE USED PRIO
# /dev/sdf2 partition  13G   0B   -2

步骤 5:写入 fstab 并验证

# 获取 LV 的 UUID
UUID_APP=$(sudo blkid -s UUID -o value /dev/vg_app/lv_app)

# 写入 fstab
echo "UUID=$UUID_APP /app xfs defaults 0 2" | sudo tee -a /etc/fstab
echo "/dev/sdf2 none swap defaults 0 0" | sudo tee -a /etc/fstab

# 测试挂载
sudo mount -a
findmnt /app
# TARGET SOURCE                  FSTYPE OPTIONS
# /app    /dev/mapper/vg_app-lv_app xfs    rw,relatime

# 重启验证
sudo reboot
df -hT /app && swapon --show
考试技巧:遇到"从裸盘到挂载"的综合题,先分区、再 LVM、再格式化、再挂载、最后 fstab。每完成一步立即验证(lsblk、df、vgs),不要等全部做完再检查。

最佳实践

  • 始终使用 UUID 而非设备名配置 /etc/fstab,避免设备名变化导致挂载失败
  • LVM 扩展时务必记住两步:先 lvextend 扩展逻辑卷,再 resize2fs/xfs_growfs 扩展文件系统
  • 考试中遇到"分配磁盘空间"类题目,优先考虑 LVM 方案,灵活性更高
  • 配置完 fstab 后一定要运行 mount -a 测试,不要等重启才发现错误
  • 备份重要操作前的磁盘状态(如 fdisk -l 输出),方便回溯

验证 checklist

# 考试交卷前检查
lsblk -f                # 确认所有分区和文件系统
df -hT                  # 确认挂载点和文件系统类型
sudo vgs && sudo lvs    # 确认 LVM 状态
cat /etc/fstab          # 确认永久挂载配置
swapon --show           # 确认 swap 已启用
mount -a                # 测试 fstab 无错误

学习检查点

学完本章后,请检验自己是否掌握以下内容:

检查项自测问题验证方法
概念理解能用自己的话解释 LVM 的 PV、VG、LV 层次关系和扩容原理尝试向他人讲解
命令操作能不查文档完成磁盘分区、LVM 创建和文件系统挂载在终端实际执行
原理掌握能说出 /etc/fstab 的配置项含义和 mount -a 验证原理画出流程图
故障排查能独立排查 fstab 配置错误导致系统无法启动的问题模拟故障并修复
最佳实践能说明为什么推荐使用 UUID 而非设备名配置 fstab对比不同方案

本章总结

考试机只有一次机会,分区、挂载或 LVM 配置错误会直接导致重启失败,因此每一步操作都必须可逆、可验证。LVM 是本章考点核心,务必完整掌握 PV → VG → LV 的创建与扩展流程;配置 /etc/fstab 时优先使用 UUID 引用而非设备名,并坚持用 mount -a 验证后再交卷。

延伸阅读

补充知识点

parted 常用命令速查

# parted 交互模式
sudo parted /dev/sdc

# 常用命令
# print        - 显示分区表
# mklabel gpt  - 创建 GPT 分区表
# mkpart primary 1MiB 5GiB  - 创建分区
# rm 1         - 删除分区号为 1 的分区
# resizepart 1 10GiB  - 扩展分区
# quit         - 退出

LVM 快照(了解即可)

LVM 快照可以在不中断服务的情况下创建逻辑卷的时间点副本,常用于备份和测试。考试中不常考,但了解原理有助于理解 LVM 的强大能力。

# 创建 LVM 快照
sudo lvcreate -s -n snap_lv -L 2G /dev/vg_data/lv_data

# 查看快照
sudo lvs

# 恢复快照
sudo lvconvert --merge /dev/vg_data/snap_lv
↑ 回到顶部