百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

当 Linux 根分区 (/) 已满时如何释放空间?

nanshan 2025-05-14 15:20 20 浏览 0 评论

根分区(/)是Linux文件系统的核心,包含操作系统核心文件、配置文件、日志文件、缓存和用户数据等。当根分区满载时,系统可能出现无法写入新文件、应用程序崩溃甚至无法启动的情况。常见原因包括:

  • 「日志文件过大」:如/var/log中的系统日志。
  • 「缓存文件堆积」:如包管理器的缓存或浏览器缓存。
  • 「临时文件未清理」:如/tmp目录中的遗留文件。
  • 「用户误操作」:将大量数据存储在根分区。
  • 「软件安装不当」:某些软件生成大量数据占用根分区。

了解这些原因后,我们将通过系统化的方法定位问题并释放空间。

确认根分区已满

在采取行动之前,需要确认根分区是否真的已满,以及哪些文件或目录占用了大量空间。以下是诊断步骤和相关命令。

1. 检查磁盘使用情况

使用df命令查看磁盘使用情况,确认根分区是否已满:

df -h

  • 「解释」df -h以人类可读的格式(如GB、MB)显示磁盘使用情况。找到挂载点为/的行,检查Use%列。如果接近100%,根分区确实已满。

2. 定位占用空间的目录

使用du命令分析根分区中哪些目录占用空间最多:

sudo du -h / | grep '[0-9]G'

「解释」du -h /递归统计根分区下所有目录的大小,grep '[0-9]G'筛选出占用GB级空间的目录。您也可以使用以下命令更精确地定位大文件: sudo du -ah / | sort -rh | head -n 20

  • 「解释」du -ah列出所有文件和目录的大小,sort -rh按大小倒序排序,head -n 20显示占用空间最大的前20个文件或目录。

3. 查找大文件

使用find命令快速定位大文件:

sudo find / -type f -size +1G

  • 「解释」find /在根分区搜索,-type f限定为普通文件,-size +1G查找大于1GB的文件。您可以根据需要调整大小阈值(如+100M)。

释放空间

定位问题后,接下来是释放根分区空间的实际操作。以下是多种方法,涵盖日志清理、缓存删除、临时文件处理等。

1. 清理系统日志

/var/log目录中的日志文件是根分区满载的常见原因。以下是清理步骤:

检查日志文件大小

ls -lh /var/log

  • 「解释」ls -lh列出/var/log中文件的大小,-h使其以人类可读格式显示。

清理特定日志

syslogmessages为例,清理旧日志:

sudo truncate -s 0 /var/log/syslog

sudo truncate -s 0 /var/log/messages

  • 「解释」truncate -s 0将文件内容清空但保留文件本身,避免破坏日志系统。

压缩和归档旧日志

如果需要保留日志,可以压缩并归档:

sudo find /var/log -name "*.log" -exec gzip {} \;

  • 「解释」find查找所有.log文件,gzip对其进行压缩,生成.gz文件以节省空间。

配置日志轮转

为防止日志再次失控,配置logrotate进行自动轮转:

sudo nano /etc/logrotate.conf

在配置文件中调整参数,例如:

/var/log/syslog {

    daily

    rotate 7

    compress

    missingok

}

  • 「解释」daily每天轮转,rotate 7保留7天的日志,compress压缩旧日志,missingok忽略丢失的日志文件。

2. 清理包管理器缓存

在基于Debian的系统(如Ubuntu)中,APT缓存可能占用大量空间。以下是清理方法:

查看缓存大小

sudo du -sh /var/cache/apt

清理无用包 sudo apt-get clean

sudo apt-get autoclean

sudo apt-get autoremove

  • 「解释」apt-get clean:清除所有下载的包文件。 apt-get autoclean:清除已过期的包文件。 apt-get autoremove:删除不再需要的依赖包。

对于基于Red Hat的系统(如CentOS),使用yumdnf

sudo yum clean all

sudo dnf clean all

  • 「解释」clean all清除缓存的包和元数据。

3. 清理临时文件

/tmp目录中的临时文件可能累积并占用空间。清理方法如下:

sudo rm -rf /tmp/*

  • 「解释」rm -rf递归删除/tmp中的所有文件。注意:确保没有正在使用的临时文件。

为防止临时文件再次堆积,可以设置自动清理:

sudo systemctl enable tmp.mount

sudo systemctl start tmp.mount

  • 「解释」:将/tmp挂载为tmpfs,系统重启时自动清空。

4. 删除旧内核版本

旧内核映像可能占用/boot目录,导致根分区间接受限。查看已安装内核:

dpkg --list | grep linux-image

删除旧内核:

sudo apt-get purge linux-image-x.x.x-x

  • 「解释」purge删除指定内核版本及其配置文件。确保保留当前使用的内核(通过uname -r查看)。

5. 清理用户缓存

用户缓存文件(如浏览器缓存)可能存储在根分区。查找用户缓存:

sudo du -sh /home/*/.cache

清理缓存:

sudo find /home -type d -name ".cache" -exec rm -rf {}/* \;

  • 「解释」find定位所有用户的.cache目录,rm -rf清空其内容。

6. 查找并删除无用的大文件

如果通过find发现无用的大文件,可以直接删除:

sudo rm /path/to/large/file

  • 「解释」:确保文件不再需要后再删除,避免误删系统关键文件。

7. 移动数据到其他分区

如果根分区存储了大量用户数据(如/var/www中的网站文件),可以将其移动到其他分区:

sudo mv /var/www /new_partition/www

sudo ln -s /new_partition/www /var/www

  • 「解释」mv移动数据,ln -s创建符号链接以保持路径兼容性。

避免根分区再次满载

释放空间只是治标,预防才是治本。以下是长期维护的建议:

1. 定期监控磁盘使用

设置脚本定期检查磁盘使用情况:

#!/bin/bash

df -h / | grep -v Filesystem | awk '{print $5}' | cut -d'%' -f1 | while read usage; do

    if [ $usage -gt 90 ]; then

        echo "警告:根分区使用率超过90%!"

        mail -s "磁盘空间警告" admin@example.com <<< "根分区使用率:${usage}%"

    fi

done

保存为check_disk.sh,设置定时任务:

sudo crontab -e

添加:

0 0 * * * /bin/bash /path/to/check_disk.sh

  • 「解释」:每天凌晨运行脚本,检查根分区使用率,超过90%时发送邮件警告。

2. 合理分区规划

在安装Linux时,合理规划分区。例如,将/var/home/tmp分配到独立分区,防止它们影响根分区。

3. 使用LVM扩展空间

如果使用逻辑卷管理器(LVM),可以动态扩展根分区:

sudo lvextend -L +10G /dev/mapper/vg-root

sudo resize2fs /dev/mapper/vg-root

  • 「解释」lvextend扩展逻辑卷,resize2fs调整文件系统大小。

4. 启用磁盘配额

为用户设置磁盘配额,限制其在根分区的存储:

sudo apt-get install quota

sudo quotacheck -avug

sudo quotaon -av

sudo edquota username

  • 「解释」quota工具限制用户磁盘使用量,防止滥用。

常见问题

1. 误删文件怎么办?

如果误删了关键文件,立即停止写入操作,使用testdiskphotorec尝试恢复:

sudo apt-get install testdisk

sudo testdisk /dev/sdX

2. 清理时系统卡顿怎么办?

如果系统因空间不足而响应缓慢,尝试进入单用户模式清理:

sudo systemctl rescue

3. 如何避免破坏系统?

  • 始终备份重要数据。
  • 不要随意删除/bin/etc/lib等目录中的文件。
  • 使用sudo时仔细检查命令。

相关推荐

基于 Linux 快速搭建企业级 DNS 服务器(Bind9 ...

一、引言在大型企业网络或自建系统中,搭建一套高可用、自控的DNS解析服务器至关重要。本文将带你基于Linux环境,从零搭建企业级DNS服务平台,采用Bind9实战配置,确保解析稳定、安...

Linux无法解析域名的解决办法(linux无法解析域名的解决办法有哪些)

如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。  此时,需要手动修改配置文件:  /etc/resolv.conf  将域名解析服务器手动添加到配置文件中  该文件是DNS域名解...

在centos7 创建基于域名的虚拟主机nginx服务器

直接用ip地址访问首先是不安全,其次不太容易记住,如果你的服务器上的项目有很多个,你创建多个基于Ip的虚拟主机,很容易导致公网ip冲突或乱用的情况。这时候我们就可以选择基于域名的虚拟主机。第一步、安装...

Linux之DNS服务(linux dnsserver)

一、学习路线如下二、DNS介绍1.域名的概念域名由特定的格式组成,用来表示互联网中某一台计算机或者计算机组的名称,能够使人更方便的访问互联网,而不用记住能够被机器直接读取的IP地址。2.DNS(dom...

Linux环境下DNS服务器配置图文详细教程

测试环境为vmware虚拟机下,linux系统为RedHatEnterpriseLinuxServer6.0(Santiago),内核版本Linux2.6.32-71.el6.i686...

构建基于 Linux 的高性能 DNS 服务器

在现代网络架构中,DNS(域名解析)是访问互联网的关键环节。搭建一个高性能、低延迟、可缓存加速的私有DNS服务器,不仅可以提升访问速度,还能增强网络隐私和安全性。本文将基于Linux系统,详细...

从运维的角度带你初识neo4j图形数据库的安装及配置

前言随着公司业务架构的改变,以前我部署环境的时候,一般只是部署Mysql,jdk,tomcat即可,现在还要部署一些nosql,如redis,neo4j,在之前从来没了解过,随着学习的深入而做了一些笔...

[超全整理] Java 程序员必备的 100 条 Linux 命令大全

一、基础操作(10条)#1.ls-查看目录内容ls-l#长格式显示文件和目录ls-a#显示隐藏文件ls-lh#带单位显示文件大小#2.cd-切换目录...

软件测试|一文教你轻松搭建docker环境

前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Do...

docker基础知识/尚硅谷docker学习笔记

最近看了好多docker的资料,找了一些尚硅谷docker的教学视频,大概总结了一下前前后后的学习笔记。分享给大家。安装Docker的基本组成镜像Docker镜像(Image)就是一个只读的模板。镜...

前端_react项目从windows部署到centos

前言:从工程角度来讲,本地开发完就要把项目部署到生产环境,此过程的快慢也直接影响着整体的效率。所以也有很多人做持续集成的工作,例如:CI/CD/一键部署。但对于个人开发者而言,如果能有工具支撑是最好的...

Springboot项目使用docker部署(docker中运行springboot项目)

环境:SpringBoot2.2.10.RELEASE+Docker+Centos7+JDK8安装配置Dockeryum包更新到最新yumupdate卸载旧版本dockeryumre...

Spring Boot 3.x + Redis 7.x,轻松掌握Redisson分布式锁实战技巧

大家好,我是袁庭新。在分布式环境中,确保数据的一致性和正确性是至关重要的。对于需要高性能、高并发和分布式数据存储的应用程序来说,Redisson是一个很好的选择。同时,Redisson提供的分布式锁功...

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

新手快速入门Docker,轻松掌握Docker安装与使用

安装使用官方安装脚本自动安装curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun手动安装CentOS7(使用yum进...

取消回复欢迎 发表评论: