一、核心概念
1. 磁盘分区:将整块物理盘划分为多个逻辑分区,常见分区表:
-
MBR:传统,最大支持 2TB 磁盘、最多4个主分区,兼容老设备
-
GPT:新分区表,支持超大容量、更多分区,UEFI 启动标配
2. 文件系统:分区格式化后才能使用( ext4 、 xfs 、 tmpfs 等,CentOS7+ 默认 xfs )
3. 挂载:Linux 无盘符,必须把分区/磁盘挂载到目录才能访问
4. inode / block
-
block:数据块,真正存放文件内容
-
inode:索引节点,存放文件元信息(权限、属主、大小、时间、block指针),一个文件占用一个 inode
二、常用查看命令(必考)
- df 查看分区使用率、挂载信息
bash
人性化显示容量、使用率(日常最常用)
df -h
查看 inode 使用率(排查 inode 耗尽必用)
df -i
只展示本地磁盘,排除临时文件系统
df -hT
字段说明:
-
Filesystem :分区/设备名
-
Size/Used/Avail :总大小、已用、剩余
-
Use% :使用率
-
Mounted on :挂载目录
- du 查看文件/目录实际占用空间
bash
查看当前目录总大小
du -sh
递归查看目录下各文件/子目录大小
du -lh
只统计一级目录(不递归)
du -sh /*
df 与 du 区别(面试高频)
-
df :读取文件系统元数据,反映整体分区占用,包含已删除但句柄未释放的文件
-
du :遍历文件,统计现有文件真实大小
-
现象: df 占用远大于 du → 大概率存在 deleted 未释放文件
- 查看磁盘硬件、分区信息
bash
查看整块磁盘、分区列表(重点)
lsblk
传统查看分区、文件系统
fdisk -l
查看磁盘IO性能、读写状态
iostat -xd 1
设备命名规则:
-
/dev/sda :第一块SATA/SCSI磁盘
-
/dev/sda1 :第一块盘的第一个分区
-
/dev/vda :云服务器虚拟化磁盘(ECS 常见)
三、分区操作(fdisk / parted)
- fdisk(MBR 分区,最常用)
交互式分区工具,仅支持 MBR 分区表
bash
fdisk /dev/sda
交互常用指令:
-
m :帮助
-
n :新建分区
-
p :查看分区列表
-
d :删除分区
-
w :保存分区并退出(必须执行,否则不生效)
-
q :不保存退出
分区后需执行 partprobe 刷新分区表,避免重启生效。
- parted(GPT 大磁盘分区)
大于2TB 磁盘必须用 parted + GPT
bash
parted /dev/sda
四、格式化 & 文件系统
分区完成后,必须格式化才能使用
bash
格式化为 ext4
mkfs.ext4 /dev/sda1
格式化为 xfs(CentOS7/8 默认)
mkfs.xfs /dev/sda2
查看分区文件系统类型
blkid
五、挂载 & 卸载(核心操作)
- 临时挂载(重启失效)
bash
把 /dev/sda1 挂载到 /data 目录
mount /dev/sda1 /data
挂载 ISO 镜像
mount -o loop xxx.iso /mnt
- 卸载
bash
卸载挂载点(推荐写目录)
umount /data
设备忙无法卸载:先查找占用进程
lsof | grep /data
fuser -m /data
- 永久挂载(/etc/fstab,面试必考)
写入 /etc/fstab ,开机自动挂载
格式
plaintext
设备名 挂载目录 文件系统 挂载参数 自检优先级
示例
plaintext
/dev/sda1 /data xfs defaults 0 0
字段解释:
1. 设备名: /dev/sda1 或 UUID (推荐UUID,盘符变化不影响)
2. 挂载目录:必须提前存在
3. 文件系统: xfs / ext4
4. 挂载参数:
-
defaults :默认参数(rw,suid,dev,exec,auto,nouser,async)
-
ro :只读挂载
-
noexec :禁止执行二进制文件(安全加固)
5. 第5列:dump 备份开关(0=不备份)
6. 第6列:开机磁盘自检优先级(0=不自检)
生效命令(修改 fstab 后必执行)
bash
重载挂载,不重启
mount -a
风险提醒: fstab 写错会导致服务器开机失败,改完务必先 mount -a 校验。
- 通过 UUID 挂载(生产推荐)
1. 查看分区UUID
bash
blkid
2. 写入 fstab
plaintext
UUID=“xxxx-xxxx” /data xfs defaults 0 0
六、两大经典磁盘故障(面试/排错重中之重)
故障1:df 显示磁盘 100% 满,但 du 查不到大文件
根因
文件被 rm 删除,但进程仍持有文件句柄,空间不释放。
排查步骤
1. df -h 确认分区满
2. 查找已删除未释放文件
bash
lsof | grep deleted
3. 找到对应 PID/进程
4. 处理方案:
-
临时应急(不重启): > 文件名 清空文件
-
根治:重启对应服务/进程,释放句柄
故障2:磁盘空间充足,创建文件提示 No space left on device
根因
inode 耗尽。分区 block 还有空间,但所有 inode 已被占用(大量小文件/碎片文件导致)。
排查&解决
1. 查看 inode 使用率
bash
df -i
2. 定位海量小文件目录
bash
find /data -type f | wc -l
3. 清理无用小文件、临时文件、日志碎片。
七、LVM 逻辑卷(云服务器/生产常用,扩容必考)
- LVM 三层结构
-
PV 物理卷:将普通磁盘/分区转为 LVM 物理卷
-
VG 卷组:多个 PV 合并成一个大卷组
-
LV 逻辑卷:从 VG 中划分空间,最终挂载使用
- 常用命令
bash
查看 PV、VG、LV 信息
pvs
vgs
lvs
1. 创建 PV
pvcreate /dev/sdb1
2. 创建 VG
vgcreate vg01 /dev/sdb1
3. 创建 LV
lvcreate -L 20G -n lv01 vg01
4. 格式化 + 挂载
mkfs.xfs /dev/vg01/lv01
mount /dev/vg01/lv01 /data
- 在线扩容(面试最高频,xfs/ext4 区别)
场景:给 /data 所在 LV 扩容 10G
1. 扩容逻辑卷空间
bash
lvextend -L +10G /dev/vg01/lv01
(扩容卷组用vgextend)
2. 刷新文件系统(关键,不同文件系统命令不同)
- XFS(CentOS7+ 默认,只支持扩容,不支持缩容)
xfs_growfs /data
- EXT4
resize2fs /dev/vg01/lv01
八、磁盘IO 排查(业务卡顿常用)
# 查看磁盘整体IO、繁忙度 %util
iostat -xd 1
# 定位高IO进程
iotop
- %util 接近 100%:磁盘设备跑满,IO 瓶颈
- await 过高:磁盘读写延迟大
九、面试必背简答题(直接背诵)
1. df 和 du 区别?
df 统计文件系统整体占用,包含已删除未释放文件;du 遍历现有文件统计真实大小。
2. 磁盘空间充足但无法新建文件,原因?
inode 耗尽,大量小文件占用所有索引节点,执行 df -i 查看,清理小文件解决。
3. rm 删除文件后空间不释放原因?
文件被进程占用句柄,用 lsof | grep deleted 定位,重启进程释放。
4. fstab 作用?修改后如何生效?写错有什么风险?
用于开机自动挂载分区;执行 mount -a 生效;配置错误会导致服务器无法开机。
5. XFS 和 EXT4 扩容命令区别?
XFS 使用 xfs_growfs 挂载点 ;EXT4 使用 resize2fs 设备名 ;XFS 不支持在线缩容。
6. MBR 和 GPT 分区表区别?
MBR 最大2TB、最多4个主分区;GPT 支持大容量磁盘、分区数量更多,安全性更高。
十、高频命令速记(手写/实操)
df -h # 查看磁盘使用率
df -i # 查看inode
du -sh # 目录大小
lsblk # 磁盘分区概览
mount / umount # 挂载/卸载
blkid # 查看UUID、文件系统
lsof | grep deleted # 查删而未释文件
iostat / iotop # IO排查
pvs/vgs/lvs # LVM查看
lvextend # LVM扩容
xfs_growfs # xfs刷新扩容
关联文档 -故障排查服务器 IO 过高排查流程 — IO 排查
- ../../storage/Ceph 分布式存储 — 分布式存储