1.排查是哪些大文件占用该系统根空间

find / -xdev -size +1G -exec ls -l {} \;
find / -type f -size +1G -exec du -h {} \; # 选其一即可
# 命令作用是:查询根目录(/)下超过1G大小的文件

2.解决Linux系统删除文件后空间并没有释放的问题

一、现象描述

操作系统:CentOS 6.8 x64   使用 df -h 命令,看见 / 根目录下磁盘空间已满(100%),于是手动清理大日志文件。

[root@local ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-LogVol00 59G 59G 0 100% /
/dev/sda1 190M 13M 168M 8% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm

  

通过 du -sh 命令,找到占用大量空间的日志文件,于是使用 rm -rf 删除了它。

[root@local ~]# cd /var/nginx/logs/
[root@local ~]# rm -rf t-access.log t-error.log

 然后 查看磁盘空间的使用情况,发现 / (根目录)的空间并没有发生变化。但是可以看到 Used 发生了变化。

[root@local ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-LogVol00 59G 56G 0 100% /
/dev/sda1 190M 13M 168M 8% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm

这是怎么回事呢?

二、原因 未释放磁盘空间的原因:   在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink),然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是nginx的访问日志文件,在删除的时候该文件正在被使用。

三、解决办法   首先获得一个已经被删除的可是仍然被应用程序占用的文件列表。操作如下:

[root@local ~]# lsof |grep deleted
nginx 4399 root 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted)
nginx 4399 root 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
nginx 4401 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted)
nginx 4401 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
nginx 4402 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted)
nginx 4402 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
nginx 4403 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted)
nginx 4403 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
nginx 4404 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted)
nginx 4404 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)

  

 从输出的结果可以看到 /var/nginx/logs/t-access.log 和 t-error.log 还在被使用中,所以导致未释放空间。 那么如何让进程释放呢? 方法1:直接 kill 掉相应的进程,或者停掉使用这个文件的应用,让操作系统自己主动回收磁盘空间。   由于还有其他项目正在使用该应用(nginx服务),所以不能停掉nginx服务,于是使用 kill 命令删除相应的进程。

[root@local ~]# kill -9 4399
[root@local ~]# kill -9 4401
[root@local ~]# kill -9 4402
[root@local ~]# kill -9 4403
[root@local ~]# kill -9 4404

再次,查看磁盘空间的使用情况,发现空间已经被回收了。

[root@local ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-LogVol00 59G 56G 0 95% /
/dev/sda1 190M 13M 168M 8% /boot
tmpfs 2.0G 0 2.0G 0% /dev/shm

方法2:以后清理正在被读写的大日志文件时,直接使用 echo "" > xxx.log 命令,即直接将文件置空,并不影响服务的使用,文件大小也被控制下来,磁盘空间也释放了。

说明:   当Linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。   kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件。这是一项高级技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题。

四、删除原理   一般来说,不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程在使用这个文件,例如输出日志文件,要了解这个问题,就需要知道Linux下文件的存储机制和存储结构。   一个文件在文件系统中由两个部分构成:数据和指针。指针位于文件系统的meta-data中,数据被删除后,指针被清除,而数部分还是存储在磁盘中,只不过数据对应的指针被清除后,文件数据部分占用的空间就可以被覆盖了。之所以出现删除大文件后,空间还没有释放,就是因为有进程一直在使用这个文件的指针,日志文件的服务还在运行,导致虽然删除了日志大文件,但文件对应的指针部分由于被进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统就认为文件并未被删除,所以使用 df 命令查看还是 100%。

centos 释放磁盘空间的更多相关文章

  1. Mysql InnoDB彻底释放磁盘空间

    Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果需要彻底释放磁盘空间,则需要先导出数据,然后删除数据文件,最后导入数据. ...

  2. [记录]一则清理MySQL大表以释放磁盘空间的案例

    一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ...

  3. MySQL删除数据几种情况以及是否释放磁盘空间【转】

    MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...

  4. mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。

    下面我们一起来看看关于mongodb拷贝数据库copyDatabase().实现释放磁盘空间的方法,希望文章对各位同学会有所帮助. db.copyDatabase("from",& ...

  5. 利用lsof命令查找已经删除的文件来释放磁盘空间

    测试环境一台服务器/目录空间使用率达到97%,但是通过du -sh *发现实际空间没用到那么多,初步怀疑,之前删除的文件,有运行中的进程一直占用,导致空间没有释放,如图通过du -sh *发现共实际使 ...

  6. (转) Delete/Truncate删除,释放表空间、降低高水位线、resize释放磁盘空间相关优化

    硬盘空间不足,打算删除数据库中的多余数据,但删除数据后,硬盘硬盘空间不能释放.[delete后用:alter table table_name move    truncate后用:alter tab ...

  7. maven私服nexus清理释放磁盘空间

    应用背景: 自建的maven私服(或者叫私仓)nexus在使用过程中,因很多服务不断迭代更新上传jar包至nexus中,底层存放在一个叫Blob Stores的存储中,最近发现该存储已增大至好几百G, ...

  8. Linux系统中查找、删除重复文件,释放磁盘空间。

    在Linux系操作系统中查找并删除重复文件的方法的确有很多,不过这里介绍的是一款非常简单实用的软件FSlint.FSlint是一个重复文件查找工具,可以使用它来清除不必要的重复文件,笔者经常使用它来释 ...

  9. mongodb 释放磁盘空间

    db.copyDatabase("from","to","127.0.0.1:16161"); 将127.0.0.1上的from库.拷贝到t ...

  10. 【mongo】drop不释放磁盘空间

    用drop删除mongo的collection后,其size归零,但是storage仍然是原大小,磁盘空间没有被释放. 要用下面命令释放无用的磁盘空间 mongod -repair

随机推荐

  1. Vue 学习笔记 [Part 2]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 一. 计算属性 1.1. 计算属性的本质 1.2. 计算属性和methods对比 〇.ES6补充 0.1. let/var 0.2 const ...

  2. nodejs实现将json转化为excel文件

    本文使用node.js实现将json数据转换导出为excel文件. 一.安装json2xls库 npm i json2xls 二.封装转换方法 新增jsonToExcel.js文件,该文件用于将jso ...

  3. HarmonyOS运动开发:打造便捷的静态快捷菜单

    鸿蒙核心技术##运动开发# 前言 在运动类应用中,用户往往需要快速访问常用功能,如查看成绩.赛事信息或开始运动.为了提升用户体验,鸿蒙(HarmonyOS)提供了静态快捷菜单功能,允许用户从桌面直接跳 ...

  4. AB test样本量计算器的具体使用方法

    在实际的AB test中一般都是直接使用一些AB test计算工具求解的,一方面是公式太复杂记不住,计算也比较耗费时间,另一方面在老板眼里计算器计算反而比手动计算更不容易出错 接下来以用的比较多的ev ...

  5. Let’s Encrypt申请证书

    前提 安装好ngixn,并配置解析好你的域名,仅仅留下证书配置处不填写即可. 安装certbot certbot 官方推荐的自动化脚本, 用来申请免费SSL证书的. (certbot中文翻译是 证书机 ...

  6. Luogu P10501 Cutting Game 题解

    P10501 Cutting Game 博弈论经典题目,考虑使用 SG 函数解决. 但是这一题和有向图游戏的定义不同,在有向图游戏不能操作者判负,而这一题中操作出某个状态者判胜.因此,我们需要进行转化 ...

  7. Eclipse WindowBuilder(SWT)插件安装及初次使用记录(萌新)

    Eclipse WindowBuilder(SWT)插件安装及初次使用(萌新) 一.插件安装 (有VPN的挂VPN,服务器在外网更新下载比较慢) 1.首先更新到最新版本 点击Help,点击check ...

  8. 模拟退火 python 实现

    简介 一直以为是一个高深的算法,好像据说在量子计算机中可以应用.发现原理并不难 参考链接 https://blog.csdn.net/google19890102/article/details/45 ...

  9. 工作中常见的OOM?你了解JVM调优吗?

    工作中常见的6种OOM问题 堆内存OOM 堆内存OOM是最常见的OOM了. 出现堆内存OOM问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space ...

  10. 谷云科技iPaaS产品3月更新速递|API计费、AI助手功能持续升级

    三月伊始,万象更新.谷云科技混合集成平台iPaaS近期对以下功能实现进一步升级: API计费功能更为全面.细致 随着企业加速通过API开放服务能力,外部客户调用API计费的需求显著增长.对于API调用 ...