文章目录
- [v1 分区](#v1 分区)
-
- [v1-1 主流文件系统](#v1-1 主流文件系统)
- [v1-2 分区表](#v1-2 分区表)
-
- [MBR 与 GPT 分区表对比](#MBR 与 GPT 分区表对比)
- [v2 挂载](#v2 挂载)
-
- [v2-1 mount 命令](#v2-1 mount 命令)
- [v2-2 自动挂载fstab](#v2-2 自动挂载fstab)
-
- [fstab 陷阱](#fstab 陷阱)
- [v3 LVM管理](#v3 LVM管理)
-
- [v3-1 LVM 基本概念](#v3-1 LVM 基本概念)
- [v3-2 LVM 创建完整流程](#v3-2 LVM 创建完整流程)
- [v4 inode 问题](#v4 inode 问题)
v1 分区
v1-1 主流文件系统
Linux 支持多种文件系统,不同文件系统在性能、可靠性、功能和适用场景上有显著差异:
| 文件系统 | 最大单文件 | 最大分区 | 日志功能 | 企业级特性 | 适用场景 |
|---|---|---|---|---|---|
| ext4 | 16TB | 1EB | 有 | 延迟分配、快速 fsck | 通用服务器、系统盘 |
| xfs | 8EB | 8EB | 有 | 高并发、大文件、在线扩容 | 数据库、大数据、云盘 |
| btrfs | 16EB | 16EB | 有 | 写时复制、快照、内置 RAID | 备份服务器、容器存储 |
| ext3 | 2TB | 32TB | 有 | 兼容性好 | 老旧系统 |
建议:
- 系统盘优先使用 ext4,兼容性最好,故障恢复工具最成熟
- 数据盘优先使用 xfs,特别是在云环境中,xfs 对大文件和高并发 IO 支持更好,且更好地处理云盘的动态扩容,
xfs_growfs无须卸载 - 所有生产环境必须使用带日志功能的文件系统,防止意外断电导致数据损坏
v1-2 分区表
MBR 与 GPT 分区表对比
分区表是磁盘的 "目录",记录了分区的位置和大小信息:
| 特性 | MBR | GPT |
|---|---|---|
| 最大支持磁盘 | 2TB | 18EB |
| 主分区数量 | 最多 4 个 | 最多 128 个 |
| 扩展分区 | 需要 | 不需要 |
| 备份机制 | 无 | 头部和尾部各有一份备份 |
| 兼容性 | 所有 BIOS 系统 | UEFI 系统,部分 BIOS 系统 |
建议:
- 所有大于 2TB 的磁盘必须使用 GPT 分区表
- 生产环境避免使用扩展分区和逻辑分区,直接使用主分区
parted 工具分区
fdisk 不支持 GPT 分区表,生产环境推荐使用 parted 工具:
bash
# 进入 parted 交互模式
parted /dev/sdb
# 创建 GPT 分区表
(parted) mklabel gpt
# 创建一个使用全部空间的分区
(parted) mkpart primary xfs 0% 100%
# 查看分区信息
(parted) print
# 退出 parted
(parted) quit
# 格式化分区为 xfs 文件系统
mkfs.xfs /dev/sdb1
v2 挂载
v2-1 mount 命令
简化点说,挂载是将文件系统与目录树关联的过程:
# 基本挂载命令
mount /dev/sdb1 /data
# 挂载时指定选项
mount -o noatime,nodiratime /dev/sdb1 /data
常用挂载选项:
noatime:不更新文件的访问时间,提高 IO 性能nodiratime:不更新目录的访问时间defaults:默认选项,包含 rw,suid,dev,exec,auto,nouser,asyncro:只读挂载remount:重新挂载已挂载的文件系统
v2-2 自动挂载fstab
fstab 陷阱
务必使用 UUID 而不是设备名(如 /dev/vdb1)。因为在云环境发生热迁移或设备变动时,内核分配的设备名可能会改变(vdb 变成 vdc),而 UUID 是文件系统的唯一指纹,永远不会变。
/etc/fstab 是系统启动时自动挂载文件系统的配置文件,格式如下:
UUID=xxxx-xxxx /data xfs defaults,noatime 0 0
字段说明:
- 设备标识:推荐使用 UUID,而不是设备名(/dev/sdb1),因为设备名可能会在重启后变化
- 挂载点:必须是一个已存在的目录
- 文件系统类型
- 挂载选项
- dump 备份:0 表示不备份,1 表示每天备份
- fsck 检查:0 表示不检查,1 表示最先检查(根分区),2 表示其次检查
注意项:
- 必须使用 UUID 配置 /etc/fstab,避免设备名变化导致系统无法启动
- 挂载选项中添加 noatime 和 nodiratime 提高性能
- 新配置的 fstab 必须使用
mount -a命令测试,确保没有错误 - 数据盘的 fsck 检查设置为 0,避免系统启动时长时间检查大磁盘
v3 LVM管理
LVM(Logical Volume Manager)是 Linux 下的逻辑卷管理工具,它将物理磁盘抽象为逻辑卷,实现了磁盘空间的动态管理,
v3-1 LVM 基本概念
- PV(Physical Volume):物理卷,是 LVM 的基本存储单元,可以是整个磁盘、磁盘分区或 RAID 阵列
- VG(Volume Group):卷组,由一个或多个 PV 组成,是一个逻辑上的大磁盘
- LV(Logical Volume):逻辑卷,从 VG 中划分出来的空间,可以格式化和挂载
- PE(Physical Extent):物理扩展块,是 PV 中最小的存储单元,默认大小为 4MB
v3-2 LVM 创建完整流程
# 1. 创建物理卷 PV
pvcreate /dev/sdb /dev/sdc
# 查看 PV 信息
pvdisplay
# 2. 创建卷组 VG
vgcreate vg_data /dev/sdb /dev/sdc
# 查看 VG 信息
vgdisplay
# 3. 创建逻辑卷 LV
lvcreate -n lv_data -L 100G vg_data
# 查看 LV 信息
lvdisplay
# 4. 格式化逻辑卷
mkfs.xfs /dev/vg_data/lv_data
# 5. 挂载逻辑卷
mkdir /data
mount /dev/vg_data/lv_data /data
# 6. 配置自动挂载
echo "UUID=$(blkid -s UUID -o value /dev/vg_data/lv_data) /data xfs defaults,noatime 0 0" >> /etc/fstab
注意事项:
- 扩容前一定要备份重要数据
- 优先使用
lvextend -L +大小而不是lvextend -L 总大小,避免计算错误 - 云环境中,先在云平台扩容云盘,然后在系统中执行上述步骤
v4 inode 问题
v4-1 inode 耗尽
inode 概念与问题现象
每个文件都会消耗一个 inode(索引节点),记录文件的元数据。df -h 看的是块容量,df -i 看的才是 inode 数量。当 inode 用尽时,即使磁盘尚有大量剩余空间,系统也会提示 "No space left on device",新建文件失败。
常见场景:
- 日志文件没有及时清理,产生了大量的小日志文件
- 临时文件目录(/tmp)没有定期清理
- 邮件服务器的邮件队列堆积
- 应用程序产生的大量缓存文件
排查步骤
bash
# 1. 检查 inode 使用情况
df -i
# 2. 找到占用 inode 最多的目录
find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
# 3. 深入排查具体目录
find /var/log -type f | wc -l
find /tmp -type f | wc -l
# 4. 批量删除大量小文件
# 当文件数量太多时,rm 命令会报错"参数列表过长",应该使用 find 命令
find /path/to/directory -type f -delete
# 或者使用 xargs
find /path/to/directory -type f | xargs rm -f
预防措施
- 日志轮转 :合理配置
logrotate,避免历史日志堆积海量小文件。 - 定期巡检:在监控系统添加 inode 使用率指标采集,设置 ≥80% 告警。
- 文件系统规划 :为存放海量小文件的分区单独划分,并适当增加 inode 数量(
mkfs.xfs -i size=256减小 inode 大小,从而提升 inode 总数;或在创建时指定-i maxpct)。但须明白 inode 数量越多,可用块空间越少,需权衡。 - 告警联动:当 inode 告警触发时,可通过自动化脚本快速找出目录并清理临时文件,或直接通知相关团队。
自动化脚本
待二期补充