Linux系统管理(二十)——Linux root磁盘不足?一站式应急清理方案(亲测可用)

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系统,新手可直接复制执行,高效又安全。

相关推荐
A小辣椒20 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式