你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux中磁盘空间如何释放?

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

  1. [root@linux-node1 ~]# df -h
  2. Filesystem            Size  Used Avail Use% Mounted on
  3. /dev/mapper/VolGroup00-LogVol00
  4.                        58G  7.8G   47G  100% /
  5. tmpfs                 1.9G     0  1.9G   0% /dev/shm
  6. /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)的方式:

  1. a)# echo " " > /home/wangshibo.log
  2. b)# cat /dev/null > /home/wangshibo.log
  3. 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%,现实环境中这样做不安全。

  1. [root@ss-server ~]# df -T
  2. Filesystem     Type     1K-blocks    Used Available Use% Mounted on
  3. /dev/vda1      ext4      41151808 4962148  34076228  13% /
  4. devtmpfs       devtmpfs   1931468       0   1931468   0% /dev
  5. tmpfs          tmpfs      1941204       0   1941204   0% /dev/shm
  6. tmpfs          tmpfs      1941204     652   1940552   1% /run
  7. tmpfs          tmpfs      1941204       0   1941204   0% /sys/fs/cgroup
  8. tmpfs          tmpfs       388244       0    388244   0% /run/user/0

  9. [root@ss-server ~]# df -h
  10. Filesystem      Size  Used Avail Use% Mounted on
  11. /dev/vda1        40G  4.8G   33G  13% /
  12. devtmpfs        1.9G     0  1.9G   0% /dev
  13. tmpfs           1.9G     0  1.9G   0% /dev/shm
  14. tmpfs           1.9G  620K  1.9G   1% /run
  15. tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
  16. tmpfs           380M     0  380M   0% /run/user/0
复制代码

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

  1. [root@ss-server ~]# tune2fs -m 2 /dev/vda1
  2. tune2fs 1.42.9 (28-Dec-2013)
  3. Setting reserved blocks percentage to 2% (209704 blocks)
复制代码

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

  1. [root@ss-server ~]# df -h
  2. Filesystem      Size  Used Avail Use% Mounted on
  3. /dev/vda1        40G  4.8G   34G  13% /
  4. devtmpfs        1.9G     0  1.9G   0% /dev
  5. tmpfs           1.9G     0  1.9G   0% /dev/shm
  6. tmpfs           1.9G  620K  1.9G   1% /run
  7. tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
  8. tmpfs           380M     0  380M   0% /run/user/0
复制代码

收藏 评论0 发布时间:2020-9-5 11:47

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版