档案整理空间不足怎么办?五步教你无损扩容与清理

第一步:精准定位占用空间最大的目录

在解决空间不足问题之前,首要任务是找到“吃掉”硬盘空间的罪魁祸首。不要盲目删除文件,使用以下命令可以快速按大小排序列出目录。

1. 查看整体磁盘使用情况

首先使用 df -h 命令查看挂载点的使用率,确认哪个分区已经爆满(Use% 接近 100%)。

df -h

输出结果中,关注 FilesystemUse% 列。假设 / 根目录或 /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,你会发现根目录的容量已经成功增加,空间不足问题彻底解决。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统