操作流程

du -sh /*                         #查看目录的空间占用
cd /var/log                       #进入对应目录
du -sh *                          #查看进入的目录中的空间占用 
echo > lordoc.com-access_log      #找到了大的日志文件写入空字符
#全盘查找所有大于 1GB 的普通文件
find / -type f -size +1G 2>/dev/null  

#找出根目录下占用磁盘最大的前 10 个一级目录,从大到小排序
sudo du -sh /* 2>/dev/null | sort -rh | head -n 10

df命令(disk free的缩写)
文件系统层面统计
站在**文件系统分区**视角,看整块盘还有多少空间。

参数 说明 描述
-a, --all 显示所有文件系统 包括容量为0的文件系统(如tmpfs)
-h, --human-readable 以人类可读格式显示 使用KB、MB、GB等单位自动转换
-H, --si 以1000为单位显示 与-h类似,但使用1000进制(而非1024)
-k, --block-size=1K 以1KB为单位显示 强制以1024字节为单位
-m, --block-size=1M 以1MB为单位显示 强制以1048576字节为单位
-P, --portability 使用POSIX输出格式 保证输出在不同系统间兼容
-l, --local 仅显示本地文件系统 排除网络文件系统(如NFS)
-i, --inodes 显示inode信息 显示inode使用情况而非磁盘空间
-T, --print-type 显示文件系统类型 添加文件系统类型列
-t type, --type=type 仅显示指定类型的文件系统 例如:-t ext4 仅显示ext4文件系统
-x type, --exclude-type=type 排除指定类型的文件系统 例如:-x tmpfs 排除tmpfs文件系统
--total 汇总所有文件系统 在末尾添加一行总计信息
-B size, --block-size=size 指定块大小 例如:-B 1M 表示以1MB为单位
-v, --verbose 显示详细信息 显示每个文件系统的详细挂载信息
--help 显示帮助信息 显示命令的使用说明
--version 显示版本信息 显示df命令的版本号
-j, --block-size=1G 以1GB为单位显示 强制以1073741824字节为单位
--output[=field,...] 自定义输出字段 可选字段:source, fstype, size, used, avail, pcent, target

先看整体使用率:df -h,确认哪个挂载点满了;

再用 df -i 看 inode 是否耗尽(inode 满了会出现“空间没满但写不进文件”)。

du命令(disk usage的缩写)
实际占用磁盘
站在**文件 & 目录**视角,看哪些文件吃掉磁盘。

参数 全称 作用
-s --summarize 只输出总计,不递归打印子文件,最常用。不加 – s 会把每一个子目录全部打印出来,刷屏。
-h --human-readable 人性化单位 K/M/G,人可读,必用。
-a --all 不仅统计目录,把所有普通文件也一并输出。
-c --total 在最后增加一行全部总和。
-d N --max-depth=N 限制递归深度,
-d 1只看一级子目录,等价于
du -sh ./*
-x --one-file-system 只统计当前文件系统,跳过挂载点(非常关键!避免统计 docker overlay、tmpfs、snap loop 设备)
--exclude=PATTERN 排除匹配的文件 / 目录,例如
--exclude="*.log"

云盘满了不用慌,按“‌先诊断、再清理、最后扩容‌”的顺序处理就行。‌‌

🔍 第一步:定位占用源
先看整体使用率:df -h,确认哪个挂载点满了;再用 df -i 看 inode 是否耗尽(inode 满了会出现“空间没满但写不进文件”)。
找出最大的目录:sudo du -sh /* | sort -rh,逐级下钻定位大文件。
重点排查这几个“惯犯”:
‌日志文件‌(/var/log):最常见元凶,比如 Nginx access.log、MySQL slow log、systemd journal。
‌Docker 残留‌(/var/lib/docker):镜像、停止的容器、构建缓存会占大量空间,用 docker system df 查看。
‌已删除但未释放的文件‌:df 显示满但 du 查不出大目录,说明有进程占用已删除文件,用 lsof +L1 | grep deleted 找出,重启对应进程即可释放。‌‌
🧹 第二步:安全清理
‌日志‌:systemd journal 用 journalctl –vacuum-size=200M 限制大小;大日志文件用 > /var/log/messages 清空(比 rm 安全,因为进程可能还在写)。
‌软件包缓存‌:yum clean all(CentOS)或 apt-get clean(Ubuntu),往往能释放几百 MB 到几 GB。
‌Docker‌:先执行 docker system prune -a(清理无用镜像和容器);‌不要加 –volumes 参数‌,那会删掉数据卷里的业务数据。
‌临时文件‌:/tmp 下超过 7 天未访问的文件可以清掉,但注意别删正在使用的文件。‌‌
📈 第三步:扩容云盘(治本)
如果清理完还是不够,直接扩容,‌注意控制台操作完并不等于扩容结束‌:

‌先在控制台扩容‌:ECS 控制台 → 块存储 → 云盘 → 目标云盘 → 扩容,选择新容量并支付。‌强烈建议先创建快照‌,避免操作失误导致数据丢失。
‌再到系统里激活新空间‌(这步最容易漏):
查看分区:lsblk,确认磁盘容量已变大但分区没变。
扩展分区:growpart /dev/vda 1(注意是“磁盘名 分区号”,不是 /dev/vda1)。
扩展文件系统:ext4 用 resize2fs /dev/vda1;XFS 用 xfs_growfs /(XFS 后面跟挂载点,不是设备名)。
验证:df -h 看到容量变大了就完成了。‌‌
⚠️ 长期预防
配置 ‌logrotate‌ 自动轮转日志,保留最近 7 天并压缩。
在云监控里设置磁盘使用率报警,建议 ‌75% 提醒、85% 紧急‌,别等到满了再处理。
静态资源和归档日志可以迁移到 ‌OSS‌,不占系统盘空间。‌‌
扩容时如果遇到报错,比如 growpart: command not found,先装工具:CentOS 执行 yum install -y cloud-utils-growpart,Ubuntu 执行 apt-get install -y cloud-guest-utils。‌‌

作者 铁血 汉子 6 天前
2026/09/11/10:01:00am 2026/9/5/1:49:39
0 30