学习日志 · 2026 年 10 月
这个月从 LVM 的「建卷组 → 建逻辑卷 → 格式化 → 挂载 → 扩容」整条链走通开始,把存储域剩下的两道题往收尾推。新内容在最上面,每条末尾的「能力索引」指向 RHCSA 学习地图。
2026-10-28 星期三
按存储实操手册从头又走了一遍,这次 A、B、C 三段全过 —— 昨天卡在 B6 的 B7/B8/B9 补上了,实验 C 的扩根也重做了一次。步骤没变,变的是这次没翻聊天记录,只对着文档走,每步自己先说出「成功长什么样」再动手。
今天做了什么
① 实验 B 收尾:两步扩容,再重启验一遍
lvextend -L 300MiB /dev/test/vo → 这时 df 不动(正常,只改了 LVM 层)→ xfs_growfs /vo → df 才变 295M。然后 B9:关机重启,findmnt /vo 有输出,fstab 那一行才算真对。
② 实验 C 重做:给根分区扩容
sdc2 从 4097MiB 起(避开 sdc1 占的前 4096MiB)→ pvcreate → vgextend rlm → lvextend -l +100%free /dev/rlm/root → xfs_growfs /。这条链 10-22 已经走过一次。
第二次做才看清顺序为什么不能颠倒:先扩 LV,再扩文件系统。 反过来先 xfs_growfs,它会照常成功、但 blocks 数一个不变 —— 因为设备本身还没变大,等于白跑一趟,还容易让人以为「这步做过了」。
卡住的地方
只报了「完成了」,输出一条没留,所以今天只能算「操作走完」,不算「验收过」。
要证明三本账对得上,一条命令就够:
1 | lsblk -f ; vgs ; df -hT |
照目前的操作为推,应该是:sdb1 1GiB xfs 挂 /mnt/data;test VG 里 vo 300MiB 挂 /vo、VFree 剩约 3.7g;rlm VFree 归零、/ 约 11G。这些是推的不是看到的 —— 待验证。
关键命令或配置
1 | # B7 → B9:先扩 LV,再扩 FS,最后重启验收 |
下一步:把 swap 这块收掉
存储域就差它了。三条与普通挂载不一样的地方,明天逐个验证:
mkswap不是mkfs—— swap 没有「文件系统类型」这个东西- fstab 第二字段写
none,不是目录 —— 所以它压根没有「挂载点」 - 启用用
swapon -a,不是mount -a;验收看free -h/swapon --show,不看df
之后按能力依赖往下排:软件包与仓库 → systemd 服务 → 计划任务 → 网络(nmcli,我的最大缺口,放这么后是为了能「起服务 → 看日志 → 放行端口」形成闭环)→ firewalld → SELinux → SSH → 文本处理。待定:明天是先 swap,还是直接进软件包。
能力索引 —— 今天涉及的知识点在地图上的位置:
2026-10-27 星期二
今天没往前学,是把存储实操手册从头完整重做一遍 —— 实验 A(裸分区)A1→A9 全过,实验 B(LVM)做到 B6(写 fstab)就停了。重做比第一次闷,但这次每步都逼自己说清「成功长什么样」,比第一次照着敲留下东西多。
今天做了什么
① 实验 A:裸分区这条路,走到重启验证
sdb1 1 GiB → mkfs.xfs → blkid 取 UUID → fstab 里写 UUID= → 挂 /mnt/data → 重启再验一遍。
特意留了重启这一步:fstab 那一行只在开机那一刻才真被执行。 手工 mount 成功一百次,也证明不了开机时挂得上。重启后 findmnt /mnt/data 有输出,A 才算真过。
② 实验 B:LVM 这条路,做到 B6
sdc1 4096 MiB → pvcreate → vgcreate test → lvcreate -n vo -L 200MiB → mkfs.xfs → fstab 写 /dev/mapper/test-vo → 挂 /vo。
fstab 第一字段这次写的是 /dev/mapper/test-vo。它和 /dev/test/vo 指向同一台设备(真正的节点是 /dev/dm-N),差别只在少走一层 udev 的卷组目录。手册里两种写法都给了,并注明写 UUID 更保险 —— mapper 路径稳在「不随 sdX 命名漂」,但盘重建、VG 重建之后它可能指向别的东西。
卡住的地方
一、B6 是今天唯一改 fstab 的一步,改错了下次开机就进 emergency mode。
mount /vo 成功只说明「这块设备现在能挂上」,不说明 fstab 那行写对了。更坑的是:拿 mount -a 验也不一定准 —— 挂载点已经在挂载树里时,mount -a 会认为它挂着、直接跳过这一条,一条 fstab 都不读。
所以真验的顺序是三步,先卸再挂:
1 | umount /vo |
二、验收只验最后一层,这次踩在博客构建链上。
顺手修了部署脚本一个 bug:它调 hexo generate 时没传工作目录,从项目目录以外的地方跑,生成环节就空转 —— 什么都没生成,但最后一步推送照样成功,脚本还打印 Deploy done: <旧提交>、退出码 0。
也就是说:那句成功是最后一步的成功,不是整条链路的成功。 判据改成三个一起看 —— 提交 sha 有没有变、public/ 里目标文件 mtime 有没有刷新、产物里有没有这轮新加的内容。三个都过才算跑过。
顺带记一条可复用的:子进程(spawn / system())默认继承调用者的工作目录,而生成类工具大多按当前目录找配置 —— 目录不对时它们常常不报错,只是什么都不做。脚本调外部命令,工作目录和退出码一样要显式管。
这条跟存储域那几条是同一族:dnf repolist、passwd -S、blkid、mount -a —— 全都是「验的那一层比结论浅一层」。
三、证据没贴(待验证)。
今天只报了一句「做到 b6 了」,findmnt /vo 和 df -h /vo 的输出没留。所以 B6 现在只能算「操作做完了」,不算「验收过了」—— 下次先补这两条。
关键命令或配置
1 | # A 路线:裸分区 → UUID 写 fstab → 重启验证 |
1 | # B 路线:LVM → 格式化 → 挂载(停在 B6) |
下一步
- B7:
lvextend -L 300MiB /dev/test/vo→ 这时df还会是 195M(正常,只改了 LVM 层)→xfs_growfs /vo→ 应该变 295M - B9 重启验收:重开机后
findmnt /vo、df -h /vo各看一眼 —— 重启过才算 fstab 真对 - 补 B6 的证据:
findmnt /vo+df -h /vo的输出(待验证) - 再进实验 C:动手前先打快照,
sdc2从 4097MiB 起 —— 别和 sdc1 占的前 4096MiB 叠上
能力索引 —— 今天涉及的知识点在地图上的位置:
2026-10-22 星期四
今天把根分区扩了 —— 第一次动 /,不卸载、不重启,df 从 6.2G 变成 11G。反倒是建分区那一步被 parted 绊住:报错里的数字看着像我起点敲错了,其实只是单位换了一把尺子。
今天做了什么
① 根分区扩容:从「盘上还剩 4 GiB」到 df 真的变成 11G
sdc 剩下的空间做成 sdc2(标 lvm)→ pvcreate → vgextend rlm → lvextend -l +100%free /dev/rlm/root → xfs_growfs /。
四层各看一眼,账是通的:vgs 的 VSize 到 10.99g、VFree <4.00g;lvs 的 root 从 <6.20g 变成 10.19g(2609 extents);df -h / 从 6.2G 变成 11G,used 2.2G / avail 8.1G / 21%。动手前打过快照。
② 四个数字对不上,但每一个都对
sdc2给了 4094MiB,VG 只多出<4.00g—— PE 是 4 MiB,装不下的余数直接丢掉lvs说 10.19g,df说 11G —— df 向上取整到整 G,而且它永远比 lvs 小(XFS 日志 16384 blocks = 64 MiB,再加元数据)parted报 sdc2 起点差 1 个扇区未对齐 —— 警告不是错误,选 Ignore 继续
这三条要能当场讲出来,不然验收的时候会怀疑自己是不是做错了。
③ 扩容不用改 fstab
/dev/mapper/rlm-root 是稳定名(写在 LVM 元数据里,不随内核 sd 命名漂),文件系统也没重建、UUID 没变。扩容改的是尺寸,不是身份 —— 身份没变就不用动 fstab。
④ 把这几天的存储操作整理成一份手册
存储实操手册:三条路线(裸分区 / LVM / 扩根)对照表 → 每一步的完整命令 → 四层命令对照 → 13 条报错速查 → 26 个可勾选步骤(进度存在浏览器本地)。做这份东西的原因是前面几轮的操作是散的,我要能对着它从头完整走一遍,而不是靠回忆拼。
卡住的地方
一、parted ... 100% 在 GPT 盘上必然报错。
1 | Error: You requested a partition from 4296MB to 8590MB (sectors 8390656..16777215). |
第一眼以为起点错了 —— 4296MB 对不上我要的 4097MiB。其实是十进制 / 二进制:4097 MiB = 4296 MB,8590MB = 8192 MiB,起点终点都没错。真正撞上的是结尾:16777215 是磁盘最后一个扇区,但 GPT 在盘尾留了 33 个扇区(≈17 KiB)放备份分区表 + 备份 GPT 头,分区不能占,可用上界只有 16777182。
所以「到磁盘末尾」在分区的世界里从来不是「到最后一个字节」—— 头尾都得给分区表让位(盘首 34 扇区、盘尾 33 扇区;msdos 只在盘首占 1 个扇区,盘尾没有保留)。稳定写法是结尾直接给具体值。
二、-s 不等于「交互模式但不提问」。
同一条命令,交互模式下 parted 会问 Fix/Ignore/Cancel?,选 Fix 自动收敛到 16777182,分区照样建成;-s 直接报错退出。脚本模式省掉的不只是提问,还有自动修复。 要写进脚本,就得自己先把边界算出来。
三、lvextend 之后 df 不动,这次没被吓到。
昨天是亲眼看到「LV 300m / df 195M」并存的,今天一见 lvs 变了而 df 没变,就知道是少跑了 xfs_growfs,不用怀疑命令没生效。
关键命令或配置
1 | # 根分区扩容全流程(不卸载、不重启) |
1 | # 看分区表还剩多少可用扇区(写脚本前先算边界) |
下一步
- 题 21(swap):
sdb还剩 ~7.6 GiB(sdb1 只占 1 GiB)→ 512 MiB swap → 写 fstab →swapon -a验收free -h,不动原有 swap rlm的 VFree 已经归零,后面再要空间只能从testVG(还有 3.70g)里挪,或者加盘- 补上一直没做的那个动作:扩容前
dd造文件 +sha256sum记下来,扩完sha256sum -c对一遍 —— 昨天、今天都是「扩成了但没验内容不丢」
能力索引 —— 今天涉及的知识点在地图上的位置:
2026-10-21 星期三
隔了将近一个月重新开机,今天只走了两件事:先把打不开的实验机救回来,再把 LVM 从 vgcreate 一路做到「扩到 300 MiB 且 df 真的变大」。题 20 原题算真做成了,但「内容不丢」这一条我自己心里没底 —— 扩之前没留校验文件。
今天做了什么
① 实验机打不开:是锁残留,不是盘坏了
目录里躺着 12 个 .lck,分两批:11 个时间戳全停在 09-17 19:06:45,1 个 .vmx.lck 是今天 09:43。同目录还有两个 .dmp 崩溃转储,.vmx 里 cleanShutdown = "FALSE" —— 指向 09-17 那次非正常关机,锁没被回收。
关键是要分清「锁文件存在」和「有人占用」。两步:① 读 .lck 文件本身,里面写着持有者是哪个 exe;② 去进程列表里对那个 exe 还在不在。09-17 那批写的是虚拟机进程,今天那个写的是图形界面,而当前进程里两个都没有 → 全是孤儿。
处理方式是移走而不是删掉:12 个 .lck 整体移到同目录的备份目录,随时能移回。有快照链的机器,移锁零风险、删盘不可逆 —— 这条记牢。
开机后 lsblk -f / findmnt / pvs / vgs / lvs 和 09-22 收工时一模一样,崩溃没伤到数据层。
② LVM 第二层:建卷组、建逻辑卷
vgcreate test /dev/sdc1 → lvcreate -n vo -L 200MiB test。
这里被卡了一下:我只贴了「命令成功」这一句,vgs / lvs 的输出一个没留。被要求补一次三本账对账 —— pvs 的 PFree、vgs 的 VFree、lvs 的 LSize 要能对上,才算真的建对了。命令返回 created 只说明动作发出去了,不说明账记对了。
③ 格式化 + 挂载 + fstab,四步验收全过
mkfs.xfs 打出三行警告(Filesystem should be larger than 300MB / Log size should be at least 64MB / deprecated)—— 是警告不是失败,200 MiB 的 xfs 照样建成,退出码 0。
验收四步:mount -a 静默无输出、findmnt /vo 的 SOURCE 是 /dev/mapper/test-vo、df -hT 报 195M。
④ 题 20 原题:200 MiB → 300 MiB
lvextend 只改了 LVM 层的账,lvs 已经是 300.00m、Attr 带上 o(open = 正在被使用),但这一瞬间 df 还是 195M —— 两层错位,这次是亲眼看到的,不是背下来的。补一条 xfs_growfs /vo,输出 data blocks changed from 51200 to 76800,df 才变 295M。
from 200.00 MiB (50 extents) to 300.00 MiB (75 extents) 里 50 → 75 正是 PE = 4 MiB 的整数倍换算。
⑤ 顺手把 /dev 认了一遍
/dev 下不是「一堆设备」,是五类东西:真实存储(sda / sda2)、设备映射(dm-0 与 mapper/ 下那堆)、终端(tty*)、伪设备(null / zero / random)、分类索引目录(disk/by-uuid、disk/by-path)。lsblk -o NAME,MAJ:MIN 看主次设备号,ls -l /dev/mapper 看符号链接指向谁 —— /dev/test/vo 和 /dev/mapper/test-vo 其实是同一台设备的两条路径。
卡住的地方
一、只做动作,不留证据。 这次是第三次。vgcreate / lvcreate 都成功,但 vgs / vgdisplay / lvs / lvdisplay 一个都没贴。补完三本账对账才闭环。以后判断一个存储动作做没做成,标准不是「命令没报错」,而是三本账能不能对上。
二、df 为什么比 LV 小一截。 一直以为 200 MiB 就该看到 200M,实际 195M。差分是 xfs 自己的内部日志(1368 blocks × 4 KiB ≈ 5.3 MiB)加上各分配组的元数据 —— 不是「空间丢了」,是文件系统自己要用的。扩到 300 之后同样少 5 MiB,差值基本恒定(200 − 5.3 ≈ 195,300 − 5.3 ≈ 295)。
三、扩容前没留校验文件。 题面要求「保证内容不丢」,我直接扩了。xfs 在线扩容本身是安全的,但没验过就等于没验过。以后的标准动作:扩之前 dd 造一个文件 + sha256sum 记下来,扩完 sha256sum -c 对一遍。
关键命令或配置
1 | # 卷组与逻辑卷 |
下一步
- 给根分区扩容(还没做):
sdc剩下的 ~4 GiB →sdc2(标 lvm)→pvcreate→vgextend rlm→lvextend -l +100%FREE /dev/rlm/root→xfs_growfs / - 动手前先在 VMware 界面打快照 —— 第一次动根分区,虽然只增不减
- 记牢两组区别:
-L 4G是「设成 4G」(绝对值),-l +100%FREE才是「把卷组剩下的全给它」;xfs_growfs给挂载点,resize2fs给设备 - 补一个习惯:扩容前先放校验文件,扩完再对
能力索引 —— 今天涉及的知识点在地图上的位置: