第 9/30 天(重访·第二季)
引言
在第一季的第 9 天,我们已经掌握了磁盘管理的入门三板斧:用 lsblk 看清磁盘布局、用 fdisk 分区、用 mkfs 格式化、用 mount 挂载。但真实的生产环境里,磁盘从来不是「一块硬盘一个分区」这么简单——数据增长、空间不足、硬件故障、在线扩容这些才是运维每天要面对的常态。
本篇文章是第二季的重访,我们将跳出「会不会敲命令」的层面,深入存储架构设计:LVM 逻辑卷的完整生命周期管理、精简配置与快照回滚、Btrfs 文件系统的子卷与快照、mdadm 软 RAID 的构建与故障处理,以及一套可落地的生产级存储最佳实践。如果你已经会 lsblk 和 mkfs,本文会让你真正「设计」存储,而不是「处理」磁盘。
一、LVM 深度:从「会用」到「会设计」
LVM(Logical Volume Manager)的价值在于抽象:它把物理磁盘(PV)聚合成卷组(VG),再从中划出逻辑卷(LV)。这样做的核心好处是——卷的大小不再受物理磁盘边界限制,扩容无需停机。
1.1 三层架构回顾
物理磁盘 /dev/sda, /dev/sdb
│ pvcreate
▼
PV 物理卷 (Physical Volume)
│ vgcreate
▼
VG 卷组 (Volume Group) ── 存储池,可包含多块磁盘
│ lvcreate
▼
LV 逻辑卷 (Logical Volume) ── 格式化后挂载使用
1.2 完整生命周期实战
# 1. 创建物理卷(把整块盘初始化为 PV)
sudo pvcreate /dev/sdb /dev/sdc
# 2. 创建卷组
sudo vgcreate data_vg /dev/sdb /dev/sdc
# 3. 查看卷组与物理卷
sudo vgs # 卷组概要
sudo pvs # 物理卷概要
# 4. 创建 100G 逻辑卷
sudo lvcreate -L 100G -n data_lv data_vg
# 5. 格式化并挂载
sudo mkfs.ext4 /dev/data_vg/data_lv
sudo mkdir -p /data
sudo mount /dev/data_vg/data_lv /data
echo "/dev/data_vg/data_lv /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
关键命令:
pvs/vgs/lvs是查看三个层面状态的快速命令,比pvdisplay更简洁,日常排障优先使用。
1.3 在线扩容:存储不够时的「救命稻草」
这是 LVM 相对传统分区的最大优势——扩容无需卸载、无需重启:
# 场景:/data 用了 90%,VG 里还有空闲空间
sudo lvextend -L +50G /dev/data_vg/data_lv # 逻辑卷增加 50G
# ext4 需用 resize2fs 在线扩容文件系统
sudo resize2fs /dev/data_vg/data_lv
# 若为 XFS,则用 xfs_growfs(参数是挂载点)
sudo xfs_growfs /data
⚠️ 经典坑:ext4 用
resize2fs,XFS 用xfs_growfs,两者不能互换!且 XFS 不能缩小,只能扩容。设计之初就要为 XFS 预留足够空间。
1.4 快照:秒级备份与安全回滚
LVM 快照可以在秒级创建逻辑卷的「冻结副本」,非常适合升级前做备份:
# 给正在使用的 data_lv 创建 5G 快照(快照越大,可保留的差异数据越多)
sudo lvcreate -L 5G -s -n data_lv_snap /dev/data_vg/data_lv
# 挂载快照查看/备份(只读)
sudo mkdir -p /mnt/snap
sudo mount -o ro /dev/data_vg/data_lv_snap /mnt/snap
# 升级出问题,直接回滚到快照时间点(需先卸载原卷)
sudo umount /data
sudo lvconvert --merge /dev/data_vg/data_lv_snap
sudo mount /dev/data_vg/data_lv /data
# 快照用完要删除,否则会持续占用空间直到写满
sudo lvremove /dev/data_vg/data_lv_snap
⚠️ 快照不是备份! 快照与原始卷共享同一物理存储,如果原始卷或快照损坏,两者都可能受影响。快照适合「短期回滚窗口」,长期数据安全必须依赖真正的异地备份。
1.5 精简配置(Thin Provisioning):按需分配
传统 LVM 是「厚配置」——创建 100G LV 就立刻占用 100G。精简配置则允许超额分配,实际使用多少占多少,非常适合虚拟化环境的存储池:
# 1. 创建精简池
sudo lvcreate -L 500G --thinpool data_vg/thinpool
# 2. 从精简池创建 200G 的逻辑卷(但实际只占已写入的量)
sudo lvcreate -V 200G -T data_vg/thinpool -n vm01_disk
# 3. 查看精简池使用率(Data% / Meta%)
sudo lvs data_vg/thinpool
⚠️ 超额分配的代价:如果多个精简卷合计写入超过池容量,会写满池导致所有卷挂起。务必用监控盯紧
lvs中的池使用率,通常设置 80% 告警。
二、文件系统选型:ext4 vs XFS vs Btrfs
第一季我们只简单对比了类型,第二季要讲「怎么选」。选型没有绝对的对错,只有「合不合适」:
| 维度 | ext4 | XFS | Btrfs |
|---|---|---|---|
| 定位 | 通用默认 | 大文件、高并发 | 快照、子卷、自愈 |
| 最大文件 | 16TB | 8EB | 16EB |
| 在线扩容 | ✅ resize2fs | ✅ xfs_growfs | ✅ |
| 在线缩小 | ❌ | ❌ | ✅(谨慎) |
| 快照 | 需 LVM 辅助 | 需 LVM 辅助 | 原生内置 |
| 数据校验 | ❌ | 有限 | ✅ checksum |
| 自愈 | ❌ | ❌ | ✅ scrub |
| Ubuntu 默认 | 桌面版 | 服务器版 | 可选 |
选型建议:
– 服务器 / 大数据 / 视频 → XFS(单文件性能强,Ubuntu 服务器版默认)
– 需要大量快照、频繁回滚、数据完整性要求高 → Btrfs
– 通用、求稳、社区文档最多 → ext4
Btrfs 快照与回滚实战
Btrfs 的原生快照不依赖 LVM,且支持写时复制(CoW),创建快照瞬间完成、几乎不占额外空间:
# 1. 格式化并挂载
sudo mkfs.btrfs -f /dev/sdb
sudo mkdir -p /data
sudo mount /dev/sdb /data
# 2. 创建子卷(子卷 = 可独立快照的逻辑单位)
sudo btrfs subvolume create /data/@data
# 3. 创建只读快照
sudo btrfs subvolume snapshot -r /data/@data /data/@data-snap-$(date +%F)
# 4. 列出所有快照
sudo btrfs subvolume list /data
# 5. 回滚:把当前子卷替换为快照
sudo mv /data/@data /data/@data-broken
sudo btrfs subvolume snapshot /data/@data-snap-2026-08-28 /data/@data
# 6. 数据完整性校验(扫描静默损坏,生产环境建议每周跑一次)
sudo btrfs scrub start /data
sudo btrfs scrub status /data
实战要点:Btrfs 的
scrub会读取所有数据并用 checksum 校验,能发现并修复静默数据损坏——这是 ext4/XFS 不具备的能力,对数据库、归档等敏感数据价值极高。
三、软 RAID 实战:用 mdadm 构建冗余存储
硬件 RAID 卡昂贵,而 Linux 的软 RAID(mdadm)完全免费、性能在多数场景下足够。生产环境常用 RAID 1(镜像,保数据) 和 RAID 10(条带+镜像,兼顾性能与冗余)。
# 1. 查看磁盘
lsblk
# 2. 创建 RAID 1(两块盘镜像)——注意 /dev/sdb /dev/sdc 数据会被清空
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 3. 查看 RAID 构建进度与状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# 4. 格式化、挂载、写配置
sudo mkfs.ext4 /dev/md0
sudo mkdir -p /raid
sudo mount /dev/md0 /raid
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u # 让系统启动时能识别 RAID
模拟磁盘故障与更换
# 模拟 /dev/sdc 故障
sudo mdadm --fail /dev/md0 /dev/sdc
# 查看状态:出现 [U_] 表示一块盘已失效
cat /proc/mdstat # md0 : active raid1 sdc[1](F) sdb[0]
# 从阵列移除坏盘,接入新盘重建
sudo mdadm --remove /dev/md0 /dev/sdc
sudo mdadm --add /dev/md0 /dev/sdd
# 等待重建完成(进度会在 mdstat 中显示)
watch -n 5 cat /proc/mdstat
⚠️ 关键提醒:RAID 不是备份。RAID 1 只能防「单块硬盘物理损坏」,防不了「误删文件」「勒索病毒」「控制器逻辑故障」。RAID 负责可用性,备份负责可恢复性,两者缺一不可。
四、磁盘健康与性能监控
生产环境必须「治未病」——在磁盘真正坏掉之前发现问题。
# 1. 磁盘空间使用率
df -h
# 2. 实时 IO 性能(iostat 来自 sysstat 包)
sudo apt install sysstat -y
iostat -x 2 # 每 2 秒刷新,重点看 %util 和 await
# 3. S.M.A.R.T. 健康检测(NVMe 用 smartctl -a /dev/nvme0n1)
sudo apt install smartmontools -y
sudo smartctl -a /dev/sda # 查看健康信息
sudo smartctl -t short /dev/sda # 执行短自检
sudo smartctl -l selftest /dev/sda
# 4. 定期自检(加入 cron)
sudo smartctl --scan
判断磁盘瓶颈的指标:
– %util 接近 100% → 磁盘持续繁忙,可能存在 IO 瓶颈
– await 过高(> 20ms)→ 单次 IO 等待过长
– 明显高于 svctm → 大概率存在队列堆积
五、生产级存储最佳实践清单
- 先规划再动手:部署前明确数据增长率,用
vgs/df记录基线,别等 90% 才扩容。 - 关键数据上 RAID + 异地备份:RAID 保证可用性,备份保证可恢复性,二者叠加才是「稳」。
- 升级前必做快照:无论是 LVM 快照还是 Btrfs 快照,给一个「后悔药」,成本极低。
- 监控要「盯池」:精简池、RAID 重建、Btrfs scrub 状态都要纳入告警。
- XFS 只扩不缩:设计 XFS 卷时预留空间,避免日后无法收缩的尴尬。
- 定期
fsck与scrub:文件系统的一致性检查和数据校验是长期稳定运行的保障。
总结与下期预告
存储是 Ubuntu 系统的「地基」,地基不稳,上层再精妙的应用也随时可能塌方。本文带你从「会用命令」进阶到「设计存储」:理解了 LVM 三层抽象与在线扩容、掌握了快照与精简配置的精髓、会选型 ext4/XFS/Btrfs、能构建 RAID 1 并从容应对磁盘故障,最后沉淀出一套生产级最佳实践。记住三个立即能用的要点:扩容前先分清 resize2fs 和 xfs_growfs、快照是回滚利器但永远代替不了异地备份、RAID 只防硬件故障不防人为误删。
下期预告:第 10 天(重访·第二季)将带来《网络配置与管理——高级网络与安全》,深入 netplan 高级配置、Bonding 链路聚合、VLAN 划分与 UFW 生产级防火墙策略。敬请期待!
系列目录
| 天数 | 主题 | 状态 |
|---|---|---|
| 第 1 天 | Ubuntu 简介与版本选择 | ✅ |
| 第 2 天 | 手把手安装 Ubuntu | ✅ |
| 第 3 天 | Ubuntu 桌面环境初探 | ✅ |
| 第 4 天 | Ubuntu 终端基础 | ✅ |
| 第 5 天 | 用户与权限管理 | ✅ |
| 第 6 天 | 软件包管理 | ✅ |
| 第 7 天 | 文件与文本操作 | ✅ |
| 第 8 天 | 系统服务管理 | ✅ |
| 第 9 天 | 磁盘与文件系统管理 | ✅ |
| 第 10 天 | 网络配置与管理 | ✅ |
| 第 11 天 | 进程管理与监控 | ✅ |
| 第 12 天 | 计划任务与自动化 | ✅ |
| 第 13 天 | 备份与恢复策略 | ✅ |
| 第 14 天 | 系统更新与升级管理 | ✅ |
| 第 15 天 | SSH 远程管理与安全加固 | ✅ |
| 第 16 天 | Web 服务器搭建 | ✅ |
| 第 17 天 | 数据库服务器部署 | ✅ |
| 第 18 天 | Docker 容器化管理 | ✅ |
| 第 19 天 | 文件共享服务 | ✅ |
| 第 20 天 | 监控与告警系统 | ✅ |
| 第 21 天 | 邮件服务器基础 | ✅ |
| 第 22 天 | 系统安全加固 | ✅ |
| 第 23 天 | 性能调优与内核参数 | ✅ |
| 第 24 天 | 虚拟化技术 | ✅ |
| 第 25 天 | 容器编排入门 | ✅ |
| 第 26 天 | 高可用与负载均衡 | ✅ |
| 第 27 天 | Ubuntu 自动部署 | ✅ |
| 第 28 天 | 故障排查实战 | ✅ |
| 第 29 天 | Ubuntu 社区与文档 | ✅ |
| 第 30 天 | 30 天回顾总结 | ✅ |
| 第 1 天(重访·第二季) | Ubuntu 2026 新篇章——生态全景与版本选择 | ✅ |
| 第 2 天(重访·第二季) | 手把手安装 Ubuntu——2026 年全新安装体验 | ✅ |
| 第 3 天(重访·第二季) | Ubuntu 桌面环境深度探索——GNOME 46 新特性 | ✅ |
| 第 4 天(重访·第二季) | Ubuntu 终端与 Shell 高级技巧 | ✅ |
| 第 5 天(重访·第二季) | 用户与权限管理——从 ACL 到 PAM | ✅ |
| 第 6 天(重访·第二季) | 软件包管理——apt、dpkg、snap、flatpack 深入对比 | ✅ |
| 第 7 天(重访·第二季) | 文件与文本操作——现代化 CLI 工具链 | ✅ |
| 第 8 天(重访·第二季) | 系统服务管理——systemd 深度剖析与企业级服务治理 | ✅ |
| 第 9 天(重访·第二季) | 磁盘与文件系统管理——LVM 与存储进阶 | 🟢 今日 |
| 第 10 天(重访·第二季) | 网络配置与管理——高级网络与安全 | ⏳ |
| 第 11 天(重访·第二季) | 进程管理与监控——性能分析与调优 | ⏳ |
| 第 12 天(重访·第二季) | 计划任务与自动化——进阶自动化 | ⏳ |
| 第 13 天(重访·第二季) | 备份与恢复策略——企业级备份方案 | ⏳ |
| 第 14 天(重访·第二季) | 系统更新与升级管理——生产环境升级策略 | ⏳ |
| 第 15 天(重访·第二季) | SSH 远程管理——安全加固进阶 | ⏳ |
| 第 16 天(重访·第二季) | Web 服务器搭建——高性能 Nginx 调优 | ⏳ |
| 第 17 天(重访·第二季) | 数据库服务器部署——生产级数据库运维 | ⏳ |
| 第 18 天(重访·第二季) | Docker 容器化——生产级容器管理 | ⏳ |
| 第 19 天(重访·第二季) | 文件共享服务——高性能存储方案 | ⏳ |
| 第 20 天(重访·第二季) | 监控与告警系统——可观测性平台 | ⏳ |
| 第 21 天(重访·第二季) | 邮件服务器基础——企业邮件方案 | ⏳ |
| 第 22 天(重访·第二季) | 系统安全加固——深度安全策略 | ⏳ |
| 第 23 天(重访·第二季) | 性能调优与内核参数——生产环境优化 | ⏳ |
| 第 24 天(重访·第二季) | 虚拟化技术——KVM 高级虚拟化 | ⏳ |
| 第 25 天(重访·第二季) | 容器编排入门——Docker Compose 与 K8s | ⏳ |
| 第 26 天(重访·第二季) | 高可用与负载均衡——集群方案 | ⏳ |
| 第 27 天(重访·第二季) | Ubuntu 自动部署——自动化运维 | ⏳ |
| 第 28 天(重访·第二季) | 故障排查实战——深度排障 | ⏳ |
| 第 29 天(重访·第二季) | Ubuntu 社区与文档——开源贡献 | ⏳ |
| 第 30 天(重访·第二季) | 30 天回顾总结——第二季完结篇 | ⏳ |















暂无评论内容