Linux root磁盘不足?一站式应急清理方案(亲测可用)
作为Linux运维工程师,最头疼的场景之一莫过于:服务器突然告警"root磁盘使用率100%",随之而来的是服务卡顿、无法写入日志、甚至应用崩溃。其实root磁盘爆满,大多是缓存堆积、日志膨胀、临时文件残留导致的,无需慌,按本文步骤操作,既能快速释放空间,又能避免误删关键文件,新手也能轻松上手。
在开始清理前,建议先执行 df \-h 命令,确认root分区(挂载点为/)的占用情况,再执行 sudo du \-shx \-\-max\-depth=1 / 2\>/dev/null \| sort \-hr 定位占用空间最大的目录,做到有的放矢------毕竟盲目清理可能遗漏核心占用点,也可能误删重要文件。
一、应急清理(立刻释放空间,优先执行)
这一步的核心是"安全、快速",清理的都是系统可再生的缓存和临时文件,不会影响系统正常运行,新手可放心操作。
1. 清理yum缓存(最安全,首选操作)
yum作为Linux系统常用的包管理器,会自动缓存下载的rpm包、仓库元数据等文件,长期积累会占用大量空间,缓存文件默认存放在 /var/cache/yum/ 目录下,清理后不影响已安装软件,且下次使用yum时会自动重建缓存。
bash
# 基础清理(释放大部分缓存空间)
yum clean all
# 彻底清理缓存目录(进一步释放空间,可选)
rm -rf /var/cache/yum/
小贴士:清理后若需快速重建缓存,可执行 yum makecache,避免后续yum操作重新下载元数据耗时太久。
2. 清理系统日志(快速释放大空间)
系统日志(/var/log目录)是最容易"爆盘"的元凶之一,尤其是长期运行的服务器,日志文件可能达到几十G甚至上百G。以下两种方式结合使用,既能清理旧日志,又能限制日志大小,避免后续再次膨胀。
bash
# 方式1:清理压缩日志、历史日志(避免误删正在写入的日志)
rm -rf /var/log/*-???????? /var/log/*.gz /var/log/dmesg.old
# 方式2:删除所有日志(空间极度紧张时使用,谨慎!)
rm -rf /var/log/*
# 方式3:限制日志总大小(推荐,保留最近100M日志,自动删除旧日志)
journalctl --vacuum-size=100M
补充说明:journalctl \-\-vacuum\-size=100M 会自动保留最新的日志,删除最旧的归档日志,不会影响正在运行的日志服务,比直接删除/var/log/*更安全,还可根据需求调整大小(如200M、500M)。清理后可执行 journalctl \-\-disk\-usage 验证日志占用空间。
3. 清理临时文件(零风险,立竿见影)
系统临时目录(/tmp、/var/tmp)存放着应用运行时产生的临时文件,这些文件重启后会自动删除,但长期不清理会堆积大量垃圾,尤其当应用异常退出时,临时文件会残留并占用空间。
bash
# 清理/tmp临时文件
rm -rf /tmp/*
# 清理/var/tmp临时文件
rm -rf /var/tmp/*
# 可选:设置临时目录环境变量,避免后续yum安装时临时文件占满空间
export TMPDIR=/tmp
sudo -E yum install ... # 保留TMPDIR环境变量,防止安装失败
注意:清理前若有正在运行的应用依赖临时文件,可能会导致应用异常,建议先检查应用运行状态,非紧急情况可重启服务器后再清理(重启会自动清空临时目录)。
二、深度清理(释放更多空间,按需执行)
应急清理后,若磁盘空间仍紧张,可执行以下操作,清理无用依赖、工具缓存和大文件,进一步释放空间,适合长期运行的服务器。
1. 清理无用系统依赖包
系统安装软件时,会自动安装依赖包,当软件卸载后,这些依赖包会残留,长期积累会占用不少空间,yum autoremove可自动清理无用的依赖包,安全且高效。
bash
yum autoremove -y
说明:-y参数表示自动确认,无需手动输入y,适合批量操作或脚本执行,清理后会显示释放的空间大小。
2. 清理Python相关缓存(开发服务器必做)
若服务器用于Python开发或运行Python应用,pip、conda的缓存会占用大量空间,尤其是频繁安装、升级包的场景,清理缓存不会影响已安装的Python包。
bash
# 清理pip缓存(适用于所有pip环境)
pip cache purge
# 清理conda缓存(适用于Anaconda/Miniconda环境)
conda clean -a -y
# 彻底清理Anaconda无用包和缓存(进一步释放空间)
rm -rf /root/.cache/pip
rm -rf /root/.conda/pkgs
rm -rf /home/data/anaconda3/pkgs/*
小贴士:若不知道Anaconda安装路径,可执行 whereis anaconda3 查找,替换上述命令中的路径即可。
3. 清理Ascend旧版本及相关临时文件(AI服务器专属)
若服务器部署了Ascend(昇腾)相关环境,旧版本安装包和临时文件会占用大量空间,尤其是CANN toolkit旧版本,清理后不影响当前运行的Ascend环境。
bash
# 清理Ascend CANN旧版本(示例为8.5.0版本,根据实际旧版本修改)
rm -rf /usr/local/Ascend/cann-8.5.0
# 清理Ascend临时文件
rm -rf /tmp/selfgz*
# 清理Ascend日志缓存
rm -rf /var/log/ascend_seclog/*
4. 清理无用大文件(可选,谨慎操作)
若以上操作后空间仍不足,可查找并删除无用的大文件(如旧备份、安装包、日志碎片等),查找时建议精准定位目录,避免误删系统关键文件。
bash
# 查找/usr/local下大于100M的文件(可修改路径和大小阈值)
find /usr/local -type f -size +100M | xargs ls -lh
# 查找结果中,确认无用的文件(如旧安装包、备份文件),手动删除
# 示例:删除无用的大文件(替换为实际文件路径)
# rm -rf /usr/local/old_package.tar.gz
重要提醒:删除大文件前,务必确认文件用途,避免删除系统核心文件(如/lib、/bin目录下的文件)、数据库文件或业务关键文件,建议先备份再删除。若出现"rm删除后df显示空间未释放",大概率是文件被进程占用,可执行 lsof \+L1 查找已删除但被打开的文件,重启对应服务即可释放空间。
三、清理后验证与长期维护建议
1. 验证清理效果
清理完成后,执行以下命令,确认root磁盘空间已释放:
bash
df -h # 查看root分区使用率,确认已下降
journalctl --disk-usage # 验证日志占用空间(若执行过日志清理)
2. 长期维护建议(避免再次爆盘)
-
定期清理:设置定时任务(crontab),每周或每月自动执行应急清理命令(如yum clean all、清理临时文件、日志限制),无需手动操作。
-
日志管理:通过
/etc/systemd/journald\.conf配置日志最大占用空间(如SystemMaxUse=100M),重启journald服务生效,从源头限制日志膨胀。 -
缓存管理:Python开发环境中,定期清理pip、conda缓存;yum使用时,可配合
yum clean all避免缓存堆积。 -
定期检查:每月执行
du \-shx \-\-max\-depth=1 / 2\>/dev/null \| sort \-hr,排查异常占用目录,及时清理无用文件,防患于未然。
四、常见避坑提醒
-
禁止直接执行
rm \-rf /或rm \-rf /\*,会直接删除系统核心文件,导致服务器崩溃,无法恢复。 -
清理/var/log/*时,若服务器正在运行关键服务(如nginx、mysql),可能会导致日志写入失败,建议先重启对应服务,或使用journalctl命令清理,更安全。
-
删除大文件前,务必确认文件用途,尤其是/root、/usr、/var目录下的文件,避免误删业务数据或系统文件。
-
若清理后磁盘空间仍未释放,需检查是否存在inode耗尽(执行
df \-i查看IUse%),inode耗尽需删除大量小文件(如日志碎片)才能解决。
总结:root磁盘不足大多是"缓存+日志+临时文件"堆积导致的,按"应急清理→深度清理→长期维护"的步骤操作,既能快速解决当前问题,又能避免后续再次出现爆盘情况。本文所有命令均经过实际服务器测试,适配CentOS、RHEL等基于yum的Linux系统,新手可直接复制执行,高效又安全。