Linux:这啥命令?这台服务器我说了算-磁盘空间——“硬盘明明很大,怎么又提示没地方了?”

举报
yd_240046519 发表于 2026/11/05 10:20:14 2026/11/05
【摘要】 第十章:磁盘空间——“硬盘明明很大,怎么又提示没地方了?”昨天服务器还好好的,今天突然弹出:No space left on device你一看硬盘:几百 GB 啊!怎么说满就满?别急着删文件。Linux 的“没地方了”可能是容量用完,也可能是inode(文件索引节点)耗尽,甚至文件删了,空间却还没还回来。这一章,我们当一回磁盘侦探。以下命令以 Ubuntu 等常见 Linux 系统为例。...

第十章:磁盘空间——“硬盘明明很大,怎么又提示没地方了?”

昨天服务器还好好的,今天突然弹出:

No space left on device

你一看硬盘:几百 GB 啊!怎么说满就满?

别急着删文件。Linux 的“没地方了”可能是容量用完,也可能是inode(文件索引节点)耗尽,甚至文件删了,空间却还没还回来。

这一章,我们当一回磁盘侦探。

以下命令以 Ubuntu 等常见 Linux 系统为例。排查命令可放心练习;涉及删除、清理时,先确认目标路径。


1. df:先看硬盘到底满没满

df -h

-h 会把容量显示成 GB、MB 等易读单位。输出类似:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        50G   46G  1.5G  97% /

重点看三列:

  • Avail:还剩多少可用空间
  • Use%:使用率
  • Mounted on:挂载到哪个目录

只看根分区:

df -h /

注意:df 看的是文件系统的整体使用情况,不是“某个目录有多大”。


2. du:到底谁吃了我的空间?

df 告诉你“房子快塞满了”,du 负责揪出“谁把杂物堆到了天花板”。

查看当前目录总大小:

du -sh .

查看当前目录下各项大小:

du -sh ./*

想查 /var 哪个子目录最胖:

sudo du -xhd1 /var 2>/dev/null | sort -h

这里:

  • -h:人类可读的大小
  • -d1:只统计一层子目录
  • -x:不跨越其他文件系统
  • sort -h:按大小排序

/var/log、/var/cache、应用数据目录经常值得关注,但大不等于可以删。


3. lsblk:盘在哪儿、挂在哪儿?

lsblk -f

能看到磁盘、分区、文件系统类型和挂载点。

再看根分区的文件系统类型:

df -T /

你可能会看到 ext4、xfs 等。别把“磁盘设备”“分区”“挂载目录”混成一锅粥:一块盘可以有多个分区,一个文件系统可以挂载在某个目录下。

别看到新磁盘就手痒执行 mkfs——格式化可不是“刷新一下”,数据可能直接毕业。


4. 找出大文件:谁才是真正的饭桶?

在自己的家目录里找超过 100 MB 的普通文件:

find "$HOME" -type f -size +100M

查某目录最占空间的前十项:

du -ah ~/Downloads 2>/dev/null | sort -h | tail -n 10

其中 -a 会把文件也列出来。

排查日志目录里的大文件:

sudo find /var/log -type f -size +100M

只找,不删。 日志可能是故障现场的唯一目击证人,先看内容和用途再处理。


5. 明明还有 GB,却说没空间?

除了数据块,文件系统还需要 inode 来记录文件信息。海量小文件可能让 inode 先耗尽。

df -i

关注 IUse%;如果接近 100%,就要怀疑是不是某个目录制造了成千上万个小文件。

排查时可以从已知应用目录入手,例如:

find ~/ -type f | wc -l

这只是统计家目录中的文件数,不代表它就是元凶;大型目录还可能扫描得很慢。

一句话:容量是仓库面积,inode 像货物标签;有空地没标签,也放不进新货。


6. 文件删了,空间怎么没回来?

这是很经典的 Linux 悬案。

某个进程正在写日志,你把日志文件删了;目录里看不到它,但进程还握着文件句柄。此时磁盘空间可能仍被占用。

安装 lsof(若尚未安装):

sudo apt install lsof

查找已删除、但仍被进程打开的文件:

sudo lsof +L1

看清进程、文件大小和业务影响后,优先按服务自身的日志轮转方式处理;必要时安排安全重启相关服务,让文件句柄释放。

不要为了省几个 GB,就在生产机器上随手杀进程。服务器不是俄罗斯方块,不能乱消行。


7. 安全清理:先止血,别把病人也清了

Ubuntu 上可以先查看包缓存:

sudo du -sh /var/cache/apt/archives

清理已下载的软件包缓存:

sudo apt clean

查看 systemd 日志占用:

journalctl --disk-usage

如果确认日志保留策略允许,可以清理已归档的旧日志,例如:

sudo journalctl --vacuum-time=7d

这不保证立刻腾出指定容量,也不会把所有正在写入的日志清掉。

绝对不要为腾空间直接执行:

# 危险示例,请勿执行
sudo rm -rf /var/log/*

日志、数据库、上传文件、容器数据各有自己的管理方式。尤其不要不明所以地删除 /var/lib 下的数据。


8. 实战:自己制造并找出“空间小偷”

我们只在家目录做实验,创建约 20 MB 文件,不碰系统分区配置。

① 建实验目录:

mkdir -p ~/linux-disk-lab
cd ~/linux-disk-lab

② 制造一个大文件:

dd if=/dev/zero of=test.img bs=1M count=20 status=progress

③ 看文件与目录大小:

ls -lh test.img
du -sh .
df -h .

ls 看文件的逻辑大小,du 看占用空间;df 看整个文件系统。它们不是同一把尺。

④ 找到“大户”:

find . -type f -size +10M

⑤ 再造一些小文件:

for i in $(seq 1 20); do : > "file-$i.txt"; done
find . -type f | wc -l
df -i .

⑥ 清理自己的实验目录:

cd ~
rm -ri ~/linux-disk-lab

-i 会询问确认,留点后悔的机会。确保目录中没有自己想保留的东西。


9. 排障口诀

以后遇到磁盘报警,按这个顺序:

1. df -h:哪个文件系统满了?
2. df -i:是容量还是 inode?
3. lsblk -f:盘和挂载关系对吗?
4. du / find:谁占了空间?
5. lsof +L1:是不是删了还被占着?
6. 核对用途、备份与保留策略
7. 清理后再次 df -h 验证

再送一句:先定位,再清理;先确认,再回车。


本章速查

df -h /
df -i /
lsblk -f
df -T /

du -sh .
sudo du -xhd1 /var 2>/dev/null | sort -h
find "$HOME" -type f -size +100M

sudo lsof +L1
sudo apt clean
journalctl --disk-usage

下一章:

《第十一章:内存与性能——“CPU 没摸鱼,服务器怎么还是卡成 PPT?”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。