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 实现永久挂载,确保系统重启后挂载依然生效
前置知识
- 1.8:软件包管理 软件包管理——RHEL 系 dnf 安装工具
- 2.11:SSH 深入 SSH 深入——SSH 远程操作考试机
考试要点
| 知识点 | 重要程度 | 考试频率 | 说明 |
|---|---|---|---|
| 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 不支持,这是两者最重要的区别。
| 特性 | ext4 | xfs |
|---|---|---|
| RHEL 默认 | RHEL 6 及之前 | RHEL 7/8/9 默认 |
| 最大卷大小 | 1 EB | 8 EB |
| 最大文件大小 | 16 TB | 8 EB |
| 缩容支持 | 支持(需离线) | 不支持 |
| 扩展支持 | 支持(在线) | 支持(在线) |
| 元数据备份 | 支持(tune2fs -l) | 不支持(设计哲学不同) |
| 典型工具 | resize2fs、e2fsck、tune2fs | xfs_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
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 device | VG 空间不足 | 用 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/sdc;sudo mkfs.ext4 /dev/sdc1;sudo mkdir -p /mnt/backup;sudo 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=2048;sudo chmod 600 /swapfile(权限必须 600,否则 mkswap 报 insecure 警告或 swapon 失败);sudo mkswap /swapfile;sudo 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/sdd、sudo mkfs.xfs /dev/sdd5、sudo mkdir -p /opt/archive、sudo 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/new;sudo 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/sdf1 → vgcreate vg_media /dev/sdf1 → lvcreate -n lv_media -L 300G vg_media → mkfs.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 -l 或 lsblk -f 交叉核对;也可执行 findmnt -s 查看内核解析出的挂载配置。修复:删掉多余字符后 mount -a 重试。
题目 10
lv_data(ext4)需要从 20G 缩到 15G。写出完整缩容命令序列,并说明为什么顺序不能颠倒。
参考答案:顺序是 卸载 → 检查 → 缩文件系统 → 缩 LV → 重新挂载:sudo umount /data → sudo 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=4096;sudo chmod 600 /swapfile2;sudo mkswap /swapfile2;sudo swapon /swapfile2;写入 fstab:echo "/swapfile2 none swap defaults 0 0" | sudo tee -a /etc/fstab。删除旧 swap 分区:sudo swapoff /dev/sdb3;sudo 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/sdb;sudo 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_data;sudo 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
完整配置案例 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
最佳实践
- 始终使用 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 验证后再交卷。
延伸阅读
- 5.4:RAID 与存储方案 RAID 与存储方案
补充知识点
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
↑ 回到顶部