档案整理空间不足怎么办?五步教你无损扩容与清理
第一步:精准定位占用空间最大的目录
在解决空间不足问题之前,首要任务是找到“吃掉”硬盘空间的罪魁祸首。不要盲目删除文件,使用以下命令可以快速按大小排序列出目录。
1. 查看整体磁盘使用情况
首先使用 df -h 命令查看挂载点的使用率,确认哪个分区已经爆满(Use% 接近 100%)。
df -h
输出结果中,关注 Filesystem 和 Use% 列。假设 / 根目录或 /var 分区显示已满,我们需要进入该目录进行下一步排查。
2. 深度扫描当前目录下的文件夹大小
进入怀疑占满空间的分区(例如 /),使用 du 命令结合排序工具,直接显示占用空间最大的前 10 个目录。这是最高效的排查方式。
du -h --max-depth=1 / | sort -hr | head -n 10
命令详解:
- du -h: 以人类可读的格式(KB, MB, GB)显示大小。
- --max-depth=1: 仅统计当前目录下一级的文件夹,避免递归太深导致刷屏。
- sort -hr: -h 表示针对人类可读数字排序,-r 表示倒序(大的在前面)。
- head -n 10: 只取前 10 行。
通过输出结果,你可以一眼看到是 /var、/home 还是 /opt 占用了空间。进入最大的目录,再次执行该命令,直到定位到具体的大文件。
第二步:清理系统日志与临时缓存
定位到目录后,通常发现是日志文件或缓存文件占用了空间。以下是清理这些文件的“安全姿势”。
1. 安全清空日志文件(不删除文件本身)
对于正在运行的系统服务(如 Nginx, MySQL),直接使用 rm 删除日志文件可能导致服务无法写入日志(因为 inode 句柄被占用)或磁盘空间不释放。正确的做法是截断文件。
假设 /var/log/nginx/access.log 有 10GB,执行以下命令清空内容:
echo > /var/log/nginx/access.log
或者使用 truncate 命令:
truncate -s 0 /var/log/nginx/access.log
注意: 这样操作后,文件大小变为 0,但文件 inode 保持不变,服务进程可以继续正常写入。
2. 清理 Systemd 日志
如果是 Systemd 管理的系统(如 CentOS 7+, Ubuntu 16+),/var/log/journal 可能会占用大量空间。可以使用 journalctl 命令限制其大小。
查看当前日志占用:
journalctl --disk-usage
仅保留最近 3 天的日志(清理旧日志):
journalctl --vacuum-time=3d
或者限制日志总大小为 500MB:
journalctl --vacuum-size=500M
3. 清理包管理器缓存
系统的软件更新缓存也会占用空间。根据你的发行版执行以下命令:
CentOS/RHEL:
yum clean all
Ubuntu/Debian:
apt-get clean
apt-get autoremove
第三步:解决“文件已删除但空间未释放”的幽灵文件
有时候你明明用 rm 删除了大文件,但 df -h 显示的空间并没有减少。这是因为该文件仍被某个进程占用(句柄未释放)。
1. 查找已删除但仍被占用的文件

使用 lsof 命令查找标记为 deleted 的文件:
lsof | grep deleted
输出结果中,重点关注 SIZE 列较大的行。例如:
java 1234 root 1u REG 8,1 10737418240 1234 /var/log/app.log (deleted)
这表明进程 ID 为 1234 的 Java 进程仍在占用一个已删除的 10GB 文件。
2. 重启进程释放空间
最直接的方法是重启该进程:
kill -9 1234
或者如果是服务
systemctl restart your-service-name
进程终止后,操作系统会自动释放该文件句柄对应的磁盘空间。
第四步:Docker 环境专项清理
如果档案整理系统运行在 Docker 容器中,Docker 的镜像、容器和卷是常见的空间占用源。
1. 查看 Docker 占用总览
docker system df
2. 一键清理无用数据
此命令会删除停止的容器、未被使用的网络、悬空的镜像和构建缓存。
docker system prune
如果你需要更彻底的清理(包括未被任何容器使用的镜像),添加 -a 参数:
docker system prune -a
警告: 使用 -a 参数前请确认,因为它会删除所有未被当前运行的容器使用的镜像,这可能导致重新启动容器时需要重新拉取镜像。
3. 手动清理 Volume(数据卷)
Docker 数据卷通常占用最大。谨慎清理不再使用的卷:
docker volume prune
第五步:LVM 逻辑卷无损扩容(终极方案)
如果清理完所有能删的文件,空间依然不足,就需要通过增加硬盘并扩容逻辑卷来解决。假设你的系统使用 LVM 管理(大多数 Linux 服务器默认配置),以下是扩容 / 根目录的完整步骤。
1. 确认当前 LVM 信息
查看当前卷组(VG)名称和剩余空间:
vgdisplay
查看当前逻辑卷(LV)路径:
df -h /
假设输出显示根目录挂载在 /dev/mapper/centos-root,卷组名为 centos。
2. 初始化新硬盘
将新硬盘(假设为 /dev/sdb)初始化为物理卷(PV):
pvcreate /dev/sdb
3. 将新物理卷扩展到卷组
将 /dev/sdb 加入到 centos 卷组中:
vgextend centos /dev/sdb
执行后,再次运行 vgdisplay,你会看到 Free 空间变大了。
4. 扩展逻辑卷
将卷组中的所有剩余空间都给根目录逻辑卷:
lvextend -l +100%FREE /dev/mapper/centos-root
5. 刷新文件系统大小
扩容逻辑卷后,还需要同步文件系统才能生效。根据文件系统类型(xfs 或 ext4)执行不同命令。
如果是 XFS 文件系统(CentOS 7 默认):
xfs_growfs /
如果是 EXT4 文件系统:
resize2fs /dev/mapper/centos-root
执行完毕后,再次运行 df -h,你会发现根目录的容量已经成功增加,空间不足问题彻底解决。