Linux 文件系统与磁盘管理:从 inode 到 LVM/RAID 的完整实战

系统讲解 Linux 文件系统与磁盘管理:inode 与文件系统结构、ext4/xfs/btrfs 对比、挂载与 fstab、df/du 空间管理、LVM 逻辑卷动态扩容、软 RAID 阵列搭建、磁盘配额与坏道检查。

引言

「磁盘满了但 df 显示没满」「加了块新盘却挂不上」「日志疯狂增长撑爆分区」——这些 Linux 运维的经典困境,都源于对文件系统与磁盘管理理解不足。从 inode 到分区、从挂载到 LVM 动态扩容、从 RAID 到配额,本文用一条实战链路把它们串起来。

本文系统覆盖文件系统结构与类型对比、挂载与 fstab、df/du 空间分析、LVM 逻辑卷的创建与在线扩容、软 RAID 搭建、以及磁盘健康检查与配额管理——让你既能「救急」也能「规划」。

前置:基本命令行。文件系统内核机制可参考 [[os]] 专题。


目录


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 三大主流文件系统

特性ext4xfsbtrfs
单文件上限16TB8EiB16EiB
在线扩容支持支持支持
快照不支持不支持原生支持
数据校验部分不支持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 常见级别对比

级别最少盘冗余读性能写性能可用容量
RAID02无高高N×单盘
RAID12镜像高中1×单盘
RAID53单盘容错高中(N-1)×单盘
RAID104镜像+条带高高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 管理详解

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「linux」更多文章

  1. Linux 高级文件系统:XFS、Btrfs、ZFS 与存储进阶
  2. Linux 高可用与负载均衡:HAProxy、Keepalived 与集群方案
  3. Linux 防火墙与 nftables:规则集、链、NAT 与网络安全防护