引言
「磁盘满了但 df 显示没满」「加了块新盘却挂不上」「日志疯狂增长撑爆分区」——这些 Linux 运维的经典困境,都源于对文件系统与磁盘管理理解不足。从 inode 到分区、从挂载到 LVM 动态扩容、从 RAID 到配额,本文用一条实战链路把它们串起来。
本文系统覆盖文件系统结构与类型对比、挂载与 fstab、df/du 空间分析、LVM 逻辑卷的创建与在线扩容、软 RAID 搭建、以及磁盘健康检查与配额管理——让你既能「救急」也能「规划」。
前置:基本命令行。文件系统内核机制可参考 [[os]] 专题。
目录
- 1. 文件系统基础与 inode
- 2. ext4/xfs/btrfs 类型对比
- 3. 分区、格式化与挂载
- 4. fstab:开机自动挂载
- 5. df/du:磁盘空间分析
- 6. LVM:动态扩容的利器
- 7. RAID:数据冗余与性能
- 8. 磁盘健康与配额
- 9. 总结:磁盘管理的规划思维
- 延伸阅读
1. 文件系统基础与 inode
1.1 文件 = inode + 数据块
文件名 -> inode(元数据:权限/大小/时间/块指针)-> 数据块
硬链接 = 多个名字指向同一 inode
软链接 = 一个特殊的文件,存目标路径
1.2 inode 耗尽陷阱
磁盘空间没满,却提示「no space left」——可能是 inode 满了(海量小文件)。
# 查看 inode 使用
df -i
# 查看目录文件数
ls -la | wc -l
find /dir -type f | wc -l
1.3 查看文件详情
stat /etc/hostname # 查看 inode 号、块数、时间戳
ls -li # 显示 inode 号
2. ext4/xfs/btrfs 类型对比
2.1 三大主流文件系统
| 特性 | ext4 | xfs | btrfs |
|---|---|---|---|
| 单文件上限 | 16TB | 8EiB | 16EiB |
| 在线扩容 | 支持 | 支持 | 支持 |
| 快照 | 不支持 | 不支持 | 原生支持 |
| 数据校验 | 部分 | 不支持 | checksum 完整 |
| 适用 | 通用/默认 | 大文件/高性能 | 快照/高级特性 |
2.2 选择建议
默认场景(Linux 发行版) -> ext4
大文件/数据库日志 -> xfs(RHEL/CentOS 默认)
需要快照/子卷 -> btrfs
2.3 查看当前文件系统
df -T # 查看类型
lsblk -f # 块设备与文件系统
blkid # 文件系统 UUID
3. 分区、格式化与挂载
3.1 创建分区
# 交互式分区(或用 gdisk)
fdisk /dev/sdb
# 命令: n 新建分区, w 写入
# 一步到位(非交互,脚本化)
parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb mkpart primary ext4 1MiB 100%
3.2 格式化
mkfs.ext4 /dev/sdb1
# 或
mkfs.xfs /dev/sdb1
3.3 挂载与卸载
# 创建挂载点
mkdir -p /data
# 挂载
mount /dev/sdb1 /data
# 卸载
umount /data
# 查看挂载情况
mount | grep /data
df -h
4. fstab:开机自动挂载
4.1 fstab 字段
设备 挂载点 文件系统 挂载选项 dump fsck
UUID=xxx /data ext4 defaults 0 2
4.2 推荐写法(用 UUID 而非设备名)
# 获取 UUID
blkid /dev/sdb1
# 追加到 /etc/fstab
echo "UUID=$(blkid -s UUID -o value /dev/sdb1) /data ext4 defaults 0 2" >> /etc/fstab
4.3 验证与安全
# 验证 fstab 正确性(不实际挂载)
mount -a
# 测试挂载新条目
mount /data
# 注意:fstab 写错会导致开机进不了系统,务必先 mount -a 验证
5. df/du:磁盘空间分析
5.1 df:文件系统维度
df -h # 人类可读
df -i # inode 使用
df -T # 文件系统类型
5.2 du:目录维度
du -sh /var/log # 目录总大小
du -h --max-depth=1 /var | sort -rh | head -10 # 找大目录
du -sh * | sort -rh | head -10 # 当前目录找大块头
5.3 经典排查:磁盘满
# 1. 先看哪个分区满
df -h
# 2. 进对应分区找大目录
du -h --max-depth=2 / | sort -rh | head -10
# 3. 清理(日志/缓存/旧内核)
sudo journalctl --vacuum-time=7d
sudo apt clean
ls /boot/ | grep vmlinuz # 删旧内核
6. LVM:动态扩容的利器
6.1 LVM 三层结构
PV(物理卷)-> VG(卷组)-> LV(逻辑卷)-> 挂载
/dev/sdb1 /dev/vgdata /dev/vgdata/lvdata
6.2 创建 LVM
# 1. 标记物理卷
pvcreate /dev/sdb1
# 2. 创建卷组
vgcreate vgdata /dev/sdb1
# 3. 创建逻辑卷
lvcreate -L 50G -n lvdata vgdata
# 4. 格式化 + 挂载
mkfs.ext4 /dev/vgdata/lvdata
mount /dev/vgdata/lvdata /data
6.3 在线扩容(关键优势)
# 1. 新磁盘加入卷组
pvcreate /dev/sdc1
vgextend vgdata /dev/sdc1
# 2. 扩大逻辑卷
lvextend -L +20G /dev/vgdata/lvdata
# 3. 扩大文件系统(ext4)
resize2fs /dev/vgdata/lvdata
# 或(xfs)
xfs_growfs /data
6.4 查看 LVM 状态
pvdisplay && vgdisplay && lvdisplay
lvs && vgs && pvs
7. RAID:数据冗余与性能
7.1 常见级别对比
| 级别 | 最少盘 | 冗余 | 读性能 | 写性能 | 可用容量 |
|---|---|---|---|---|---|
| RAID0 | 2 | 无 | 高 | 高 | N×单盘 |
| RAID1 | 2 | 镜像 | 高 | 中 | 1×单盘 |
| RAID5 | 3 | 单盘容错 | 高 | 中 | (N-1)×单盘 |
| RAID10 | 4 | 镜像+条带 | 高 | 高 | N/2×单盘 |
7.2 mdadm 搭建 RAID1
# 安装
apt install mdadm
# 创建 RAID1(/dev/sdb, /dev/sdc)
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 格式化挂载
mkfs.ext4 /dev/md0
mount /dev/md0 /raid
# 保存配置
mdadm --detail --scan >> /etc/mdadm.conf
7.3 RAID 日常维护
cat /proc/mdstat # 查看阵列状态
mdadm --detail /dev/md0 # 查看详细
# 硬盘故障时替换:
mdadm --fail /dev/md0 /dev/sdb
mdadm --remove /dev/md0 /dev/sdb
mdadm --add /dev/md0 /dev/sdd
8. 磁盘健康与配额
8.1 磁盘健康检查
# 查看设备状态
smartctl -a /dev/sda
# 坏块检查(非破坏性只读)
badblocks -sv /dev/sda
# 文件系统一致性检查(需先卸载)
fsck -f /dev/sdb1
8.2 磁盘配额
# 1. 挂载开启配额
mount -o remount,usrquota,grpquota /data
# 2. 初始化配额数据库
quotacheck -cum /data
# 3. 设置用户配额
edquota -u alice
# 编辑 soft/hard 限制(如 soft 5G, hard 6G)
# 4. 查看配额
quota -vs alice
8.3 IO 性能诊断
iostat -x 1 5 # 看 %util / await
iotop # 实时看进程 IO(需 root)
9. 总结:磁盘管理的规划思维
9.1 一句话心法
磁盘管理 = 看得见(df/du)+ 挂得上(mount/fstab)+ 扩得动(LVM)+ 扛得住(RAID/健康检查)
9.2 规划建议
1. 数据盘尽量用 LVM -> 在线扩容免停机
2. 关键数据用 RAID1/RAID10 -> 冗余与性能平衡
3. 日志等易满目录独立分区 + 定期清理
4. 开机自动挂载务必用 UUID + mount -a 验证
9.3 自检清单
| 检查项 | 是否掌握 |
|---|---|
| 能解释 inode 耗尽问题 | ☐ |
| 能用 df/du 定位磁盘占用 | ☐ |
| 能配置 fstab 自动挂载 | ☐ |
| 能用 LVM 在线扩容 | ☐ |
| 能搭建并维护 RAID | ☐ |
延伸阅读
- https://plumephp.com/linux-process-management/ — IO 监控与进程诊断延续
- https://plumephp.com/linux-shell-scripting/ — 用脚本自动化磁盘清理
- [[os]] 专题 — 虚拟文件系统与块设备层原理
- LVM 官方文档 — 完整操作参考
- mdadm 文档 — RAID 管理详解
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。