当前位置:首页>Linux>Linux 基础实战课 ⑦服务器快挂了,是磁盘满了吗?

Linux 基础实战课 ⑦服务器快挂了,是磁盘满了吗?

  • 2026-10-11 06:24:18
Linux 基础实战课 ⑦服务器快挂了,是磁盘满了吗?

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 -h /

只看根分区

df -h /data

只看 /data 挂载点

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 -sh /*

查看根目录下每个目录大小

du -a /var/log | sort -rh | head -10

找出 /var/log 里最大的 10 个文件

⚠️ 直接在 / 根目录跑 du -sh * 会比较慢,服务器文件多的时候可能要等十几秒甚至更长,别以为卡死了。

三、lsblk 和 fdisk:看磁盘硬件信息

df 和 du 看的是文件系统层面的空间,有时候你需要知道服务器上接了几块磁盘、每块多大——用 lsblk:

lsblk

列出所有磁盘和分区(树状结构)

lsblk -f

同时显示文件系统类型和挂载点

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 测试一下,没报错再重启,别直接重启。

五、实战:磁盘告警处理流程

把这篇学的串起来,遇到「磁盘快满了」告警,标准处理步骤是:

第一步:确认是哪个分区满了

df -h

看 Use%,找超过 80% 的分区

第二步:找到最大的目录

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,出问题了怎么找原因》。

💬 你遇到过磁盘打满的情况吗?最后查出来是什么原因?

评论区聊聊,说不定能帮到碰到同样问题的人

👍 点赞💬 留言🔄 转发给需要的朋友

有问题欢迎评论区留言,看到都会回复

最新文章

随机文章