Ubuntu 系统系列 | 第 9 天(重访·第二季):磁盘与文件系统管理——LVM 与存储进阶

第 9/30 天(重访·第二季)

引言

在第一季的第 9 天,我们已经掌握了磁盘管理的入门三板斧:用 lsblk 看清磁盘布局、用 fdisk 分区、用 mkfs 格式化、用 mount 挂载。但真实的生产环境里,磁盘从来不是「一块硬盘一个分区」这么简单——数据增长、空间不足、硬件故障、在线扩容这些才是运维每天要面对的常态。

本篇文章是第二季的重访,我们将跳出「会不会敲命令」的层面,深入存储架构设计:LVM 逻辑卷的完整生命周期管理、精简配置与快照回滚、Btrfs 文件系统的子卷与快照、mdadm 软 RAID 的构建与故障处理,以及一套可落地的生产级存储最佳实践。如果你已经会 lsblkmkfs,本文会让你真正「设计」存储,而不是「处理」磁盘。


一、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 → 大概率存在队列堆积


五、生产级存储最佳实践清单

  1. 先规划再动手:部署前明确数据增长率,用 vgs/df 记录基线,别等 90% 才扩容。
  2. 关键数据上 RAID + 异地备份:RAID 保证可用性,备份保证可恢复性,二者叠加才是「稳」。
  3. 升级前必做快照:无论是 LVM 快照还是 Btrfs 快照,给一个「后悔药」,成本极低。
  4. 监控要「盯池」:精简池、RAID 重建、Btrfs scrub 状态都要纳入告警。
  5. XFS 只扩不缩:设计 XFS 卷时预留空间,避免日后无法收缩的尴尬。
  6. 定期 fsckscrub:文件系统的一致性检查和数据校验是长期稳定运行的保障。

总结与下期预告

存储是 Ubuntu 系统的「地基」,地基不稳,上层再精妙的应用也随时可能塌方。本文带你从「会用命令」进阶到「设计存储」:理解了 LVM 三层抽象与在线扩容、掌握了快照与精简配置的精髓、会选型 ext4/XFS/Btrfs、能构建 RAID 1 并从容应对磁盘故障,最后沉淀出一套生产级最佳实践。记住三个立即能用的要点:扩容前先分清 resize2fsxfs_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 天回顾总结——第二季完结篇
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容