
Linux 基础实战课 ⑦
服务器快挂了,是磁盘满了吗?
Linux基础 实战课
Linux 基础实战课 · 第 7 篇
————————————————
💬 服务器半夜报警,日志系统写入失败,Nginx 也停了。我远程上去一看——根分区 100%,磁盘写满了。
这种故障我处理过不止一次。最常见的原因是日志文件没做轮转,悄悄涨了好几个月;还有一次是某个开发同学在测试环境直接往服务器上传了好几十 GB 的视频文件,忘记清了。
磁盘管理是 Linux 运维里绕不开的日常。这篇只讲最实用的三件事:怎么看磁盘还剩多少(df)、怎么找到谁占了最多空间(du)、以及挂载磁盘是怎么回事(mount)。
————————————————
一、df:查看磁盘整体空间
df 是「disk free」的缩写,用来看每个分区的总容量、已用、可用、挂载点。
最常用的就一条:
df -h | 以人类可读格式(KB/MB/GB)显示磁盘空间 |
输出大概长这样:
FilesystemSizeUsed Avail Use% Mounted on
/dev/sda150G43G7.0G86% /
tmpfs7.8G12M7.8G1% /dev/shm
/dev/sdb1200G18G182G9% /data
看这几列:Use% 是使用率,Mounted on 是挂载点。根分区 / 的使用率超过 85% 就该清理了,到 95% 就是高危警戒线。
⚠️ Use% 到了 100% 系统就开始各种报错——日志写不进去、服务起不来、甚至 SSH 都可能断。不要等到满了再处理。
其他几个常用选项:
df -i | 查看 inode 使用量(文件数量满了也会写不进去) |
💡 inode 满了和磁盘满了是两回事,症状一样但原因不同。如果 df -h 显示还有空间但就是写不了文件,试试 df -i 看 inode 是不是 100%。
二、du:找出谁占了最多空间
df 告诉你「磁盘快满了」,但没告诉你「谁干的」。du(disk usage)就是专门挖凶手的。
最常用的组合——找出当前目录下各个子目录的大小,从大到小排列:
du -sh * | sort -rh | head -20 | 找出最大的 20 个目录/文件 |
拆解一下这条命令的含义:
du -sh * ← 统计当前目录所有文件/子目录的大小,-s 是汇总,-h 是人类可读
sort -rh ← 按大小从大到小排序(-r 倒序,-h 识别 GB/MB/KB)
head -20 ← 只看前 20 行,不然屏幕刷太多
💡 这条命令是我每次处理磁盘告警的第一反应。先 cd 到根目录,跑一遍,找到哪个目录最大,然后进去再跑一次,一层一层缩小范围,通常三四层就能找到罪魁祸首。
其他常用 du 命令:
du -sh /var/log | 查看 /var/log 日志目录总大小 |
du -a /var/log | sort -rh | head -10 | 找出 /var/log 里最大的 10 个文件 |
⚠️ 直接在 / 根目录跑 du -sh * 会比较慢,服务器文件多的时候可能要等十几秒甚至更长,别以为卡死了。
三、lsblk 和 fdisk:看磁盘硬件信息
df 和 du 看的是文件系统层面的空间,有时候你需要知道服务器上接了几块磁盘、每块多大——用 lsblk:
fdisk -l | 查看磁盘分区详情(需要 root) |
💡 在 VDI 桌面云环境里部署存储的时候,我习惯先跑 lsblk 确认有几块盘,然后再看 df -h 确认哪些已经挂载了,哪些裸盘还没格式化。
四、mount 和 umount:挂载与卸载磁盘
Linux 的磁盘不像 Windows,插上 U 盘不会自动出现在桌面。你需要手动「挂载」——把磁盘挂到一个目录上,之后就能像访问普通目录一样访问它。
临时挂载(重启后消失):
mount /dev/sdb1 /mnt/data | 把 /dev/sdb1 挂到 /mnt/data 目录 |
mount -t ntfs /dev/sdb1 /mnt/usb | 挂载 NTFS 格式的盘(如 U 盘) |
卸载:
umount /mnt/data | 卸载 /mnt/data |
⚠️ umount 之前确保没有进程在用这个目录,不然会报 device is busy。可以用 lsof /mnt/data 查看谁在占用。
想让挂载永久生效(重启后自动挂载),需要写入 /etc/fstab:
blkid /dev/sdb1 | 先查出磁盘的 UUID |
然后用 vim 编辑 /etc/fstab,加一行:
UUID=xxx/dataext4defaults02
💡 /etc/fstab 写错了可能导致系统开机失败。写完之后先用 mount -a 测试一下,没报错再重启,别直接重启。
五、实战:磁盘告警处理流程
把这篇学的串起来,遇到「磁盘快满了」告警,标准处理步骤是:
第一步:确认是哪个分区满了
第二步:找到最大的目录
cd /&&du -sh * | sort -rh | head -20 | 从根目录开始找 |
第三步:进入最大目录,继续往里找
cd /var&&du -sh * | sort -rh | head -10 | 继续缩小范围 |
第四步:清理(谨慎操作)
ls -lh /var/log/nginx/ | 先 ls 看一眼再决定清不清 |
> /var/log/nginx/access.log | 清空日志文件(不删文件,只清空内容) |
⚠️ 不要直接 rm -rf 删日志目录!某些服务运行中持有文件句柄,删了文件磁盘空间不会立刻释放,而且服务会报错。应该用 > 清空文件内容,或者用 logrotate 做轮转。
六、磁盘命令速查表
想做什么 | 命令 |
看磁盘整体空间 | df -h |
看 inode 使用量 | df -i |
找最大目录(当前层) | du -sh * | sort -rh | head -20 |
查指定目录大小 | du -sh /var/log |
查所有磁盘和分区 | lsblk |
查磁盘文件系统类型 | lsblk -f |
临时挂载磁盘 | mount /dev/sdb1 /mnt/data |
卸载磁盘 | umount /mnt/data |
查磁盘 UUID | blkid /dev/sdb1 |
测试 fstab 配置 | mount -a |
清空日志文件(安全) | > /var/log/xxx.log |
总结
遇到磁盘问题,记住这三步:
① df -h —— 先看哪个分区满了
② du -sh * | sort -rh —— 再找是谁占的
③ 清理 or 挂新盘 —— 治标或治本
磁盘满了是运维里非常高频的告警,但只要流程熟了,处理起来不超过十分钟。下一课我们看日志——出问题了怎么看日志找原因。
————————————————
下篇预告:《Linux 基础实战课⑧|日志查看实战:tail / grep / journalctl,出问题了怎么找原因》。
💬 你遇到过磁盘打满的情况吗?最后查出来是什么原因?
评论区聊聊,说不定能帮到碰到同样问题的人
👍 点赞💬 留言🔄 转发给需要的朋友
有问题欢迎评论区留言,看到都会回复