把课件里的 4 个任务案例 和 3 道习题抽出来,逐条给出可执行的完整答案:每一步为什么要做(作用)、每一条命令每个参数是什么含义(含义)、以及看到什么算成功(验收)。设备名沿用课件假设(/dev/nvme0n2~/dev/nvme0n6),环境为 RHEL 9.3 + xfs。本页含答案,建议先自己做一遍再看。
| # | 案例(课件任务) | 对应课件页 | 核心命令链 | 最终交付 |
|---|---|---|---|---|
| 1 | 新增一块 NVMe 硬盘,分区→格式化→挂载→开机自动挂载 | 第 5–15 页 任务1 | lsblk → fdisk → mkfs.xfs → mount → fstab | 重启后 /media/nvme1 自动可用 |
| 2 | 在 1G 的 xfs 分区上给用户 gdqg_wangluo 做磁盘配额 | 第 16–26 页 任务2 | uquota → xfs_quota limit/timer → dd 验证 | 写 200M 被拦、文件数到 1500 被拦 |
| 3 | 用 4 块 20G 盘做软 RAID5,并完成故障热替换 | 第 27–40 页 任务3 | fdisk(fd) → mdadm -C → mkfs → mount → fail/add | 60G 可用空间;坏一块仍可读写 |
| 4 | 建 PV/VG/LV 并在线把 3G 逻辑卷扩到 6G | 第 41–44 页 任务4 | pvcreate → vgcreate → lvcreate → lvextend → xfs_growfs | df 显示 6G 且数据不丢 |
「前期建立操作系统时划分的磁盘空间太小,存储空间不能满足后续发展,这时需要为 Linux 主机增加一块硬盘,并对硬盘进行分区、格式化和挂载,从而增大机器的磁盘容量。」思考题是:怎样给 Linux 系统增加一块 NVMe 硬盘?
/dev/nvme0n2(20G,未分区);挂载点 /media/nvme1(课件第 15 页给的例子);文件系统 xfs(RHEL 9 默认)。| 步 | 命令 | 这一环节的作用(为什么必须做) | 看到什么算成功 |
|---|---|---|---|
| 1 | lsblk | 认盘。先确认新盘的设备名和容量——把系统盘当成新盘格式化,是整个项目最贵的错误。 | 出现 20G 的 nvme0n2,TYPE=disk、MOUNTPOINT 为空 |
| 2 | fdisk /dev/nvme0n2 | 写分区表。把整块盘划成若干段,并在地图上登记「这段归谁」。此时数据一个字节都没动。 | 按 w 后提示分区表已修改 |
| 3 | partprobe /dev/nvme0n2 | 让内核重读分区表。否则可能出现「分区建了但 /dev/nvme0n2p1 不存在」的假象。 | 无输出即成功;再 lsblk 能看到 p1 |
| 4 | mkfs.xfs /dev/nvme0n2p1 | 建文件系统。分区只是空地,格式化才写进超级块、位图、inode 表,此后才「能存文件」。 | 输出 meta-data=... isize=512 agcount=4 |
| 5 | mkdir -p /media/nvme1 | 准备挂载点。挂载点必须是已存在的目录,否则 mount 直接报错。 | 目录存在且为空(非空目录会被「遮住」) |
| 6 | mount /dev/nvme0n2p1 /media/nvme1 | 接入目录树。只有挂载后,才能用路径访问这块盘。 | findmnt 能看到该挂载 |
| 7 | df -hT | 验证容量与类型。确认真的挂上了、类型是 xfs、空间是 20G 量级。 | 多出一行 /dev/nvme0n2p1 xfs ... /media/nvme1 |
| 8 | blkid /dev/nvme0n2p1 | 取 UUID。写 fstab 用它,设备名会因插拔顺序变化,UUID 不会。 | 输出 UUID="..." TYPE="xfs" |
| 9 | vim /etc/fstab | 登记开机自动挂载。不写 fstab,重启后挂载就没了(mount 只改内存里的映射)。 | 新行六列齐全,用 UUID 而不是设备名 |
| 10 | mount -a | 验证 fstab 语法。它只挂未挂载的项,等于「按 fstab 演一遍开机」。 | 无任何报错(报错就必须改,否则重启进救援模式) |
| 11 | umount /media/nvme1 | 卸载演示。要拔盘、要改分区前必须先卸载,否则数据可能损坏。 | df 里该行消失 |
# ① 认盘:确认新盘是 nvme0n2、20G、没有分区
lsblk
# ② 分区:n 新建 → p 主分区 → 1 分区号 → 回车(默认起始扇区)→ +20G → p 复查 → w 写盘
fdisk /dev/nvme0n2
# ③ 让内核重读分区表(lsblk 看不到 p1 时才需要)
partprobe /dev/nvme0n2
# ④ 格式化:在分区上建立 xfs 文件系统
mkfs.xfs /dev/nvme0n2p1
# ⑤ 建挂载点:必须是已存在的空目录
mkdir -p /media/nvme1
# ⑥ 挂载:把文件系统接到目录树上
mount /dev/nvme0n2p1 /media/nvme1
# ⑦ 验证:能看到 xfs 和约 20G 就成功
df -hT | grep nvme1
# ⑧ 取 UUID(写 fstab 用,比 /dev/nvme0n2p1 稳)
blkid /dev/nvme0n2p1
# ⑨ 登记开机自动挂载:在 fstab 末尾追加一行(六列)
vim /etc/fstab
# UUID=7c8d9e0f-1234-5678-9abc-def012345678 /media/nvme1 xfs defaults 0 0
# ⑩ 只验证 fstab 写得对不对(不改动已挂载项)
mount -a
# ⑪ 确认挂载点已生效,再演示卸载
findmnt /media/nvme1
umount /media/nvme1作用:读内核的设备树,以树形列出所有块设备及「盘 → 分区 → LVM/RAID」的从属关系。不需要挂载,也不需要文件系统,所以它是「认盘」的第一条命令。
lsblk 默认:NAME/SIZE/TYPE/MOUNTPOINT-f 加 FSTYPE/UUID/LABEL(看有没有格式化)-d 只看整盘,忽略分区-p 显示完整路径 /dev/nvme0n2p1-o NAME,SIZE,TYPE,MOUNTPOINT 自定义列disk 整盘 / part 分区 / lvm 逻辑卷 / raid5 阵列作用:读写磁盘的分区表(MBR/GPT)。它只改「地图」——第 0 扇区的分区表项,不搬运、不清除任何数据。所以删错分区后数据往往还能救回来。
fdisk -l 列出所有盘的分区表fdisk -l /dev/nvme0n2 只看某块盘fdisk /dev/nvme0n2 进入交互模式-u 与 -l 搭配,按扇区显示n 新建分区 → p 主分区 → 分区号 → 起始扇区 → +20G 结束d 删除分区;t 改分区类型(fd=RAID、8e=LVM、82=swap)p 打印分区表;l 列出所有类型编号w 写盘生效;q 退出不保存m 帮助;a 引导标记;v 校验作用:在分区上建立文件系统——写超级块、空闲块位图、inode 表、根目录。课件给的语法是 mkfs [-V] [-t fstype] [fs-options] filesys [blocks],其中 -t 不指定时默认 ext2,所以实战一律写成 mkfs.xfs / mkfs.ext4 更保险。
-f 强制格式化(分区上已有文件系统时必须加)-L data 设卷标,方便 LABEL=data 挂载-b size=4096 块大小,默认 4K-t xfs 指定类型(等价于直接用 mkfs.xfs)-c 格式化前检查坏道(课件参数)meta-data=/dev/nvme0n2p1 目标设备isize=512 每个 inode 占 512 字节agcount=4 分配组数量(xfs 把空间分成的「区块组」)bsize=4096 块大小;fdblocks 空闲块数作用:mount 把某个文件系统「接」到目录树的某个目录上(挂载点);umount 反向摘除。注意:mount 不写盘,只改内核内存里的挂载表,所以重启就失效——这正是必须写 fstab 的原因。课件特别提示:系统预留了 /mnt 和 /media 两个专用挂载点。
mount [-t type] [-o options] device dir-t xfs 指定类型,一般可省略(自动识别)-o ro 只读挂载;-o rw 读写-o noexec 禁止执行该分区上的程序(安全加固)-o remount 重新挂载改选项,如 mount -o remount,rw /-a 按 /etc/fstab 挂载所有未挂载项umount /media/nvme1 用目录卸载,也可用设备名target is busy:lsof +D /media/nvme1 找占用进程findmnt /media/nvme1 查这个目录挂的是谁umount 后原文件才重现作用:开机时系统按这个文件逐行挂载。写错不会立刻报错,而是下次开机进不去系统,所以改完必须 mount -a 验一遍。课件给的格式是 <file system> <dir> <type> <options> <dump> <pass>。
UUID=...;写 /dev/nvme0n2p1 换盘后可能指错xfs / ext4 / swapdefaults,可加 uquota noexec nofailemergency modemount -o remount,rw / 让根可写vim /etc/fstab 注释掉错行,rebootnofail:盘不在也能开机作用:df 看已挂载文件系统的容量与使用率(课件参数:-a/-m/-k/-h/-T/-i);blkid 取分区的 UUID 与类型,是写 fstab 的数据来源。
-h 人类可读(G/M)-T 多显示文件系统类型-i 看 inode 用量(文件数够不够)-a 连 /proc、/sysfs 一起显示blkid /dev/nvme0n2p1 看 UUID/LABEL/TYPEblkid -s UUID -o value /dev/nvme0n2p1 只输出 UUID,方便复制lsblk 确认设备名(NVMe 盘命名为 /dev/nvme0n1,分区是 nvme0n1p1,注意比 SATA 盘多一个 p);② fdisk 分区;③ mkfs.xfs 格式化;④ 建挂载点并 mount;⑤ 用 UUID 写 /etc/fstab,mount -a 验证。另外,课件第 5 页思考题 1「安装时被规划为哪几个分区」的答案:UEFI 机器通常是 /boot/efi(512M)、/boot(1G)、/(xfs 根)、swap;用 lsblk -f + df -hT 就能验证自己机器上的实际划分。「添加一块磁盘 /dev/nvme0n3,在空闲空间创建 1G 新分区,格式化为 xfs,系统引导时自动挂载到 /gdqg/xfs/;添加用户 gdqg_wangluo,软限制 100MB、硬限制 150MB。」
block 限制容量、inode 限制文件个数。课件测试里两条都做了:容量 100/150M,文件数软 1000、硬 1500。
soft 越过后只警告并进宽限期;hard 越过直接拒绝写入。课件写「允许额外 50% 的硬限制」,指的就是 150M = 100M × 1.5。
块 15 天、inode 30 天:宽限期内可以继续写到硬限;到期还没降回软限以下,软限就「变成硬限」。
| 步 | 命令 | 这一环节的作用 | 看到什么算成功 |
|---|---|---|---|
| 1 | fdisk /dev/nvme0n3 | 划出 1G 分区(n→p→1→+1G→w) | 出现 nvme0n3p1 |
| 2 | mkfs.xfs /dev/nvme0n3p1 | 建 xfs 文件系统(xfs 天生支持配额,不用额外建配额文件) | 输出 meta-data=... |
| 3 | mkdir -p /gdqg/xfs | 建挂载点 | 目录存在 |
| 4 | fstab 加 uquota,gquota | 关键一步:配额是「挂载选项」,不挂 uquota,后面所有 xfs_quota 设置都不会生效 | mount \| grep gdqg 能看到 usrquota,grpquota |
| 5 | mount -a | 让 fstab 生效(或 mount -o remount /gdqg/xfs) | df 里出现 /gdqg/xfs |
| 6 | chmod 777 /gdqg/xfs | 让测试用户能写——否则测到的是「权限不足」而不是「配额超限」 | 普通用户能创建文件 |
| 7 | rpm -qa \| grep + dnf install | 确认 xfsprogs / quota 已装,缺则安装 | 两台包都在 |
| 8 | useradd gdqg_wangluo + passwd | 建被限额的测试用户并设密码 | id gdqg_wangluo 能查到 |
| 9 | xfs_quota -x -c 'limit ...' | 设配额值:容量软 100m / 硬 150m,文件数软 1000 / 硬 1500 | 无报错;report 里能看到该用户 |
| 10 | xfs_quota -x -c 'timer ...' | 设宽限期:块 15 天、inode 30 天 | report -h 的 Grace 列出现时间 |
| 11 | xfs_quota -x -c 'report -h' | 看当前用量与限额,确认设置正确 | Used/Soft/Hard 三列符合预期 |
| 12 | su - gdqg_wangluo + dd | 验证容量:写 100M 成功、写 200M 报 Disk quota exceeded | 第二个 dd 中途失败 |
| 13 | touch file{1..1500} | 验证文件数:到硬限 1500 时报错 | 约第 1500 个文件失败 |
# ① 1G 分区:n → p → 1 → 回车 → +1G → w
fdisk /dev/nvme0n3
mkfs.xfs /dev/nvme0n3p1
# ② 挂载点 + fstab(关键是 uquota,gquota 两个挂载选项)
mkdir -p /gdqg/xfs
blkid /dev/nvme0n3p1
vim /etc/fstab
# UUID=xxxx /gdqg/xfs xfs defaults,uquota,gquota 0 0
mount -a
mount | grep gdqg # 必须看到 usrquota,grpquota,否则后面全白做
# ③ 目录放权(只影响权限,不影响配额)
chmod 777 /gdqg/xfs
# ④ 依赖检查与安装
rpm -qa | grep -E 'xfsprogs|^quota'
dnf install -y xfsprogs quota
# ⑤ 建测试用户
useradd gdqg_wangluo
passwd gdqg_wangluo
# ⑥ 设配额:b=block(容量) i=inode(文件数) soft/hard
xfs_quota -x -c 'limit -u bsoft=100m bhard=150m isoft=1000 ihard=1500 gdqg_wangluo' /gdqg/xfs
# ⑦ 设宽限期:块 15 天、inode 30 天
xfs_quota -x -c 'timer -u -b 15d -i 30d gdqg_wangluo' /gdqg/xfs
# ⑧ 查看报表(-h 人类可读)
xfs_quota -x -c 'report -h' /gdqg/xfs
# ⑨ 验证容量:100M 能写,200M 被拦
su - gdqg_wangluo
cd /gdqg/xfs
dd if=/dev/zero of=test100 bs=1M count=100 # 成功
dd if=/dev/zero of=test200 bs=1M count=200 # 失败:Disk quota exceeded
# ⑩ 验证文件数:连续建空文件
for i in $(seq 1 1500); do touch file$i; done # 到 1500 附近报错
rm -f /gdqg/xfs/test100 /gdqg/xfs/file* # 清空后配额随之释放isoft=1000 只是警告线,ihard=1500 才是拦截线;宽限期内系统允许你越过软限继续写到硬限。目录里原本还有一个 file.data,所以第 1500 个文件(file1499)时 inode 计数到 1500,立刻失败。这道题的考点正是「软限 ≠ 硬限」。作用:xfs 专用的配额管理工具,用来设限、设宽限期、出报表。课件原话:「xfs 文件系统是 RHEL 默认文件系统,无需创建配额文件,xfs 自带支持。」
-x 专家模式,不加它只能用 quota/df 这类查询,改不了限额-c '命令' 执行一条子命令后退出,可重复多个 -c/gdqg/xfs),不是设备名limit -u bsoft= bhard= isoft= ihard= 用户 设用户配额limit -g ... 设用户组配额timer -u -b 15d -i 30d 用户 设宽限期report -h -u 按用户出报表;-g 按组quota -u 用户 只看某人state 看配额功能是否已开启b = block = 容量额度,单位可写 k/m/g。课件算术:软 100M,硬 150M,即「允许额外 50% 的硬限制」。
i = inode = 文件个数额度。注意 inode 与容量是两套独立的账:文件很小也会先把 inode 用光。
-b 15d 块宽限 15 天,-i 30d 文件数宽限 30 天。宽限期结束仍未降到软限以下,软限变硬限。
作用:按块复制数据。课件原话:「dd 用于读取、转换并输出数据;/dev/zero 用来创建一个指定长度的空文件。」这里用它精确地写出「100M / 200M」来撞配额。
if= 输入源,/dev/zero = 无限个 0 字节of= 输出目标文件bs=1M 每次读写 1MBcount=100 写 100 次 → 合计 100MBstatus=progress 显示进度(大文件加)write failed: Disk quota exceededls -lh 只剩 150M 左右df 与 report 立即回落/var、/home 单独分区或单独 LV,写满不拖死根;② 开配额限制用户/组;③ 配 logrotate 轮转日志;④ 用 du -sh /* 定期定位大户、df -i 查 inode;⑤ 接监控告警。「共享服务器怎么设限额?」挂载加 uquota,gquota,按用户设 block/inode 软硬限 + 宽限期;多人共享同一项目的用组配额更省事;目录配 SGID(chmod 2775)保证新建文件同属一个组。课件把案例拆成七步:① 为 4 块盘各建 20G 分区(类型 fd)→ ② mdadm 创建 RAID5 → ③ 格式化为 xfs → ④ 查看 RAID5 详情 → ⑤ 挂载 /media/gdqg/data 并写 500MB 验证 → ⑥ 保存配置到 /etc/mdadm.conf → ⑦ 硬盘故障与热替换。
数据 + 分布式校验,允许坏 1 块;4 块 20G 的可用容量 = (4−1)×20G ≈ 60G,代价是一块盘的容量做校验。
分区类型标 fd(Linux raid autodetect)不是硬性要求,但能让系统和后续运维一眼看出「这块分区是给 RAID 的」,也便于自动装配。
不写 /etc/mdadm.conf,重启后阵列名可能变成 /dev/md127,挂载点就全对不上了。
| 步 | 命令 | 这一环节的作用 | 看到什么算成功 |
|---|---|---|---|
| 1 | fdisk /dev/nvme0n2 … 共 4 块 | 每块盘划 20G 分区,t 改类型为 fd;若盘上有旧分区先 d 删掉 | 4 个 ...p1,lsblk 各 20G |
| 2 | mdadm --create /dev/md0 --level=5 --raid-devices=4 ... | 把 4 个分区组成一个 RAID5 设备,从此 /dev/md0 就是一个「块设备」 | 提示 array /dev/md0 started |
| 3 | cat /proc/mdstat | 看阵列是否在同步(initial resync),这期间别急着压测 | [UUUU] 或 resync=xx% |
| 4 | mkfs.xfs /dev/md0 | 在阵列上建文件系统(RAID 只是块设备,不建文件系统还是用不了) | 输出 meta-data=/dev/md0 |
| 5 | mkdir -p /media/gdqg/data + mount | 挂载到目录树,才能按路径访问 | df -h 显示约 60G |
| 6 | dd if=/dev/zero of=... bs=1M count=500 | 验证可写,同时让数据真实落盘(后续拔盘测试更有说服力) | 生成 500M 文件,ls -lh 可见 |
| 7 | mdadm --detail /dev/md0 | 看级别、成员盘、状态、校验算法等完整信息 | State : clean;Raid Devices : 4 |
| 8 | mdadm --detail --scan --verbose >> /etc/mdadm.conf | 保存阵列配置,保证重启后仍叫 /dev/md0 | 文件里出现 ARRAY /dev/md0 ... |
| 9 | mdadm --manage /dev/md0 --fail ... | 模拟坏盘:把某块成员标记为故障 | /proc/mdstat 变成 [U_UU] |
| 10 | --remove 再 --add | 先摘掉故障盘,再把新盘加进去重建 | 出现 recovery = xx% |
| 11 | mdadm --stop /dev/md0 | 收尾:停止阵列(停之前必须先 umount) | /proc/mdstat 中消失 |
# ① 4 块盘各建 20G 分区,类型 fd(以 nvme0n2 为例,其余同理)
fdisk /dev/nvme0n2
# d(若有旧分区先删)→ n → p → 1 → 回车 → +20G → t → fd → p 复查 → w
fdisk /dev/nvme0n3
fdisk /dev/nvme0n4
fdisk /dev/nvme0n5
lsblk # 确认 4 个 20G 的 p1
# ② 创建 RAID5:4 个成员,设备名 /dev/md0
mdadm --create /dev/md0 --level=5 --raid-devices=4 \
/dev/nvme0n2p1 /dev/nvme0n3p1 /dev/nvme0n4p1 /dev/nvme0n5p1
# ③ 看同步进度(首次创建要 initial resync)
cat /proc/mdstat
# ④ 在阵列上建 xfs
mkfs.xfs /dev/md0
# ⑤ 挂载并写入 500MB 验证
mkdir -p /media/gdqg/data
mount /dev/md0 /media/gdqg/data
dd if=/dev/zero of=/media/gdqg/data/testfile bs=1M count=500
ls -lh /media/gdqg/data/testfile
df -h /media/gdqg/data # 约 60G 可用 =(4-1)×20G
# ⑥ 查看详情
mdadm --detail /dev/md0
# ⑦ 保存配置(否则重启可能变 md127)
echo 'DEVICE partitions' > /etc/mdadm.conf
mdadm --detail --scan --verbose >> /etc/mdadm.conf
cat /etc/mdadm.conf
# ⑧ 故障演练:标记 → 摘除 → 换新盘
mdadm --manage /dev/md0 --fail /dev/nvme0n3p1
cat /proc/mdstat # [U_UU]:少了一块
mdadm --manage /dev/md0 --remove /dev/nvme0n3p1
mdadm --manage /dev/md0 --add /dev/nvme0n6p1
cat /proc/mdstat # [UUUU] + recovery=xx.x%
# ⑨ 收尾(停止前先卸载)
umount /media/gdqg/data
mdadm --stop /dev/md0--fail → --remove → --add。先 fail 是告诉阵列「这块盘的数已经不可信」,阵列才会用校验重建;不 fail 直接拔盘,行为取决于内核版本,可能直接降级甚至丢数据。作用:multiple devices admin,Linux 标准的软 RAID 管理工具,负责创建、查看、管理、监控阵列(课件第 34 页原文)。软 RAID 的校验计算由 CPU 完成,所以性能不如硬 RAID 卡,但便宜、可移植。
--create /dev/md0(-C)建阵列--level=5(-l)级别:0/1/5/6/10--raid-devices=4(-n)成员盘数量--spare-devices=1(-x)热备盘数量--chunk=64 条带大小(KB)--detail /dev/md0(-D)看详情--detail --scan --verbose 生成配置行--manage /dev/md0 --fail 设备 标记故障(-f)--remove 设备(-r)摘除--add 设备(-a)加入并自动重建--stop /dev/md0(-S)停止阵列--assemble --scan(-A -s)开机按配置装配--monitor --mail 告警监控作用:内核实时导出的阵列状态。每个方括号代表一块成员盘:U = 正常(Up),_ = 缺失/故障。它是判断「坏了几块、还在不在重建」的第一现场。
[UUUU] 4 块全正常[U_UU] 第 2 块故障,阵列降级但仍可读写[UU__] RAID5 已坏 2 块 → 阵列失效,数据不可访问[U] 单盘 RAID1 降级recovery = 12.5% 正在重建,进度finish=120min speed=8000K/sec 预计耗时与速度mdadm --detail 看更细的成员与校验信息-x 1)自动顶上;③ 写 /etc/mdadm.conf 并确保开机 --assemble --scan;④ 用 mdadm --monitor --mail 或监控系统盯 /proc/mdstat;⑤ RAID 不是备份,误删、勒索病毒照样穿透。课件第 41 页的引子很实在:「/var 分了 50GB,后来不够用,怎么办?加盘、重新分区格式化、迁移数据,很麻烦,而且分大了浪费、分小了又缩不回去。这时就该用 LVM 弹性调整容量。」
最底层。一个完整硬盘或一个分区,用 pvcreate 打上 LVM 标记后,才能被卷组使用。
把多个 PV 汇成一个容量池。池子里的空间可以随时再切,这就是「弹性」的来源。
从池子里切出来的「虚拟分区」,用法和普通分区一样:格式化、挂载。区别是它可以在线变大。
| 步 | 命令 | 这一环节的作用 | 看到什么算成功 |
|---|---|---|---|
| 1 | fdisk /dev/nvme0n6 | 划 5G 分区,t 改为 8e(Linux LVM) | nvme0n6p1,5G,类型 8e |
| 2 | pvcreate /dev/nvme0n6p1 | 把分区变成 PV:写入 LVM 标签与元数据区,此后 LVM 才认它 | Physical volume ... successfully created |
| 3 | vgcreate gdqgvg /dev/nvme0n6p1 | 建卷组,把这个 PV 变成池子 | Volume group "gdqgvg" successfully created |
| 4 | vgdisplay gdqgvg | 看池子总容量与空闲容量(默认 PE 4M) | VG Size ≈ 5G,Free PE 充足 |
| 5 | lvcreate -L 3G -n gdqglv gdqgvg | 切出逻辑卷 3G | Logical volume "gdqglv" created |
| 6 | mkfs.xfs /dev/gdqgvg/gdqglv | 给 LV 建文件系统(LV 本身只是块设备) | 输出 meta-data=... |
| 7 | mkdir -p /media/gdqg/lv + mount | 挂载使用 | df -h 显示 3G |
| 8 | fdisk 再建 p2 2G,8e | 给扩容准备「新砖头」 | 出现 nvme0n6p2 |
| 9 | pvcreate /dev/nvme0n6p2 | 新分区也要先变成 PV | successfully created |
| 10 | vgextend gdqgvg /dev/nvme0n6p2 | 把新 PV 加进池子,池子从 5G 变 7G | vgdisplay 里 VG Size 变大 |
| 11 | lvextend -L 6G /dev/gdqgvg/gdqglv | 把 LV 从 3G 扩到 6G(占用池子的空闲空间) | Logical volume ... successfully resized |
| 12 | xfs_growfs /media/gdqg/lv | 让文件系统跟上——不执行这步,df 还是 3G(最经典的坑) | 输出 data blocks changed from ... to ... |
| 13 | df -h /media/gdqg/lv | 终验:容量真的变成 6G,原数据还在 | Size ≈ 6G,已挂载 |
| 14 | umount → lvremove → vgremove → pvremove | 删除:必须从上到下,否则报「正在使用」 | 逐条 successfully removed |
# ① 5G 分区,类型改成 8e(Linux LVM)
fdisk /dev/nvme0n6
# n → p → 1 → 回车 → +5G → t → 8e → w
# ② 分区 → PV
pvcreate /dev/nvme0n6p1
# ③ 建卷组(池子)
vgcreate gdqgvg /dev/nvme0n6p1
vgdisplay gdqgvg # 看 VG Size / Free PE
# ④ 从池子切 3G 逻辑卷
lvcreate -L 3G -n gdqglv gdqgvg
lvs # 确认 LV 大小与所属 VG
# ⑤ 格式化并挂载
mkfs.xfs /dev/gdqgvg/gdqglv
mkdir -p /media/gdqg/lv
mount /dev/gdqgvg/gdqglv /media/gdqg/lv
df -h /media/gdqg/lv # 约 3G
# ⑥ 扩容第一步:加一块新 PV(2G 分区,类型 8e)
fdisk /dev/nvme0n6 # n → p → 2 → 回车 → +2G → t → 2 → 8e → w
pvcreate /dev/nvme0n6p2
# ⑦ 扩容第二步:把新 PV 加进池子
vgextend gdqgvg /dev/nvme0n6p2
vgdisplay gdqgvg # VG Size 从 5G 变成 7G
# ⑧ 扩容第三步:扩逻辑卷到 6G
lvextend -L 6G /dev/gdqgvg/gdqglv
# 也可以写增量:lvextend -L +3G /dev/gdqgvg/gdqglv
# 或用光剩余空间:lvextend -l +100%FREE /dev/gdqgvg/gdqglv
# ⑨ 扩容第四步:同步文件系统(xfs 只能在挂载状态下扩)
xfs_growfs /media/gdqg/lv
df -h /media/gdqg/lv # 这时才真的变成 6G
# ⑩ 删除:从上到下
umount /media/gdqg/lv
lvremove /dev/gdqgvg/gdqglv
vgremove gdqgvg
pvremove /dev/nvme0n6p1 /dev/nvme0n6p2df 要指向该挂载点)。顺序永远是:加盘 → PV → VG → LV → 文件系统。作用:pvcreate 把分区「登记」为物理卷(在分区起始处写 LVM 标签和元数据区);vgcreate 把若干 PV 合成卷组(池子);lvcreate 从池子里切出逻辑卷。
pvcreate -ff /dev/nvme0n6p2 强制覆盖已有 PV 标记vgcreate -s 4M gdqgvg /dev/... 指定 PE 大小(默认 4M,PE 是分配的最小单位)lvcreate -L 3G 绝对大小lvcreate -l 50%VG 百分比大小-n gdqglv 逻辑卷名pvs / pvdisplay 物理卷vgs / vgdisplay 卷组(看 Free PE)lvs / lvdisplay 逻辑卷lsblk 也能看到 lvm 层级作用:lvextend 只改逻辑卷的边界(块设备变大);xfs_growfs 才是让文件系统知道「地盘变大了」,重建空闲空间索引。两者缺一,df 都不会变。
-L 6G 扩到 6G(绝对目标值)-L +3G 再加 3G(增量)-l +100%FREE 用光池子剩余-r 连文件系统一起扩(RHEL 8+ 支持,最省事)xfs_growfs /media/gdqg/lv(参数是挂载点)resize2fs /dev/gdqgvg/gdqglv(参数是设备)resize2fs 设备 3G 缩xfs_info 确认 agcount 等参数pvcreate → vgextend → lvextend → xfs_growfs(池子有余量时可跳过前两步)。若不是 LVM:只能加新盘挂到子目录(如 /var/log)搬数据,或用 growpart 扩分区后 resize2fs/xfs_growfs,但都做不到在线缩容。参考答案:
参考答案:
| 组件 | 全称 | 是什么 | 关键命令 |
|---|---|---|---|
| PV | Physical Volume 物理卷 | 最底层,一整块盘或一个分区,打过 LVM 标记后才能被池子使用 | pvcreate / pvs / pvremove |
| VG | Volume Group 卷组 | 由 1 个或多个 PV 组成的容量池,是「弹性」的来源 | vgcreate / vgextend / vgremove |
| LV | Logical Volume 逻辑卷 | 从池子里切出的「虚拟分区」,可格式化、可挂载、可在线扩容 | lvcreate / lvextend / lvremove |
删除顺序:从上到下(与创建相反)
umount /挂载点 —— 先卸载,否则「设备忙」lvremove /dev/卷组名/逻辑卷名 —— 删逻辑卷vgremove 卷组名 —— 删卷组pvremove /dev/分区名 —— 删物理卷标记/dev/vg_gdqg/lv_gdqg 从 20G 扩到 30G(XFS,挂 /mnt/gdqg,卷组有余量)参考答案(四条命令,缺一不可):
# ① 先确认池子里确实有空闲空间(有 Free PE 才能直接扩)
vgdisplay vg_gdqg | grep -E 'VG Size|Free PE'
# ② 扩逻辑卷:20G → 30G
lvextend -L 30G /dev/vg_gdqg/lv_gdqg
# 或写增量:lvextend -L +10G /dev/vg_gdqg/lv_gdqg
# ③ 同步 XFS 文件系统(XFS 只能在挂载状态下扩,参数给挂载点)
xfs_growfs /mnt/gdqg
# ④ 验证:Size 变成 30G,原数据仍在
df -hT /mnt/gdqg
lsblk | grep lv_gdqgresize2fs /dev/vg_gdqg/lv_gdqg(参数是设备不是挂载点)。如果卷组没有余量:得先加盘 → pvcreate → vgextend vg_gdqg /dev/新分区,再回到第 ② 步。| 命令 | 一句话作用 | 必知参数 | 案例 |
|---|---|---|---|
lsblk | 看块设备层级(盘/分区/LVM/RAID) | -f 带文件系统;-d 只看整盘 | 1 |
fdisk | 读写分区表(只改地图,不动数据) | -l 列出;交互 n/d/t/w/q | 1 2 3 4 |
partprobe | 让内核重读分区表 | 后跟设备名 | 1 |
mkfs.xfs | 建 xfs 文件系统(写超级块/位图/inode 表) | -f 强制;-L 卷标;-b size= | 1 2 3 4 |
xfs_repair | 检查修复 xfs(替代 fsck) | -n 只查不改;-f 强制;必须先卸载 | 通用 |
mount | 把文件系统接到目录树 | -t 类型;-o ro/defaults;-a 按 fstab | 1 2 3 4 |
umount | 摘除挂载 | 给目录或设备;busy 用 lsof +D | 1 3 4 |
df | 看已挂载文件系统容量 | -h 可读;-T 类型;-i inode | 1 2 3 4 |
du | 看目录里谁在占空间 | -sh 汇总;/* 下钻 | 排错 |
blkid | 取分区的 UUID/LABEL/TYPE | -s UUID -o value | 1 2 |
/etc/fstab | 开机自动挂载配置(六列) | 设备/挂载点/类型/选项/dump/pass | 1 2 |
xfs_quota | xfs 配额:设限/宽限期/报表 | -x 专家模式;-c 子命令;limit/timer/report | 2 |
dd | 按块复制,测试写入与配额 | if= of= bs= count= | 2 3 |
mdadm | 软 RAID 创建/查看/热替换 | -C -l -n;--fail/--remove/--add;-D -s | 3 |
/proc/mdstat | 阵列实时状态(U/_ 与重建进度) | [UUUU] 正常;[U_UU] 降级 | 3 |
pvcreate | 分区 → 物理卷 | -ff 强制覆盖 | 4 |
vgcreate / vgextend | 建卷组 / 把新 PV 加进池子 | -s PE 大小 | 4 |
lvcreate / lvextend | 切逻辑卷 / 扩逻辑卷 | -L 绝对值 -l 百分比 -n 名称 -r 连文件系统 | 4 |
xfs_growfs | 让 xfs 认出「地盘变大」(给挂载点) | 只有扩,没有缩;ext4 对应 resize2fs | 4 |
mkfs.ext4 / resize2fs | ext4 建文件系统 / 扩缩容量(给设备) | resize2fs 设备 [大小] | 对比 |