问题说明


IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),于是在跟有关同事确认后rm -f果断删除该文件。但是发现删除该文件后,/分区的磁盘空间压根没有释放出来,使用率还是100%!这是为什么呢??

[root@linux-node1 ~]# df -hFilesystem            Size  Used Avail Use% Mounted on/dev/mapper/VolGroup00-LogVol00                       58G  7.8G   47G  100% /tmpfs                 1.9G     0  1.9G   0% /dev/shm/dev/vda1             190M   72M  108M  40% /boot

原因分析


在Linux系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),也就是说只是删除了文件和系统目录结构的链接;如果文件在删除时是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程将仍然可以读取该文件,也就是说没有删除掉文件在读取的状态,所以磁盘空间也就会一直被占用。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除文件后,空间还没释放,就是因为有进程还在一直向这个文件写入内容,导致虽然删除了文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

解决措施有以下几种


1.通过lsof|grep deleted命令获取到已经被删除但是仍然被应用程序占用的文件列表,然后kill掉还在占用所删除文件的进程。需要注意的是:如果有很多进程都在使用所删除文件,那么采用第1种方式kill进程就有点麻烦了,而且风险也比较大。因为kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。必须要确定不会对运行中的进程造成影响时才能使用,应用程序对这种方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题。2.或停掉或重启使用这个所删除文件的应用,让OS自动回收磁盘空间。3.也可以重启操作系统,不过这并不是最好的方法4.对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件。通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志。

在线清空文件(比如/home/wangshibo.log)的方式:

a)# echo " " > /home/wangshibo.log
b)# cat /dev/null > /home/wangshibo.log
c)# > /home/wangshibo.log

还有一种磁盘空间使用问题的现象:明明使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满:" no space left on device"!

一般这种问题都是由于分区目录下deleted删除后的资源空间没有真正释放出来导致的, 具体处理流程如下:

1.先df -lh查看一下磁盘使用状况, 发现/data分区下的Used已用空间很大, 但是实际查看并没有占用那么大的空间!2.找到被删除文件所在的分区, 比如/data分区3.查看被删除了的所有文件:lsof -n /data |grep deleted4.杀死这些文件的delete进程, 释放空间: lsof -n /data |grep deleted|awk '{print $2}'|xargs kill -95.接着再运行lsof -n /data |grep delete,应该就没有结果了。6.注意: 刚杀死deleted进程时, df -h查看/data 分区, Used已用空间可能时瞬间显示过大, 但随着deleted进程杀死, 资源逐渐释放, /data分区下的Used已用空间会逐渐变小, Avail可用空间会逐渐变大)

为你的磁盘预留空间


大多数文件系统都会保留一部分空间留作紧急情况时用(比如硬盘空间满了),这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash,给监控系统和管理员一点时间去察觉。不过有时候这部分预留的硬盘空间不用的话有点浪费。

在Linux系统中,ext2、ext3、ext4文件系统上通常会默认预留5%的磁盘空间,比如磁盘如果是2TB,这就意味着有100GB的空间会被预留下来,这样的话会不会显得有点浪费了。可以通过"tune2fs"命令来改变5%的默认设置,比如只预留2%的空间。但是不建议设成0%,现实环境中这样做不安全。

[root@ss-server ~]# df -TFilesystem     Type     1K-blocks    Used Available Use% Mounted on/dev/vda1      ext4      41151808 4962148  34076228  13% /devtmpfs       devtmpfs   1931468       0   1931468   0% /devtmpfs          tmpfs      1941204       0   1941204   0% /dev/shmtmpfs          tmpfs      1941204     652   1940552   1% /runtmpfs          tmpfs      1941204       0   1941204   0% /sys/fs/cgrouptmpfs          tmpfs       388244       0    388244   0% /run/user/0
[root@ss-server ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev/vda1        40G  4.8G   33G  13% /devtmpfs        1.9G     0  1.9G   0% /devtmpfs           1.9G     0  1.9G   0% /dev/shmtmpfs           1.9G  620K  1.9G   1% /runtmpfs           1.9G     0  1.9G   0% /sys/fs/cgrouptmpfs           380M     0  380M   0% /run/user/0

比如上面"/"分区是ext4文件系统,默认系统预留了5%也就是2G的空间。现在可以通过"tune2fs"命令将系统预留空间改为2%。

[root@ss-server ~]# tune2fs -m 2 /dev/vda1tune2fs 1.42.9 (28-Dec-2013)Setting reserved blocks percentage to 2% (209704 blocks)

执行后,发现"/"分区腾出了1G的空间,这时系统预留空间也就是2%了。

[root@ss-server ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev/vda1        40G  4.8G   34G  13% /devtmpfs        1.9G     0  1.9G   0% /devtmpfs           1.9G     0  1.9G   0% /dev/shmtmpfs           1.9G  620K  1.9G   1% /runtmpfs           1.9G     0  1.9G   0% /sys/fs/cgrouptmpfs           380M     0  380M   0% /run/user/0

注意:Linux下只有ext2、ext3、ext4文件系统时,系统才会默认预留5%的磁盘空间。如果文件系统是xfs、tmpfs、devtmpfs、overlay等,则系统默认不会预留磁盘空间。

Linux 磁盘空间释放问题相关推荐

  1. Linux磁盘空间释放

    概述 在近期的实际工作中,遇到过几次因为磁盘空间满而导致服务不可用的情况,所以免不了要对系统进行清理. 在最开始的几次清理过程中,通过删除一些大日志文件可以得到立竿见影的效果,所以就没怎么注意:但是在 ...

  2. linux磁盘空间df-h出不出来,linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件...

    用lsof / | grep -i delete 从根目录定位打开的被删除的文件 如果定位到某文件占用空间很大 主要是因为我们在删除这个日志文件的时候是用rm -rf *.log这样的命令删除的,删除 ...

  3. linux磁盘扩空间,Linux磁盘空间扩容(LVM)

    Linux磁盘空间扩容(lvm) 随着系统的运行时间增长,业务数据的增长,原有磁盘的空间会存在空间不足情况,导致系统不能正常运行,或者系统管理员磁盘没有完全划完,根据使用者的需求自行划分.那么怎么才能 ...

  4. 使用硬盘空间少的linux系统,linux磁盘空间不足的解决办法

    一些linux系统电脑用户在使用一些应用程序的时候,会被提醒:磁盘空间不足的问题,因此,就有网友想知道:linux查看磁盘空间的方法,以及linux磁盘空间不足的原因和解决方法.下面,就一起来看看今天 ...

  5. linux 日志文件被占用下不来怎么办,linux 磁盘空间被占满但找不到目标文件的问题处理 lsof命令...

    lsof简介 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能. 直接输入lsof部分输出为: 每行 ...

  6. linux 磁盘满了 预警,Linux磁盘空间满了的排查与解决思路

    block正常满 (磁盘实际不足) inode 满 大量的小文件 block 满 文件没有被彻底删除(硬链接数0 进程调用数不为0) 解放方法: 1 查看df -h 磁盘使用量根据占用量大小逐步逐步排 ...

  7. vm虚拟机linux磁盘空间不足,手动扩大

    vm虚拟机linux磁盘空间不足,手动扩大 随着Linux虚拟机的不断使用,在VMware中经常遇到 预先装好的 linux 虚拟机的硬盘空间过小 的问题,造成很多软件不能安装, 而重新装一个,又挺麻 ...

  8. linux磁盘空间不足,但是使用df却发现磁盘空间至少有一半的空间没有使用

    linux磁盘空间不足,但是使用df -ah却看到还有近一半的空间,怎么会报磁盘空间不足呢? 其实很简单,因为node节点已经用完了,一个文件对应一个node节点,我们这里的说的空间其实是block, ...

  9. oracle指令df,怎么使用df命令查看Linux磁盘空间?

    查看Linux磁盘空间的工具有很多,那么怎么使用命令来查看磁盘空间呢?那就要用到df命令了,下面小编给大家介绍下使用df命令查看Linux磁盘空间的方法. [root@localhost ~]# df ...

最新文章

  1. MySQL基础入门学习【1】基本操作
  2. 分布式系统设计原理与方案Dubbo+Zookeeper+Spring整合
  3. day07 数据类型间的相互转化及字符编码
  4. “ShardingCore”是如何针对分表下的分页进行优化的
  5. 物理磁盘空间使用已满导致数据库hang起
  6. IE8不兼容你的网页 怎么办? - 简单开启兼容模式
  7. 如何删除隐藏着的网卡
  8. cocoapods 使用时一个问题 (Unable to find a specification for `CYLTableViewPlaceHolder`)
  9. 从Bayes角度理解Deep learning
  10. ZedGraph设置辅助线
  11. 加速收敛_引入Powerball 与动量技术,新SGD优化算法收敛速度与泛化效果双提升 | IJCAI...
  12. 2018JavaScript状态调查:5个重要的思考( import takeaways) (摘译)
  13. VB.Net - 环境设置
  14. 什么是静态代理和动态代理,两者的区别(笔记)
  15. 常见的图像分割方法有以下几种
  16. TCPIP------慢启动与拥塞避免
  17. C语言”%p”的意思-----printf(%p,p)
  18. 英雄榜 此服务器当前正在维护中,《天下3》2021年全新山海经版本“再战黄泉”震撼登场!——网易《天下3》官方网站...
  19. Java 中ArrayList中的重复数据
  20. 各款adsl(猫)默认密码

热门文章

  1. 页面滚动的时候自动切换导航栏
  2. 如何通过限制 IP 相关信息 | 控制用户访问站点频率
  3. 量子力学顺口溜_数学的幽默打油诗
  4. 迅睿cms免费开源系统 v4.3.14
  5. C# RichTextBox 修改内容
  6. SQL Server2008下载链接以及安装教程
  7. I2C知识大全系列一 —— I2C相关概念
  8. 安卓进入debug模式
  9. 小心!如果遇到这些情况,你的流量可能被“劫持”了!
  10. 7-20 表达式转换 (25 分)